教学之友,学习之友。

站长教学网

当前位置: 站长教学网 > 网站编程 > PHP教程 >

PHP漏洞全面解析(八)-HTTP响应拆分(2)

时间:2012-04-16 21:41来源:DoDo's 作者:ken 点击:

HTTP响应拆分攻击

HTTP响应拆分是由于攻击者经过精心设计利用电子邮件或者链接,让目标用户利用一个请求产生两个响应,前一个响应是服务器的响应,而后一个则是攻击者设计的响应。此攻击之所以会发生,是因为WEB程序将使用者的数据置于HTTP响应表头中,这些使用者的数据是有攻击者精心设计的。

可能遭受HTTP请求响应拆分的函数包括以下几个:

header();        setcookie();        session_id();        setrawcookie();

HTTP响应拆分通常发生在:

Location表头:将使用者的数据写入重定向的URL地址内

Set-Cookie表头:将使用者的数据写入cookies内

实例:

<?php
    header("Location: " . $_GET['page']);
?>

请求

GET /location.php?page=http://www.00aq.com HTTP/1.1↙
Host: localhost↙

返回

HTTP/1.1 302 Found
Date: Wed, 13 Jan 2010 03:44:24 GMT
Server: Apache/2.2.8 (Win32) PHP/5.2.6
X-Powered-By: PHP/5.2.6
Location: http://www.00aq.com
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html

访问下面的链接,会直接出现一个登陆窗口

http://localhost/location.php?page=%0d%0aContent-Type:%20text/html%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%20158%0d%0a%0d%0a<html><body><form%20method=post%20name=form1>帐号%20<input%20type=text%20name=username%20/><br%20/>密码%20<input%20name=password%20type=password%20/><br%20/><input%20type=submit%20name=login%20value=登录%20/></form></body></html>

转换成可读字符串为:

Content-Type: text/html

HTTP/1.1 200 OK

Content-Type: text/html

Content-Length: 158

 

<html><body><form method=post name=form1>帐号 <input type=text name=username /><br />密码 <input name=password type=password /><br /><input type=submit name=login value=登录 /></form></body></html>

一个HTTP请求产生了两个响应

防范的方法:

1)替换CRLF换行字符

<?php
    header("Location: " . strtr($_GET['page'], array("\r"=>"", "\n"=>"")));
?>

2)使用最新版本的PHP

PHP最新版中,已经不允许在HTTP表头内出现换行字符

隐藏HTTP响应表头

apache中httpd.conf,选项ServerTokens = Prod, ServerSignature = Off

php中php.ini,选项expose_php = Off

(责任编辑:ken)
TAG标签: php http 漏洞 攻击 响应 请求
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
注册登录:不允许匿名留言,登录后留言无需输入验证码。
栏目列表
最新内容