说实话,通过代理访问之类的以前都曾关注过,但伪造来源IP还真没注意过。以下的文章内容我没有测试过,仅仅了解一个想法,或许真可以,或许早就不行。但既然有第一次以后就会有第二次。了解入侵途径、方法,在遇到问题的时候岂不更好、更容易多一个技能来解决它?
原文来自:简单伪造X-Forwarded-For
关于伪造X-Forwarded-For的目的我就不多说了。在入侵一个PHP站,GPC为ON的时候,
字符型注入全部歇菜,而在PHP5中,GPC默认是打开的。但是GPC对$_SERVER无任何影响,
因此可以通过伪造$_SERVER来达到注入的目的。
IP.php中有如下代码,主要是获取客户端IP:
- <?
- function GetIP() {
- if (getenv("HTTP_CLIENT_IP")){
- echo "getenvHTTP_CLIENT_IP";
- $ip = getenv("HTTP_CLIENT_IP");
- }else if (getenv("HTTP_X_FORWARDED_FOR"))
- {
- $ip = getenv("HTTP_X_FORWARDED_FOR");
- echo "getenvHTTP_X_FORWARDED_FOR";
- echo "<br>you are right";
- }else if (getenv("REMOTE_ADDR")){
- echo "getenvREMOTE_ADDR";
- $ip = getenv("REMOTE_ADDR");
- }else{
- echo "unknow";
- $ip = "Unknown";
- }
- return $ip;
- }
- echo GetIp();
- ?>
2.用NC提交:
GET /1.php HTTP/1.1
Accept: */*
Referer: http://localhost/
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; MAXTHON 2.0)
Host: localhost
Connection: Keep-Alive
Cache-Control: no-cache
X-Forwarded-For: 127.0.0.2
Cookie: rtime=0; ltime=1269249140109; cnzz_eid=64110124-1269242429-; language=zh-cn; PHPSESSID=ae9b14609808b4ff4c5811ad1943c529
返回getenvHTTP_X_FORWARDED_FOR127.0.0.2。
伪造X-Forwarded-For成功。
要想提高程序的安全性,不是一个GPC可以解决的,必须提高程序的过滤机制,因为任何的参数提交都是
有害的!
--EOF--
如果上述属实,那就太痛苦了,啥也不能信了。这年头,连X萝卜也靠不住了。