深信服劫持HTTP防跳转

0x00 前言

学校开始深信服设备进行HTTP劫持,每过一段时间,就劫持你HTTP跳转到1.1.1.3公告页面,公告一些学校的网络情况。可是这个真的令人崩溃,尤其在搜索资料的时候,总是把你要打开的网页跳转到1.1.1.3公告页面,烦得跳脚。

0x01 劫持原理

我开发防跳转1.1.1.3插件的时候,一直以为只有一种方式劫持跳转,然后开发出来后,还有一定几率跳转到1.1.1.3公告页面,一开始以为插件没写好,纠结了一天,才了解到有下面两种方式进行劫持。
通过修改HTTP数据包的内容进行劫持,有两种方式进行劫持。一个是修改HTTP头,还有一个通过修改web页面,植入js脚本然后这个js再执行跳转。
(还发现不对https进行劫持)

0x02 跳转方式一

通过burp intruder,抓取到异常包。发现通过修改HTTP头,跳转到1.1.1.3这个页面上来。

1
2
3
4
5
HTTP/1.0 302 Moved Temporarily
Location: http://1.1.1.3:80/bulletin/0/index.htm
Content-Type: text/html;
Content-Length: 14
<h2>Moved</h2>

0x03 跳转方式二

通过修改web页面内容,植入js,然后跳转到1.1.1.3页面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
HTTP/1.1 200 OK
Connection:close
Content-Type:text/html
Content-Length:1006
Cache-Control:no-store
<html>
<head>
<script language="javascript">setTimeout("location.replace(location.href.split(\"#\")[0])",2000);</script>
<script type="text/javascript" src="http://1.1.1.3:89/cookie/flash.js"></script>
<script language="javascript">setURL("1.1.1.3");supFlash("18446744069770200295");</script>
</head>
<body>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="0" height="0" id="m" align="center"><param name="allowScriptAccess" value="always" />
<param name="movie" value="http://1.1.1.3:89/cookie/flashcookie.swf" />
<param name="quality" value="high" />
<param name="FlashVars" value="srv=1.1.1.3" />
<embed src="http://1.1.1.3:89/cookie/flashcookie.swf"FlashVars="srv=1.1.1.3" quality="high" width="0" height="0"  name="m" align="center" allowScriptAccess="always" type="application/x-shockwave-flash"pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
</body></html>

0x04 解决方案

通过下面两种办法是否被劫持了。
1.当既有Content-Length:1006,又有Cache-Control:no-store,就判断200劫持。
2.当Location的值是1.1.1.3的时候,则判定是302劫持。

通过编写一个chrome插件,检测服务器返回的数据包,看是否符合上面数据包的特征,如果如何,则跳回url地址。

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
var flag = 0;
headers = details.responseHeaders;
for (var i = 0; i < headers.length; ++i) {
var header = headers[i];
//判断是否有Content-Length:1006
if((header.name.indexOf("Content-Length") >= 0))
{
if(header.value == 1006)
{
flag = flag + 1;
}
}
//判断是否有Cache-Control:no-store
if((header.name.indexOf("Cache-Control") >= 0))
{
if(header.value.indexOf("no-store") >= 0)
{
flag = flag + 1;
}
}
//当既有Content-Length:1006,又有Cache-Control:no-store,就判断劫持
if(flag == 2)
{
console.log("200劫持");
console.log(details.url);
console.log(headers);
//设置拦截数量
chrome.browserAction.setBadgeText({text: (++num).toString()});
//跳转到回原地址
return { redirectUrl: details.url };
}
if(header.name.indexOf("Location") >= 0)
{
if(header.value.indexOf("1.1.1") >=0 )
{
console.log("302劫持");
console.log(details.url);
console.log(headers);
//设置拦截数量
chrome.browserAction.setBadgeText({text: (++num).toString()});
//修改302跳转的地址,跳回原地址
header.value = details.url;
return {responseHeaders: details.responseHeaders};
}
}
}

插件已经在360扩展中心发布

https://ext.chrome.360.cn/webstore/detail/infjddkamahojffifdpmphjfigjoobbc