晚晚刷微博看到最新爆出的httpoxy远程代理感染漏洞的介绍
以前并没有关注Web容器的变量实现,正好借这个洞补了一下知识点:
1、所有HTTP_开头的环境变量在CGI下都是可以由客户端发起和创建的。攻击者可以通过这个漏洞伪造环境变量,监听篡改你的请求
我们用火狐Httprequeter插件构造一个请求,添加一个命字叫“twm”的头,值是“No.1”
在接收页面中放入以下代码:
如果我们添加的是命字叫“Proxy”的头,值“No.2”2
在接收页面中放入以下代码:
2、getenv()可以获取系统环境变量值,也就是$_SERVER变量中的值,不存在返回FALSE。
在IIS下以ISAPI运行PHP时,getenv()无法获取到相应的值,而只能使用$_SERVER。
getenv()的优点应该就是在获取时,如果值不存在会返回FALSE,而如果直接使用$_SERVER变量获取不存在的值时会报错
3、英语很重要。
今天中午看到鸟哥(风雪之隅)博客更新了:http://www.laruence.com/2016/07/19/3101.html
摘录重点:
以前并没有关注Web容器的变量实现,正好借这个洞补了一下知识点:
1、所有HTTP_开头的环境变量在CGI下都是可以由客户端发起和创建的。攻击者可以通过这个漏洞伪造环境变量,监听篡改你的请求
我们用火狐Httprequeter插件构造一个请求,添加一个命字叫“twm”的头,值是“No.1”
在接收页面中放入以下代码:
$tmp_server=$_SERVER["HTTP_TWM"];
$tmp_env=getenv("HTTP_TWM");
echo $tmp_server,"||",$tmp_env;
可以看到输出
No.1||No.1。
如果我们添加的是命字叫“Proxy”的头,值“No.2”2
在接收页面中放入以下代码:
$tmp_server=$_SERVER["HTTP_PROXY"];
$tmp_env=getenv("HTTP_PROXY");
echo $tmp_server,"||",$tmp_env;
可以看到输出
No.2||No.2
2、getenv()可以获取系统环境变量值,也就是$_SERVER变量中的值,不存在返回FALSE。
在IIS下以ISAPI运行PHP时,getenv()无法获取到相应的值,而只能使用$_SERVER。
getenv()的优点应该就是在获取时,如果值不存在会返回FALSE,而如果直接使用$_SERVER变量获取不存在的值时会报错
3、英语很重要。