繁体中文  设为首页  加入收藏 
当前位置:学院首页 >> 研究 >> 嗅探监听 >> 利用Php来嗅探劫持服务器数据


利用Php来嗅探劫持服务器数据

2008-07-03 16:30:11  www.hackbase.com  来源:安全中国
前几天刺在我们的maillist发了一个老外写的文章,大意是可以用php来实现数据的劫持和转发。我瞄了一下,确实可行,于是今天抽出了以前用来扯淡的时间,写了段代码验证了一下想法。老外的原文是一个PDF,有兴趣看 ...

前几天刺在我们的maillist发了一个老外写的文章,大意是可以用php来实现数据的劫持和转发。我瞄了一下,确实可行,于是今天抽出了以前用来扯淡的时间,写了段代码验证了一下想法。老外的原文是一个PDF,有兴趣看的可以看看。地址是在:http://www.secforce.co.uk/media/presentations/OWASP_Abusing_PHP_sockets.pdf。其实关于这个的原理,我记得很早很早之前flashsky就在xfocus上面贴过通过SO_REUSEADDR实现端口重复绑定的,mix还写过一个 guest权限嗅探密码的。我这里比较不同的是用php实现的,可以在webshell里面用,当然我没有测试过,我没shell。

需要注意的是,这个东西和以前的《PHP下实现端口复用/劫持》是完全不一样的,那个文章可以在这里找到:http://www.west999.com/info/html/wangluobiancheng/Phpbiancheng/20080224/22439.html。至于为什么不一样,我就不说了。

代码我注释得很详细,个人觉得写得还不错,不细说。这里大概说一下技术上的难点。首先是在web里面,没有多线程也没有多进程,但是每一个新连接进来就要去处理,应该怎么做?显然不能顺序执行,因为光accept那里就会被阻塞住的,而且后面每一个session也需要分别处理的。还好查手册发现经典的socket_select函数可用,有这个就好说了,专业实现多路复用的。

PHP代码如下,有详细注释。blog贴的,所以代码可能会掉些东西,其他的支持我就不提供了,看代码:
 
<?php
class select
{
 var $sockets;

 // 构造函数
 function select($sockets)
 {
 $this->sockets = array();

 foreach($sockets as $socket)
 {
 $this->add($socket);
 }
 }

 function add($add_socket)
 {
 //array_push($this->sockets, $add_socket);
 $this->sockets[] = $add_socket;
 }

 // 利用临时数组来删除数组中的元素
 function remove($remove_socket)
 {
 $tmp_sockets = array();

 foreach($this->sockets as $socket)
 {
 if($remove_socket != $socket)
 {
 $tmp_sockets[] = $socket;
 }
 }

 $this->sockets = $tmp_sockets;
 }

 // 检查socket数组是否可读,传入超时时间,返回socket数组
 function can_read($timeout)
 {
 $read = $this->sockets;
 socket_select( $read, $write = NULL, $except = NULL, $timeout );
 return $read;
 }

 // 检查socket数组是否可写,传入超时时间,返回socket数组
 function can_write($timeout)
 {
 $write = $this->sockets;
 socket_select( $read = NULL, $write, $except = NULL, $timeout );
 return $write;
 }
}

// 网页不超时
set_time_limit(0);

// 即时输出数据,不缓冲
ob_end_clean();
ob_implicit_flush(true);

if( !isset( 

关键字:PHP 嗅探

责任编辑:黑客基地        



本文引用网址: 

利用Php来嗅探劫持服务器数据的相关文章
发表评论