http head injection

http head injection


   本文仅针对http 头注入进行总结,首先按常见性罗列一下存在http头注入的参数.

上述http头部存在都是有真实的案例,作为科普文,还是得将每个头部具体干嘛的写下.


HTTP头部详解

User-Agent:使得服务器能够识别客户使用的操作系统,游览器版本等.(很多数据量大的网站中会记录客户使用的操作系统或浏览器版本等存入数据库中)

Cookie:网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密).

X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,(通常一些网站的防注入功能会记录请求端真实IP地址并写入数据库or某文件[通过修改XXF头可以实现伪造IP]).

Clien-IP:同上,不做过多介绍.

Rerferer:浏览器向 WEB 服务器表明自己是从哪个页面链接过来的.

Host:客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号(这个我本人还没碰到过,不过有真实存在的案例还是写上吧).


存在漏洞的代码(上述所有http头)

关于XXF注入可以看下http://www.lsafe.org/?p=481

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
//User-agent
<?php
$_userAgent = $_SERVER['HTTP_USER_AGENT'];
echo $_userAgent;
$mydb = new mysqli('localhost', 'root', 'root', 'http');
$sql = "insert into htt9(httpsqli) values ('$_userAgent')";
$mydb->query($sql);
?>
//Cookie
<?php
setcookie("user","admin",time()+3600);
echo $_COOKIE['user'];
$mydb = new mysqli('localhost', 'root', 'root', 'http');
$sql = "insert into htt9(httpsqli) values ({$_COOKIE['user']})";
$mydb->query($sql);
?>
//X-Forwarded-For
<?php
header("Content-Type: text/html; charset=UTF-8");
function Ip(){
$ip = '';
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
$getIp = Ip();
echo Ip();
$mydb = new mysqli('localhost', 'root', 'root', 'http');
$sql = "insert into htt9(httpsqli) values ('$getIp')";
$mydb->query($sql);
?>
//Clien-ip
<?php
header("Content-Type: text/html; charset=UTF-8");
function Ip(){
$ip = '';
if(isset($_SERVER['HTTP_CLIENT_IP'])){
$ip = $_SERVER['HTTP_CLIENT_IP'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
$_getIp = Ip();
echo Ip();
$mydb = new mysqli('localhost', 'root', 'root', 'http');
$sql = "insert into htt9(httpsqli) values ('$_getIp')";
$mydb->query($sql);
?>
//Rerferer
<?php
$_Referer = $_SERVER['HTTP_REFERER'];
echo $_Referer;
$mydb = new mysqli('localhost', 'root', 'root', 'http');
$sql = "insert into htt9(httpsqli) values ('$_Referer')";
$mydb->query($sql);
?>
//Host
<?php
$_host = $_SERVER['HTTP_HOST'];
echo $_host;
$mydb = new mysqli('localhost', 'root', 'root', 'http');
$sql = "insert into htt9(httpsqli) values ('$_host')";
$mydb->query($sql);
?>

HTTP头注入检测

  HTTP头存在注入的话,可以使用burpsuite抓包工具,进行抓包注入.(PS:可能需要手工添加相关头参数).

通过图上,可明显看出是基于时间的sql盲注.(sqlmap 构造的payload).

在可能存在注入的http头部加上(*)星号可以理解为sqlmap跑注入时候的定位符(就是说明这个’可控参数可能存在sql注入’)[同 sqlmap -r url.txt -p “User-agent”]。

结果 (关于头注入,sqlmap可能不能直接检测出头部sql注入,可以尝试添加一些参数在进行测试)


火狐某插件(modify headers)

  插件可以用来进行源IP地址的伪造,也可以添加一些可能存在http头注入的参数进行抓包检测.

按照上图进行配置

开启modify headers插件,使用burpsuite进行抓包时,发现截获的数据包某些HTTP字段已经按照我们想要的格式添加上去了.(host这里是个变体,根据实际情况改)。

host 头注入结果