目录
介绍
命令参数
指定目标
直连数据库
服务型数据库(前提知道数据库用户名和密码)
文件型数据库(前提知道数据库绝对路径)
URL探测
文件读取目标
Google dork注入
Http参数
设置请求方法
POST提交参数
设置参数分隔符
设置Cookie
设置User-Agent
Host
Referer
额外的HTTP头部
协议认证
设置代理
Tor匿名网络
设置延迟
设置超时
设置重试次数
设置随机化参数
设置日志过滤目标
设置忽略
设置HTTP私钥
设置安全模式
设置忽略URL编码
绕过反CSRF保护
强制使用SSL / HTTPS
性能优化
设置持久HTTP连接
设置不接收HTTP的body
设置多线程
设置预测输出
检测和利用SQL注入的工具。
官网:sqlmap官网
用户手册:sqlmapWiki
本文参考用户手册,有删减,算是低创,但并非完全翻译,有包含自己的抓包等内容。
选项 | 含义 | 描述 |
---|---|---|
-h,--help |
帮助 | 显示基本帮助消息并退出 |
-hh | 高级帮助 | 显示高级帮助消息并退出 |
--version | 版本 | 显示程序的版本号并退出 |
-u,-url=URL | URL | 目标URL(例如“ http://www.site.com/vuln.php?id=1”) |
-d | DIRECT | 连接字符串,用于数据库直接连接 |
-l | LOGFILE | 从Burp或WebScarab代理日志文件中解析目标 |
-m | BULKFILE | 扫描文本文件中给定的多个目标 |
-r | REQUESTFILE | 从文件加载HTTP请求 |
-g | GOOGLEDORK | 将Google dork结果处理为目标URL |
-c | CONFIGFILE | 从配置INI文件中加载选项 |
-A | AGENT | HTTP User-Agent标头值 |
-H | HEADER | 额外的头部(例如“ X-Forwarded-For:127.0.0.1”) |
--method=METHOD | METHOD | 强制使用给定的HTTP方法(例如,PUT) |
--data=DATA | DATA | 要通过POST发送的数据字符串(例如“ id = 1”) |
--param-del=PARAM | PARAM | 用于分割参数值的字符(例如,&,;) |
--cookie=COOKIE | COOKIE | HTTP Cookie标头值(例如“ PHPSESSID = a8d127e ..”) |
--random-agent | User-Agent | 使用随机选择的HTTP User-Agent标头值 |
--auth-type=AUTH | AUTH | HTTP身份验证类型(Basic, Digest, NTLM 或者 PKI) |
--auth-cred=AUTH | --auth-cred=AUTH | HTTP身份验证凭据(用户名:密码) |
--proxy=PROXY | PROXY | 使用代理连接到目标URL |
--tor | Tor | 使用Tor匿名网络 |
--delay=DELAY | DELAY | 每个HTTP请求之间的延迟秒数 |
--timeout=TIMEOUT | TIMEOUT | 超时连接之前等待的秒数(默认为30) |
--randomize=RPARAM | RPARAM | 随机更改给定参数的值 |
--check-tor | Check Tor | 检查Tor是否正确使用 |
-p | TESTPARAMETER | 可测试的参数 |
--dbms=DBMS | DBMS | 强制将后端DBMS设置为提供的值 |
--level=LEVEL | LEVEL | 要执行的测试级别(1-5,默认为1) |
--risk=RISK | RISK | 执行测试的风险(1-3,默认值为1) |
--technique=TECH | TECHNIQUE | 要使用的SQL注入技术(默认为“BEUSTQ”) |
-a, --all | ALL | 检索所有内容 |
-b, --banner | BANNER | 检索DBMS标语 |
--current-user | current-user | 检索DBMS当前数据库 |
--passwords | passwords | 枚举DBMS用户密码哈希值 |
--tables | tables | 枚举DBMS数据库表 |
--columns | columns | 枚举DBMS数据库表列 |
--schema | schema | 枚举DBMS模式 |
--dump | dump | 转储DBMS数据库表条目 |
--dump-all | dumpall | 转储所有DBMS数据库表条目 |
-D DB | DATABASE | DBMS数据库枚举 |
-T TBL | TABLE | 要枚举的DBMS数据库表 |
-C COL | COLUMN | 要枚举的DBMS数据库表列 |
--os-shell | 提示输入交互式操作系统外壳 | |
--os-pwn | 提示输入OOB shell,Meterpreter或VNC | |
--batch | 从不要求用户输入,使用默认行为 | |
--flush-session | SESSION | 刷新当前目标的会话文件 |
--sqlmap-shell | 提示输入交互式sqlmap shell | |
--wizard | wizard | 面向初学者的简单向导界面 |
选项:-d
格式:
DBMS://USER:PASSWORDODBMS_IP:DBMS_PORT/DATABASE NAME(MySQL,Oracle,Microsoft SQL Server,PostgreSQL,etc.)
例如:
python sqlmap.py -d "mysql://root:84418733w@localhost:3306/test2" -f --banner
可能出现的问题:
提示是缺少包的问题,通过提示,使用以下命令可安装所需包(根据自身python版本及平台修改命令)
git clone https://github.com/petehunt/PyMySQL/
cd PyMySQL/
python ./setup.py install
pip3 install sqlalchemy
格式:
DBMS://DATABASE_FILEPATH(SQLite,Microsoft Access,Firebird等等)
选项:-u或者--url
http协议及https协议都可以,指定端口时使用ip:port在url中添加即可。
python sqlmap.py -u "http://192.168.31.174:8080/login.php?id=0"
-l 博主仅安装了Burpsuite,展示下Burpsuite如何操作。
示例
python sqlmap.py -l E:\Workspace\Burp_suite_workspace\test.log
按y进行探测并继续。
-x 这个很多站点都没有了,有的也基本没有GET、POST,就不做展示了。
-m 多个目标就是指多个url,你可以把自己想要探测的多个url写到txt文本中
python sqlmap.py -m urls.txt
-r 把抓到的http包复制到txt文件中,进行探测
示例
python sqlmap.py -l E:\Workspace\Burp_suite_workspace\httpbinGet.txt
这里提示没有参数,你可以尝试其他的,或者靶场中的。
-c 配置文件探测
从配置文件中我们可以看到一些参数,填写参数即可。
选项:-g
就是一些google高级搜索作为url, 常见的高级搜索有infile,inurl,intitle,filetype等。
python sqlmap.py -g "inurl:\".php?id=1\""
不怎么样,翻了墙也半天没反应,了解下好了。
有关Http协议的内容,可以参考网络-http协议学习笔记(消息结构、请求方法、状态码等)
sqlmap一般会调用合适的请求方法,但是,PUT等请求方法sqlmap不会自动调用,需要手动配置。
选项:--method=PUT
sqlmap默认的是使用GET方法,可以使用--data参数来进行数据提交,key=value形式,使用&连接。
选项:--data=DATA
python sqlmap.py -u "http://www.target.com" --data="key1:value&key2:value"
默认的分割符为&,可以进行设置,个人认为就用默认的就好了
选项:--param-del=PARAM
python sqlmap.py -u "http://www.target.com" --data="key1:value;key2:value" --parameter-del=";"
以下两种情况可能会使用:
--cookie=COOKIE。同时,--leverl=2或者2以上
选项:–user-agent,-A,–random-agent
Sqlmap发送的HTTP请求中的User-Agent默认值为:
sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)
python sqlmap.py -u "http://www.httpbin.org/get?a=xxx"
很明显,sqlmap默认的User-Agent中含有sqlmap,而一般的网页浏览是浏览器,比如下图使用火狐浏览器进行访问,因此,探测目标可能根据User-Agent对sqlmap进行拦截等处理,有必要进行User-Agent的伪造。
使用-A参数进行修改,如下所示。
再次抓包后发现User-Agent已修改。
当然,没必要每次用浏览器抓包,你可以保存下来,或者使用–random-agent参数,用sqlmap中自带的一些。
当“–level”参数设置为3或更高时,Sqlmap会检测User-Agent是否存在注入漏洞。
选项:–host
使用该参数可以手动指定HTTP头中的Host值。
当“–level”参数设置为5或更高时,Sqlmap会检测Host是否存在注入漏洞。
选项:–referer
使用该参数可以指定HTTP头中的Referer值。
当“–level”设置为3或更高时,Sqlmap会检测Referer是否存在注入漏洞
选项:-H,--header,--headers
python sqlmap.py -u "http://www.httpbin.org/get?a=xxx" -H "blog:lady_killer9" --banner
当然,对于已有的头部字段,也可以修改。
python sqlmap.py -u "http://www.httpbin.org/get?a=xxx" -H "User-Agent:lady_killer9" --banner
选项:–auth-type和–auth-cred
“–auth-type”用于指定认证方式,支持四种身份认证方式:Basic、Digest、NTLM、PKI
一般就是Basic,输入登录的用户名和密码,类似于Postman中的Basic Auth。
选项:–proxy、–proxy-cred、–proxy-file和–ignore-proxy
使用参数“–proxy”来设置一个HTTP(S)代理,格式是“http(s)://ip:port”。
如果代理需要认证,使用参数“–proxy-cred”来提供认证凭证,格式是“username:password”。
使用参数“–proxy-file”来指定一个存储着多条代理的文件。
使用参数“–ignore-proxy”忽略本地代理设置。
事实证明,不花钱就想得到免费ip代理,,,是在想peach。。。
选项:–tor、–tor-type、–tor-port和–check-tor
前端时间看见一位b站up主,吐槽自己的亲戚好友,让他使用刷*等软件刷视频赚钱,然后他写了一个脚本,跳过广告,自动滚屏,然后一天弄了几十块,还没提现,就被后台封号了。
为什么提到这个呢,因为一些后台会看你的访问频率,检测DDOS攻击或其他危险行为,所以这里我们设置延迟,让两个数据包之间有延迟,模拟人工浏览器访问。
–-delay
python sqlmap.py -u "http://www.httpbin.org/get?a=xxx" --delay=0.5 --banner
选项:-–timeout
超时时间默认是30秒,可以用参数“–timeout”指定超时时间。
选项:-–retries
超时后Sqlmap会进行重试,重试次数默认为3,可以用参数“–retries”指定最大重试次数。
选项:-–randomize
使用该参数,Sqlmap会随机生成每次HTTP请求中参数的值,可以进行简单的fuzz,类似于Peach,内部原理是变异还是什么目前还不清楚。
前面是a=xxx,sqlmap有随机的赋值a其他的值,a=123时,也会随机更改为4184等值。
选项:-–scope,配合-l参数
指定一个Python正则表达式对代理日志进行过滤,只测试符合正则表达式的目标,如:
python sqlmap.py -l burp.log --scope="(www)?\.target\.(com|net|org)"
选项:--ignore-code
如果测试的站点偶尔返回导致常规sqlmap运行出现问题的HTTP错误代码(例如,401(未授权)),想忽略该站点并继续进行测试,可以使用 --ignore-code
设置HTTP私钥
选项:--auth-file
文件格式为包含证书和私钥的PEM格式
选项:--safe-url
,--safe-post
,--safe-req
和--safe-freq
避免过多的请求失败后会话被破坏,对表明safe的不进行任何类型的注入
--safe-url
:测试期间经常访问的URL地址。--safe-post
:HTTP POST数据发送到给定的安全URL地址。--safe-req
:从文件加载并使用安全的HTTP请求。--safe-freq
:测试两次访问给定安全位置之间的请求。选项:–skip-urlencode
使用该参数可以关闭URL编码,服务器端不支持RFC标准时使用。
选项:--csrf-token
和--csrf-url
许多站点都以令牌,每个页面响应期间随机设置的隐藏字段值的形式结合了反CSRF保护。SqlMap的会自动尝试识别并绕过这种保护,但也有选项--csrf-token
,并--csrf-url
可以用来进一步微调它。选项--csrf-token
可用于设置包含随机标记的隐藏值的名称。在网站为此类字段使用非标准名称的情况下,这很有用。选项--csrf-url
可用于从任意URL地址检索令牌值。如果易受攻击的目标URL最初不包含必要的令牌值,但需要从其他位置提取该令牌值,则此功能很有用。
选项: --force-ssl
如果用户想要向目标强制使用SSL / HTTPS请求,则可以使用此选项。在使用选项--crawl
收集URL或为-l选项提供Burp日志的情况下,这个选项很有用。
选项:-–keep-alive
该参数让Sqlmap使用HTTP长连接,头部的Connection字段会变为keep-alive。该选项与“–proxy”不兼容。
选项:-–null-connection
有特殊的HTTP请求类型,可用于获取HTTP响应的大小而无需获取HTTP正文。这种知识可以在盲目注射技术被用来区分True
、False
响应。提供此选项后,sqlmap将尝试测试和利用两种不同的NULL连接技术:Range
和HEAD
。如果目标Web服务器支持其中任何一种,则可以明显节省已使用的带宽,从而提高速度。
选项:-–threads
使用该选项指定Sqlmap可以达到的最大并发数。默认为3个,可修改,最大为10。
选项: --predict-output
此选项在推理算法中用于对要检索的值的字符进行顺序统计预测。此开关与--threads
选项不兼容。
未完待续...
更多内容查看:网络安全-自学笔记
有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。