Phpwind 注入以及利用之二:文件上传拿shell -电脑资料

时间:2016-06-06 07:36:31
染雾
分享
WORD下载 PDF下载 投诉

上传漏洞现在很难会出现的,更别说强大的pw了,所以很多朋友是不是认为我这个标题唬人了?不过还确实是上传漏洞,不过呢,这个漏洞的利用需要两个条件,所以说其实很鸡肋,但之前还是蛮好用的,只要满足条件,屡试不爽的,

Phpwind 注入以及利用之二:文件上传拿shell

。好了,先说条件:

1.必须存在注入,可以注入出$db_siteid,因为前面那里发布的注入(以及其他某些地方的注入),可以轻松得到;

2.必须是IIS6,这个是致命的鸡肋点,漏洞利用的是IIS6的文件解析漏洞(其实不用想也知道,无论dz、pw或者其他cms不会有允许上传php之类后缀文件的)。

由于官方已经在我上报不久一起补丁了,所以我相信应该有人已经通过分析补丁知道漏洞在哪儿了,好了,先看代码(文件是job.php,也很可能在其他可上传的文件中):

...

} elseif ($action == 'uploadicon') {

if (empty($_GET['step'])) {

list($db_upload,$db_imglen,$db_imgwidth,$db_imgsize) = explode("\t",$db_upload);

InitGP(array('uid','verify'));//可以控制的两个参数

$swfhash = GetVerify($uid);

checkVerify('swfhash');//这里很有趣

require_once(R_P . 'lib/upload/faceupl

oad.class.php');

$face = new FaceUpload($uid);

PwUpload::upload($face);

$uploaddb = $face->getAttachs();

echo $db_bbsurl.'/'.$attachpath.'/'.$uploaddb['fileuploadurl'].'?'.$timestamp;exit;

} else {

...

先来看看代码中我标注的有趣的地方,看能否绕过checkVerify('swfhash')。找找checkVerify函数:

function checkVerify($hash = 'verifyhash') {

GetGP('verify') <> $GLOBALS[$hash] && Showmsg('illegal_request');//看参数是啥了

}

于是checkVerify('swfhash')其实就是检查$swfhash了,而$swfhash是通过GetVerify函数获得的,于是看看GetVerify函数:

function GetVerify($str,$app = null) {

empty($app) && $app = $GLOBALS['db_siteid'];//关键就是db_siteid了,而db_siteid可以通过注入获得

return substr(md5($str.$app.$GLOBALS['pwServer']['HTTP_USER_AGENT']),8,8);

}

于是好办了,先通过注入获得db_siteid,然后获取自己的'HTTP_USER_AGENT'(直接构造也行),可以轻松绕过前面的限制,接着就直接看上传类了,$uid可以控制就可以自定义上传文件名了:

<?php

!defined('P_W') && exit('Forbidden');

require_once(R_P . 'lib/upload.class.php');

class FaceUpload extends uploadBehavior. {

var $db;

var $uid;

var $attachs;

function FaceUpload($uid) {

global $db,$db_imgsize;

parent::uploadBehavior();

$this->uid = $uid;//这里没有int就悲剧了...

$this->db =& $db;

$this->ifftp = 0;

!$db_imgsize && $db_imgsize = 1000;

$this->ftype = array(

'gif'=> $db_imgsize,'jpg'=> $db_imgsize,

'jpeg' => $db_imgsize,'bmp'=> $db_imgsize,

'png'=> $db_imgsize

);

}

function allowType($key) {

return true;

}

function getFilePath($currUpload) {

$filename = $this->uid . '_tmp.' . $currUpload['ext'];

$savedir = 'upload/' . str_pad(substr($this->uid,-2),2,'0',STR_PAD_LEFT) . '/';

return array($filename, $savedir, '', '');

}

function update($uploaddb) {

$this->attachs = $uploaddb;

}

function getAttachs() {

return current($this->attachs);

[1][2][3]下一页

Phpwind 注入以及利用之二:文件上传拿shell -电脑资料

手机扫码分享

Top