今天继续给大家介绍渗透测试相关知识,本文主要内容是SQLUser-Agent注入详解。
免责声明:
本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!
再次强调:严禁对未授权设备进行渗透测试!
一、SQL User-Agent简介
User-Agent是HTTP协议中规定的一个HTTP头字段,该字段可以标识访问客户端的浏览器类型,操作系统类型及版本,CPU类型等等。User-Agent字段会由客户端在访问浏览器时携带,在有些环境中,服务器会记录下客户端访问的User-Agent字段,这就可能存在有数据库的交互,因此会产生SQL注入漏洞。
需要注意的是,当我们尝试对既定目标进行渗透测试时,应当首先进行传统的GET和POST方式的注入,如果这种普通的注入方式不能够进行渗透,再判断站点是否可能存在User-Agent的数据库信息交互,并尝试进行SQL注入测试。
二、SQL User-Agent靶场简介
下面,我们使用sqli_lab靶场的第18关来进行SQL User-Agent注入的实战,首先,我们来简单看一下这一关的靶场。
进入靶场后,我们可以看到是如下的登录页面:
我们成功登录后,发现页面如下所示:
从上图中我们可以看出,我们在访问该站点时的User-Agent信息被加载到了页面上。
我们来看一下该站点的PHP代码,如下所示:
从上述代码中可以看出,该站点会提取HTTP头中的User-Agent和IP地址,并插入到数据库中,我们此时查询当前数据库情况,结果如下所示:
此外,我们还需要注意到的是,在本站点中,没有对客户端的User-Agent信息进行任何的检测和过滤,因此,我们可以利用这一点,把SQL注入的payload插入到User-Agent头部,这样就可以成功的实现SQL注入了。
三、SQL User-Agent注入实战
接下来,我们就可以进行SQL User-Agent注入的实战了。
首先,我们使用burpsuit工具,抓取访问该站点的数据包,然后在该数据包的User-Agent字段,添加任意测试内容,结果发现我们的测试内容会出现在页面上,如下所示:
这样,考虑到User-Agent字段处是insert语句,因此我们就可以使用updatexml报错注入了,构造User-Agent的payload如下所示:
tctctc' and updatexml(1,concat('~',(database()),'~'),1) and '1'='1
使用该payload访问后结果如下所示:
从上图中我们可以看出,我们成功得到了目标站点的数据库名称。
之后,我们构造payload,爆出目标站点的表名,User-Agent的payload如下所示:
1234' and updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema = database() ),'~'),1) and '1'='1
使用该payload访问目标站点后结果如下所示:
在这里,要注意的是,我们需要将之前payload中的tctctc改成1234,否则,就会出现如下问题:
从上图中,我们可以成功得到目标站点的表名,按照上述方式,我们就可以逐步得到目标站点的数据库所有信息了。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200