半夜睡不着起来看看题 文件上传的Avatar Uploader 1以及CVE-2018-18086漏洞复现

半夜睡不着起来做做文件上传,在半夜还是收获了一些,首先看看buuctf的Avatar Uploader 1这个题,前面直接登录就行了。文件上传真的难上传!!!结果是代码审计!!!

进去过后就是正常的文件上传的操作,但是它也提示,只能上传png格式的图片。

然后抓包进行操作,进行各种各样的绕过,我以为它是检查了文件头我就把jpg改成png但是还是提示我上传png格式的图片 

我上传正常的png格式的图片还是对我说请上传png图片,我就有点疑惑了,正常的图片怎么也是这样,那它对哪进行了检查,我试了很多中方法,前面我一来我就用了那个数据流::$data这个来进行处理的操作,然后我重新看了一下靶机时间,发现还有其他的链接,一打开就是github的这个题的源码,原来是叫我进行代码审计的操作

下面看看代码

if (!file_exists($_FILES['file']['tmp_name']) || !is_uploaded_file($_FILES['file']['tmp_name'])) {
  error('No file was uploaded.');
}
echo $_FILES['file']['tmp_name'].'<br>';

// check file size
if ($_FILES['file']['size'] > 256000) {
  error('Uploaded file is too large.');
}

// check file type
$finfo = finfo_open(FILEINFO_MIME_TYPE);
echo $finfo.'<br>';
$type = finfo_file($finfo, $_FILES['file']['tmp_name']);
echo $type.'<br>';
finfo_close($finfo);
if (!in_array($type, ['image/png'])) {
  error('Uploaded file is not PNG format.');
}

// check file width/height
$size = getimagesize($_FILES['file']['tmp_name']);
echo var_dump($size).'<br>';
if ($size[0] > 256 || $size[1] > 256) {
  error('Uploaded image is too large.');
}
echo var_dump(IMAGETYPE_PNG);
if ($size[2] !== IMAGETYPE_PNG) {
  // I hope this never happens...
echo 'YES';
 error('What happened...? OK, the flag for part 1');
}

重点就看2个函数一个是finfo_file() 另外的一个是getimagesize()这2个函数

第一个函数简单点来说就是检查文件头的,第二个函数简单点来说就是通过文件的结构(宽,长等等)

来说起信息的。这2个函数结合起来我们要对它进行绕过,可以只保留文件头的内容,破坏其他的内容就可以,看的代码审计。

首先构造我们要的文件。

然后在进行上传就得到了想要的flag。

如果简单的只有第二个那个通过文件结构获取信息的函数,我们可以使用GIF89a来进行绕过

GIF89a这个参数也就是把我们的文件认为是一张图片,从而绕过单个的函数。第一个单独的话也就是更好绕过了,只要文件头的信息一样就行了。

下面我们在来看看那个CVE-2018-18086漏洞复现

先打开页面,发现是一个登录框,然后进行简单的密码登录,是admin/123456弱命令

进入到后台,然后要更改密码随便改一下就完事

然后在经过漏洞的描述,很快的就找到了,漏洞的所在,我们进行复现操作。

在系统管理的地方进行数据表的操作,这点进行我们的后门文件进行上传操作。

然后添加表的时候随便写一个表的名称也就是*php.mod这样的后缀名就行了。

然后现在的关键就是后面文件是怎么构造的:后面的代码是写到getshll.php这个文件中

下面的木马写的时候要/进行$转义,我问了一些师傅,师傅说这个是强制转义字符,转义字符是一种加密方法师傅说有时候要进行手动加密,上传,有时候中间有解密,还要多加密几次,也就是编码绕过。

file_put_contents

下面来访问看看这个文件怎么样 ,发现可以正常的访问,差不多成功了。        

这里进行访问我们的后门文件找到了,没有报错然后用蚁剑进行的连接操作

最后在tmp中找到了我们要的flag,我前面一直看那个flag表,一直点还以为连接给我断开了!!!找个答案都难找哟。睡觉!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值