SQL-map
1. 介绍:
sqlmap是一个开源的渗透测试工具,他可以自动化检测和利用sql注入缺陷,以及接管数据库服务器的过程,他有一个强大的检测引擎,许多适合与终极渗透测试的小众特性和广泛的开关冲数据库指纹,数据库获取数据道访问底层的文件系统和通过带外连接在操作系统上执行命令
2. sqlmap获取目标
2.1 sqlmap直连数据库
sqlmap -d "mysql://root:123456@192.168.1.100:3306/test" -f --banner
2.2 sqlmap进行url探测
参数 -u 或者–url
sqlmap -u "http://192.168.1.100/sqli/less-1index.php?id=1" --banner
2.3 sqlmap文件读取目标
* sqlmap支持从不同的类型的文件中读取目标进行sql注入探测
- -l 从burpsuite proxy中读取HTTP请求文件
保存文件,复制文件,将其放进sqlmap目录下
sqlmap -l 文件名路径
- -x 从sitemap.xml站点地图文件中读取目标探测
- -m 从多行文本格式文件读取多个目标,对多个目标进行探测
- -r 从文本文件中读取HTTP请求作为sql注入的目标—————-检测是否具有http消息头当中的注入
- 打开bp,拦截消息并复制
- 将复制的信息放进sqlmap目录里的一个文本中
sqlmap -r target.txt
- -c 从配置文件sqlmap.conf中读取探测目标
sqlmap -c sqlmap.conf
2.4 SqlmapGoogle批量扫注入
sqlmap 通过-g自动利用google获取指定的GoogleHack目标,然后利用交互向导模式进行sql注入探测
sqlmap -g "inurl:.php?id=1"
3.SQLmap设置请求参数(一)
3.1 sqlmap设置http方法
SQlmap会自动在探测过程中使用合适的HTTP请求方式但在某些具体的情况下,需要强制的使用具体的http的请求方法。例如PUT请求方法,使用--method=PUT
3.2 sqlmap设置post提交参数
默认情况下用于执行的HTTp请求的HTTp方法是get方法,但是可以通过在post请求中发送的数据隐式地将其修改为post
sqlmap -u "http://www.target.com/vuln.php" --data="id=1" -f --banner(网站的指纹信息) --dbs(获取对应的数据库) --users(获取对应的用户)
先使用bp对页面进行抓包,之后再进行
复制表单数据,提交至data内容中
3.3 sqlmap设置参数分割符
* 在某些情况下,sqlmap需要覆盖默认参数分割符(例如& in GET和POST数据,才能正确地分割和单独处理每个参数)
--param-del=";" 设置;为分割符
3.4 sqlmap设置cookie头
sqlmap 中设置cookie的参数:
--cookie --COOKIE-del --load-cookies --drop-set-cookie
使用场景:
- web应用程序具有基于cookie的验证过程
- 想利用cookie值上的sql注入漏洞
Sqlmap使用cookie的过程
- 登录或者浏览页面
- 打开审计工具或者代理截断,复制cookie
- 在sqlmap中使用 –cookie粘贴Cookie
* 在通信过程中,web应用程序使用set-cookie进行响应,sqlmap将在所有的进一步的HTTP的请求中自动使用其值作为cookie的头
* sqlmap还将为SQL注入自动测试这些值,这可以通过提供--drop-set-cookie-sqlmap将忽略任何即将到来的Set-Cookie头来避免
* 反之,如果提供了一个带有选项的HTTP Cookie报头--cookie和目标url在任何时候发送一个HTTPset-cookie,sqlmap将询问使用哪组cookie
* load-cookie,可以用来提供包含Netscape/wget格式的cookie特殊文件
注意:
如果需要对http cookie值进行SQl注入探测,需要设置--level2(3)以上
4.SQLmap设置请求参数(二)
4.1 sqlmap设置user-Agent
* 默认情况下,sqlmap使用一下用户代理头值执行HTTP请求
sqlmap/1.0-dev-xxxxxxx(http://sqlmap.org)
但是可以通过 –user-agent来伪造
* 此外,通过--random-agent,sqlmap将从./txt/user-agent随机选择一个用于会话的所有http请求
* 一些站点会检测user-agent值如果不是一个合法的请求,就会中断连接。同时sqlmap也会报错
使用:
sqlmap --hh
查看详细信息
sqlmap -u "http://127.0.0.1/sql/less-1/?id=1" --banner
可以利用wireshark抓包看一下
此时的user-agent
- 打开burp抓去合法的user-agent,复制。
sqlmap -u "http://127.0.0.1/sql/less-1/?id=1" --user-agent="Mozilla/5.0 (Xll; linux i686; rv:52.0) Gecko/20100101 Firefox/52.0" --banner
重新抓包查看user-agent
sqlmap -u "http://127.0.0.1/sql/less-1/?id=1" --random-agent --banner
查看user-agent.txt文件
注意:针对user-Agent的值探测sql注入 ,需要设置–level 的值为3
抓包,将内容复制到一个文件中,在注入点后边加一个* (提示探测点即使没有level 3 也会检测)
sqlmap -r target.txt --level 3
4.2 Sqlmap设置host头
- 可以手动设置host,默认情况下,从提供的目标url解析host主机头
注意:如果–level的值为5将对http主机头进行host检测
表明探测所有内容
4.3 Sqlmap设置Referer头部
默认情况下,如果没有显示的设置,HTTP请求不会发送HTTP的引用头。
注意: 如果–level设置的为3或以上将针对HTTP引用头,进行sql注入测试
同理,拷贝内容到文件中,
sqlmap -r target.txt --level 5
4.4 Sqlmap设置额外的HTTP头
通过设置–header,可以提供额外的HTTP的标头。每个标头必须使用换行符进行分割,从配置文件中提供他们容易的多,可以产查看sqlmap.conf
使用例子:
-H 或者–header设定一个请求参数,–headers设定多个请求参数
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" --headers="User-Agent:HAHA\nCookie:123456" --banner
5.sqlmap请求参数设置(三)
5.1 sqlmap设置http协议认证
Sqlmap中设置http协议认证的参数:–auth-type和–auth-cred
其中–auth-type支持BASIC,DIgest,NTLM
–auth-cred支持的语法: username:password
5.2 Sqlmap设置http代理
SQLmap设置代理参数–porxy,–proxy-cred,–proxy-file,–ignore-proxy
--proxy用来设置HTTP代理服务器的位置 格式: --proxy http(s)://ip[:端口]
--proxy-cred用来设置HTP代理服务器的认证信息 格式: --proxy-cred uername:password
--proxy-file用来设置多条代理在文件中
--ignore-proxy当您希望通过忽略系统范围内的HTTPS代理服务器的设置来针对本地网络的目标部分运行sqlmap时,应该使用这种方法
5.3 Sqlmap设置TOR隐藏网络
SQLmap设置Tor网络的参数: –tor,–tor-port,–tor-type –check-for
安装tor:
apt install tor
service tor start
service tor status
如果有vps,那么会设置成功!!!
5.4 sqlmap设置延迟
* sqlmap探测过程中回发送大量的Payload到目标,如果默认情况下过快的发包速度导致目标预警。为了避免这样的情况,可以探测设置sqlmap发包延迟。
--delay 0.5 设置延迟0.5秒
6. Sqlmap设置参数(四)
6.1 Sqlmap设置超时
在考虑超时HTTPS请求之前,可以指定等待的秒数。有效值是一个浮点数,默认设置为30秒
–timeout 10.5
6.2 sqlmap设置重试次数
–retries count 设置对应的重试次数,默认情况下重试3次
6.3 sqlmap设置随机化参数
sqlmap可以指定要在每次请求期间随机更改其值的参数名称。长度和类型根据提供的原始值保持一致
–randomize 参数名称
结果
6.4 Sqlmap设置日志过滤目标
使用选项-l使用从提供的日志解析的所有主机不同,可以指定邮箱的python正则表达式,用于过滤所需的日志
--skip-urlencode 不进行url加密
浏览网页后,所有的日志记录都会保存在文件中
sqlmap -r proxy.txt --scope="192.168.100.100" --banner
7.SQLmap设置请求参数(五)
7.1 Sqlmap设置忽略401
–ignore-401 设置忽略未验证错误
7.2 Sqlmap设置HTTP协议的私钥
当web服务器需要适当的客户端证书和用于验证的私钥时,应该使用此项。提供的值应该是一个PEM格式的key_file,其中包含证书和私钥
--auth-file 文件名
7.3 Sqlmap设置安全模式
避免多次请求后销毁会话
–safe-url,–safe-post,–safe-rep,–safe-freq
通过这种方式,sqlmap将访问每个预定义变量的请求而不对某个安全URL 执行任何类型的注入
7.4 Sqlmap设置url编码
根据参数的设置(例如get),默认情况下他的值可以是url编码。在某些情况下,后端的web服务不不遵循RFC标准需要以原始的非编码形式发送值。在这种情况下使用--skip-urlencode
–skip-urlencode 不进行url加密
8. Sqlmap性能优化
8.1 Sqlmap设置持久http连接
--keep-alive
8.2 Sqlmap设置不接收http body
SQLmap设置空连接,标识不接收http body,常用在盲注的过程
参数: --nul-connection
使用HEAD探测不会接收,报文内容
8.3 SQLmap设置多线程
参数:--thread
默认是3个线程,最大设置10个
8.4SQLmap设置预测输出
在推理算法中用于检索值字符的顺序统计预测
参数: --predict-output
注意:这个参数与多线程参数不兼容
9.SQLmap指定位置注入
9.1 SQLmap注入介绍
SQL注入可以在HTTP报文中的任意位置
9.2 SQLmap设置指定注入参数
Sqlmap设置参数:
-p,--skip,--param-exclude,--skip-static
-p:
-p "指定具体的参数"
–skip:
忽略探测具体的参数 --level --skip "user-agent,referer"
–param-exclude
忽略包含具体内容的参数 --param-exclude="token|session" #不对包含token和session的参数进行检测
–skip-static
忽略非动态参数