PHP漏洞全解(八)-HTTP响应拆分
本文主要介绍针对PHP网站HTTP响应拆分,站在攻击者的角度,为你演示HTTP响应拆分。
HTTP请求的格式
1)请求信息:例如“Get /index.php HTTP/1.1”,请求index.php文件
2)表头:例如“Host: localhost”,表示服务器地址
3)空白行
4)信息正文
“请求信息”和“表头”都必须使用换行字符(CRLF)来结尾,空白行只能包含换行符,不可以有其他空格符。
下面例子发送HTTP请求给服务器www.yhsafe.com
GET /index.php HTTP/1.1↙ //请求信息
Host:www.yhsafe.com↙ //表头
HTTP请求和响应的例子
打开cmd输入telnet,输入open www.00aq.com 80
打开连接后输入
GET /index.php HTTP/1.1↙
Host:www.00aq.com↙

返回的首页内容
使用PHP来发送HTTP请求
header函数可以用来发送HTTP请求和响应的表头
函数原型
void header(string string [, bool replace [, int http_response_code]])
string是HTTP表头的字符串
如果replace为TRUE,表示要用目前的表头替换之前相似的表头;如果replace为FALSE,表示要使用多个相似的表头,默认值为TRUE
http_response_code用来强制HTTP响应码使用http_response_code的值
实例:
- // 打开Internet socket连接
- $fp = fsockopen(www.00aq.com, 80);
- // 写入HTTP请求表头
- fputs($fp, "GET / HTTP/1.1\r\n");
- fputs($fp, "Host: www.00aq.com\r\n\r\n");
- // HTTP响应的字符串
- $http_response = "";
- while (!feof($fp))
- {
- // 读取256位的HTTP响应字符串
- $http_response .= fgets($fp, );
- }
- // 关闭Internet socket连接
- fclose($fp);
- // 显示HTTP响应信息
- echo nl2br(htmlentities($http_response));
- ?>
HTTP响应拆分攻击
HTTP响应拆分是由于攻击者经过精心设计利用电子邮件或者链接,让目标用户利用一个请求产生两个响应,前一个响应是服务器的响应,而后一个则是攻击者设计的响应。此攻击之所以会发生,是因为WEB程序将使用者的数据置于HTTP响应表头中,这些使用者的数据是有攻击者精心设计的。
可能遭受HTTP请求响应拆分的函数包括以下几个:
header(); setcookie(); session_id(); setrawcookie();
HTTP响应拆分通常发生在:
Location表头:将使用者的数据写入重定向的URL地址内
Set-Cookie表头:将使用者的数据写入cookies内
实例:
- 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帐号%20密码%20
转换成可读字符串为:
Content-Type: text/html
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 158
帐号
密码
一个HTTP请求产生了两个响应
防范的方法:
1)替换CRLF换行字符
- 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
PHP漏洞全解(八)-HTTP响应拆分的更多相关文章
- PHP漏洞全解
针对PHP的网站主要存在下面几种攻击方式: 1.命令注入(Command Injection) 2.eval注入(Eval Injection) 3.客户端脚本攻击(Script Insertion) ...
- PHP漏洞全解(详细介绍)
转载 http://www.jb51.net/article/31898.htm 针对PHP的网站主要存在下面几种攻击方式: 1.命令注入(Command Injection) 2.eval注入(E ...
- PHP漏洞全解(一)-PHP网站的安全性问题
本文主要介绍针对PHP网站常见的攻击方式,包括常见的sql注入,跨站等攻击类型.同时介绍了PHP的几个重要参数设置.后面的系列文章将站在攻击者的角度,为你揭开PHP安全问题,同时提供相应应对方案. 针 ...
- PHP漏洞全解(九)-文件上传漏洞
本文主要介绍针对PHP网站文件上传漏洞.由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过 Web 访问的目录上传任意PHP文件,并能够将这些文件传递给 P ...
- PHP漏洞全解(六)-跨网站请求伪造
本文主要介绍针对PHP网站的跨网站请求伪造.在CSRF所有攻击方式中包含攻击者伪造一个看起来是其他用户发起的HTTP 请求,事实上,跟踪一个用户发送的HTTP请求才是攻击者的目的. CSRF(Cros ...
- PHP漏洞全解(五)-SQL注入攻击
本文主要介绍针对PHP网站的SQL注入攻击.所谓的SQL注入攻击,即一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根据程序返 ...
- PHP漏洞全解(四)-xss跨站脚本攻击
本文主要介绍针对PHP网站的xss跨站脚本攻击.跨站脚本攻击是通过在网页中加入恶意代码,当访问者浏览网页时恶意代码会被执行或者通过给管理员发信息 的方式诱使管理员浏览,从而获得管理员权限,控制整个网站 ...
- PHP漏洞全解(三)-客户端脚本植入
本文主要介绍针对PHP网站的客户端脚本植入攻击方式.所谓客户端脚本植入攻击,是指将可以执行的脚本插入到表单.图片.动画或超链接文字等对象内.当用户打开这些对象后,黑客所植入的脚本就会被执行,进而开始攻 ...
- PHP漏洞全解(二)-命令注入攻击
本文主要介绍针对PHP网站常见的攻击方式中的命令攻击.Command Injection,即命令注入攻击,是指这样一种攻击手段,黑客通过把HTML代码输入一个输入机制(例如缺乏有效验证限制的表格域)来 ...
随机推荐
- [转载][记录]shell 批量修改文件名
参考了:[新手入门] shell脚本批量修改文件名 4楼回复 我刚好是在vagrant+ubuntu中进行开发,windows手动修改太麻烦. #!/bin/ksh ls *.htm | while ...
- fiddlercore 抓包获取cookie的方法
public partial class form1 : Form { public form1() { string cookies = ""; InitializeCompon ...
- 【Slickflow学习】.NET开源工作流环境搭建(三)
第一次自己写博客文章,大家多多指教.写博客主要记录一下学习的过程,给初学者提供下参考,也留给自己做备忘. Slickflow .NET开源工作流-环境搭建 在VS2010中使用附加进程的方式调试IIS ...
- php pdo oracle中文乱码
在/etc/profile.d/简历oracle.sh 内容如下在NLS_LANG设置编码 ORACLE_HOME=/usr/lib/oracle/12.1/client64 C_INCLUDE_PA ...
- 《JAVA核心技术卷 卷1 基础知识》
第一卷 关键字:体系结构中立,可移植性,高性能,多线程 体系机构中立:通过解释字节码实现,优点是,让JAVA能在很多机器上运行.缺点是运行速度很慢. 可移植性:因为JAVA的基本数据类型有固定的大小. ...
- 用curl做异步操作
class CurlPost { /** * @desc curl 请求提交数组 * */ public function execute($method, $url, $fields = '', $ ...
- leetcode之Rectangle Area
Find the total area covered by two rectilinear rectangles in a 2D plane. Each rectangle is defined b ...
- (转)boost::bind介绍
转自:http://www.cnblogs.com/sld666666/archive/2010/12/14/1905980.html 这篇文章介绍boost::bind()的用法, 文章的主要内容是 ...
- python 自动化之路 day 09 进程、线程、协程篇
本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者 ...
- TweenMax动画库学习(三)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) ...