不同的SQLMap命令

前言 sqlmap是每个渗透测试师的必备工具。这是众多强大的主流工具之一,尤其是在测试owasp top 10中的sql注入漏洞时。从扫描sql注入漏洞到获取数据库名字、表和列,以及获得系统访问权限,其可被用于多种目的。
在本文中,我们将看到不同的sqlmap命令,在对不同场景下的sql注入进行利用时可能会比较得心应手。
可以从如下链接下载sqlmap:
windows
linux: git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
出于演示目的,我用的是vulnhub上的这个虚拟机。
让我们一起来看看sqlmap这款工具在get和post请求上的基本用法。
get请求 sqlmap -u http://site-to-test.com/test.php?id=1 -p id
sqlmap -u http://site-to-test.com/test.php?id=1*
-u:要扫描的url
-p:要扫描的字段
*:要扫描的字段(如果不用-p来指定的话)
post请求 我们可以在sqlmap扫描中指定post请求体中的数据。
sqlmap -u http://site-to-test.com/admin/index.php –data=”user=admin&password=admin” -p user
–data=post数据
另外一种方式是复制burp请求到一个文件里,然后同样传给sqlmap。
sqlmap –r 请求文件的路径
让我们再深入地了解一下sqlmap的其他选项。
扫描post登录页面 post请求的登录页面是通过cookie头来进行身份认证的,也就是get或者post请求时,包含在http头里的。我们必须给sqlmap提供有效的cookie才能对登录页面的post请求进行扫描。
sqlmap -u http://192.168.202.163/admin/index.php?id=1 –cookie=”cookie value“
/admin/index.php?id=1 是一个登录页面的post请求。
sqlmap -u http://192.168.202.163/admin/index.php?id=1 –user-agent=infosec
sqlmap -u http://192.168.202.163/admin/index.php?id=1 –referer= http://192.168.202.163/admin/index.php
除此以外,我们还可以通过–random-agent选项来随机指定user-agent头。
爬取 爬取(crawl)是一个非常重要的选项,可以让sqlmap从网站根目录开始爬取,爬取深度可以在命令中指定。
sqlmap -u http://192.168.202.160/ –crawl=1
–crawl: 指定爬取深度。(例如:指定值为2表示让sqlmap最多爬取两层目录)
如果想排除爬取范围内的任意页面,我们可以通过使用–crawl-exclude参数。当爬取post型的登录页面时,该选项十分有用。
sqlmap -u http://192.168.202.163/ –crawl=3 –cookie=”cookie value” –crawl-exclude=”logout”
该命令可以最多爬取三层目录,并排除任何存在“logout”(注销)关键字的url。
如下图所示,sqlmap爬取了网站,但是排除了注销的url。
去掉–crawl-exclude选项,再运行一次同样的命令:
如下图所示,去掉–crawl-exclude选项后,sqlmap爬取了注销url。该url由于注销会导致退出当前会话(session),失效的会话会导致无法完成扫描。
通过代理使用sqlmap 我们可以指定一个代理来记录传递的请求。如果想通过burp这样的代理工具来传递请求,打开burp suite并配置其监听本机的8080端口。接着使用如下sqlmap命令:
sqlmap -u http://192.168.202.162/cat.php?id=1 -p id –proxy=”http://localhost:8080″
现在想象一下这样的场景:当sql注入关键字,比如orderby和union,被服务器端加到黑名单了。对于这种场景,我们可以通过驼峰拼写法来绕过这类限制。用sqlmap将流量转发到burp,然后用burp的“匹配和替换(match and replace)”功能来绕过以上限制。
匹配和替换功能可以在burp的“proxy”标签下的“options”标签下找到。
这样就可以检查请求中是否存在“union”这样的关键字。如果存在,那么将其替换为“union”。
在某些网站只能通过代理服务器访问的场景下,同样可以用下面的命令来指定:
sqlmap -u http://192.168.202.162/cat.php?id=1 -p id –proxy=”http://localhost:8080″ –proxy-cred=username:password
批(量)处理 批处理(batch)命令适用于非交互的会话。在扫描的时候,sqlmap可能会让我们提供一些输入:比如,在用爬取功能的时候,会问用户是否想扫描指定的url。当在命令中指定–batch选项时,sqlmap会用一个默认值来处理,而不再问用户。
表单 存在表单字段的页面url(比如登录页面)可以通过–form选项来解析该页面,并引导用户去测试指定字段。
现在,可以通过–form和–batch选项一起来高效地测试存在大量表单字段的页面了。因为这样可以解析该页面,并代替用户自动提供输入来测试这些表单字段。
如果想要扫描整个网站,可以同时用crawl和form选项。
线程 线程(threads)选项可以让用户指定sqlmap发送的并发请求数量,这样可以减少整体的测试时间。不过别总是保持一个较高的值,因为可能会影响结果的准确性。
危险和级别(risk and level) 危险(risk)可以指定sqlmap使用的payload类型。默认情况下值为1,最高可以设置为3。值为3时,就是最大值,包含了一些严重的sql查询。
级别(level)指定要执行的检查或payload的数量。值的范围时从1到5。最大值为5,扫描时会用到大量的payload。
当sqlmap使用默认设置无法扫描注入点时,建议增加risk和level的值。(译者注:此举存在风险【risk】)
详细信息 假如我们想看看sqlmap发送的payload,可以用详细信息(verbose)参数,其值范围是从1到6。
数据库枚举 众所周知,sqlmap主要用于对sql注入的利用,一起来看看这些通过sql注入漏洞来枚举数据库的命令。
 1. –dbs: 该选项用于枚举数据库。
2. 现在得到了数据库名。要获得“photoblog”数据库的表,可以执行如下命令:
3. 要获得“users”表中的字段细节,可以执行如下命令:
4. 要转储(dump)“users”这张表中的数据,可以用–dump命令:
5. 查看当前数据库用户:
6. 查看当前数据库名:
7. 查看权限(privileges)、角色(roles),并查看当前数据库用户是否是数据库管理员:
用tamper脚本绕过waf 很多时候,我们会遇到网站被waf(web application firewall)保护的场景,我们可以用下面的命令来检查目标网站是否被waf保护:
–identify-waf (译者注:新版本中已移除)
识别出waf后,我们就可以用tamper脚本来进行绕过。tamper脚本可以修改请求来绕过waf检测。这些脚本可以在/usr/share/sqlmap/tmper/ 目录下找到。
执行系统命令 如果当前数据库用户拥有dba权限,我们就可以使用如下选项来执行操作系统级别的命令:
对于linux目标服务器:
 sqlmap -u http://192.168.202.162/cat.php?id=1 –os-shell
对于windows目标服务器:
 sqlmap -u http://192.168.202.162/cat.php?id=1 –os-cmd cmd命令
执行sql查询 我们还可以用下面的命令在数据库中执行sql语句:
sqlmap -u 192.168.202.164/cat.php?id=2 –sql-shell
其他选项 一些其他选项如下:
1. 扫描一些被类似basic、ntlm和digest这样的http身份认证保护的页面:
sqlmap -u http://example.com/admin.aspx –auth-type basic –auth-cred “admin:admin”
2. 扫描被基于密钥认证保护的页面:
sqlmap -u http://example.com/admin.aspx –auth-file=pem证书或私钥文件路径
3. 随机化发起攻击的ip地址(在比如waf检测,或者为了增加被溯源的难度,隐藏攻击来源等场景下很有用)。
使用默认的tor(洋葱路由)匿名网络:
sqlmap -u http://example.com/admin.aspx –tor
指定tor的端口:
sqlmap -u http://example.com/admin.aspx –tor-port=tor代理端口
4. 如果需要在每次http请求之间延时:
sqlmap -u http://example.com/admin.aspx –delay=1 #延时1秒
5. 如果页面被csrf token保护,同样可以用下面的命令:
sqlmap -u http://example.com/admin.aspx –csrf-token=csrf token
6. 在二阶注入中,sql注入的payload会被存储在目标网站的数据库中,之后在访问其他页面的时候被执行。我们指定一个sqlmap用来请求的已被注入的url。然后让sqlmap用如下命令来注入:
sqlmap -r /root/desktop/burp.txt –second-order “http://target/vulnerbalepage.php”
burp.txt是包含将要用于测试的文件,其中包含注入点。
–second-order “url” 指定的是每次注入后sqlmap去访问的url。
总结 在检测和利用sql注入漏洞方面,sqlmap是一个不错的工具。其支持如此多的选项,开关以及可以创建并使用自定义脚本,让它从众多检测sql注入漏洞的开源工具中脱颖而出。


区块链真正的应用场景在哪里
双展联动,芯讯通全品类模组闪耀2022高交会
电流互感器烧毁的原因有哪些
怎样在树莓派3上安装和使用ArduinoIDE
工控机主板出现故障要如何拆卸
不同的SQLMap命令
2018年三大运营商战略规划分析:中国联通深入推进混改
Apple Pay逐渐增加了对支付的支持
水产品抗生素残留检测仪的产品性能介绍
一对一教育APP开发公司
Pantera Capital获得融资超过7000万美元,是区块链发展史上浓墨重彩的一笔
土肥仪的作用与技术参数
一种闭环输入阻抗控制的PFC控制方法
特斯拉充电接口将作为充电桩强制标准
温度传感器TC07构成的加热器控制电路
TI推出BOM成本70美元以下的企业平板电脑解决方案
基于IP技术的电力系统远动技术研究
uboot的基本概念和启动流程分析
7代酷睿i7-7700K评测 值不值得买
「MINIEYE」与 Xilinx 达成战略合作