频道栏目
首页 > 资讯 > HTTP响应拆分 > 正文

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

16-01-07        来源:[db:作者]  
收藏   我要投稿
HTTP请求的格式
1)请求信息:例如“Get/index.phpHTTP/1.1”,请求index.php文件
2)表头:例如“Host:localhost”,表示服务器地址
3)空白行
4)信息正文
“请求信息”和“表头”都必须使用换行字符(CRLF)来结尾,空白行只能包含换行符,不可以有其他空格符。
下面例子发送HTTP请求给服务器www.yhsafe.com
GET/index.phpHTTP/1.1↙//请求信息
Host:www.yhsafe.com↙//表头
↙//空格行
↙符号表示回车键,在空白行之后还要在按一个空格才会发送HTTP请求,HTTP请求的表头中只有Host表头是必要的饿,其余的HTTP表头则是根据HTTP请求的内容而定。
HTTP请求的方法
1)GET:请求响应
2)HEAD:与GET相同的响应,只要求响应表头
3)POST:发送数据给服务器处理,数据包含在HTTP信息正文中
4)PUT:上传文件
5)DELETE:删除文件
6)TRACE:追踪收到的请求
7)OPTIONS:返回服务器所支持的HTTP请求的方法
8)CONNECT:将HTTP请求的连接转换成透明的TCP/IP通道
HTTP响应的格式
服务器在处理完客户端所提出的HTTP请求后,会发送下列响应。
1)第一行是状态码
2)第二行开始是其他信息
状态码包含一个标识状态的数字和一个描述状态的单词。例如:
HTTP/1.1200OK
200是标识状态的是数字,OK则是描述状态的单词,这个状态码标识请求成功。
HTTP请求和响应的例子
打开cmd输入telnet,输入openwww.00aq.com80
打开连接后输入
GET/index.phpHTTP/1.1↙
Host:www.00aq.com↙
返回HTTP响应的表头
返回的首页内容
使用PHP来发送HTTP请求
header函数可以用来发送HTTP请求和响应的表头
函数原型
voidheader(stringstring[,boolreplace[,inthttp_response_code]])
string是HTTP表头的字符串
如果replace为TRUE,表示要用目前的表头替换之前相似的表头;如果replace为FALSE,表示要使用多个相似的表头,默认值为TRUE
http_response_code用来强制HTTP响应码使用http_response_code的值
实例:
HTTP响应拆分攻击
HTTP响应拆分是由于攻击者经过精心设计利用电子邮件或者链接,让目标用户利用一个请求产生两个响应,前一个响应是服务器的响应,而后一个则是攻击者设计的响应。此攻击之所以会发生,是因为WEB程序将使用者的数据置于HTTP响应表头中,这些使用者的数据是有攻击者精心设计的。
可能遭受HTTP请求响应拆分的函数包括以下几个:
header();setcookie();session_id();setrawcookie();
HTTP响应拆分通常发生在:
Location表头:将使用者的数据写入重定向的URL地址内
Set-Cookie表头:将使用者的数据写入cookies内
实例:
请求
GET/location.php?page=http://www.00aq.comHTTP/1.1↙
Host:localhost↙
返回
HTTP/1.1302Found
Date:Wed,13Jan201003:44:24GMT
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帐号%20密码%20
转换成可读字符串为:
Content-Type:text/html
HTTP/1.1200OK
Content-Type:text/html
Content-Length:158
帐号
密码
一个HTTP请求产生了两个响应
防范的方法:
1)替换CRLF换行字符
"","\n"=>"")));
?>
2)使用最新版本的PHP
PHP最新版中,已经不允许在HTTP表头内出现换行字符
隐藏HTTP响应表头
apache中httpd.conf,选项ServerTokens=Prod,ServerSignature=Off
php中php.ini,选项expose_php=Off
相关TAG标签
上一篇:php简单的自定义模板类
下一篇:PHP根据时间戳返回星期几
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站