讓我們看一段 ASP 代碼先:
Function getIP()
Dim strIPAddr as
string
If
Request.ServerVariables("HTTP_X_FORWARDED_FOR") = "" OR
InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), "unknown") > 0
Then
strIPAddr = Request.ServerVariables("REMOTE_ADDR")
ElseIf
InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",") > 0
Then
strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1,
InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",")-1)
ElseIf
InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";") > 0
Then
strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1,
InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";")-1)
Else
strIPAddr = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
End If
getIP =
Trim(Mid(strIPAddr, 1, 30))
End Function |
這段代碼的功能是得到客戶端真實IP,也就是當客戶端使用了透明HTTP代理的時候取得真正的客戶端IP;匿名代理返回代理IP;無代理返回客戶端IP。
想一下,為什么該代碼能夠從透明代理那里得到真實的IP呢?莫非透明代理服務器會發送我們的真IP?本地搭建一個透明代理,抓包分析之:
GET /test/ipSpoof/test.asp HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;
TencentTraveler ; .NET CLR 1.1.4322)
Host: localhost
Connection: Keep-Alive
Cookie: tc_total_cookie_datetime_14734=2006-5-29%2010%3A45%3A26;
PJBlog25Setting=ViewType=list;
ASPSESSIONIDQQQGQMDQ=HLGHFEADMMDPHAFJDHBLBOPD
X-Forwarded-For: 10.0.0.54 |
哈哈,原來我們的真正IP被服務器發送出去了。那么,如果我們修改X-Forwarded-For的值再提交的話……嘿嘿,這樣就可以偽造任意的“真實”IP啦。
偽造了“真實”IP,可以做很多事情,最簡單就是以任意IP發表評論,要是管理員看到一個123.456.789.000的IP一定會被你郁悶到的。
更高級點,應該可以實現突破IP限制、跨站和SQL注射,當然需要結合具體的程序代碼來看了。