对一次韩国站的上传点分析 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

   

    作者:conqu3

    Pax.Mac 核心成员

    群里某人求助上传,老是说突破突破,

对一次韩国站的上传点分析

。然后就发了个地址:http://xxx.xx/club/cafe_bbs.php?cafeid=zmaica&ptype=board&sptype=insert&mode=insert&code=bookmark_1

    过了几分钟,花开直接拿下webshell。

    当时有事,我没立即去拿,后来去瞅了下,发现这东西太容易绕过了。那孩子天天突破突破,关键在于突破的思路!

    比如,我们上传一个paxmac.php.r文件,出现的后缀是时间加上.p.r.再上传paxmac.aphp,则直接出现201211122.php文件。很容易就知道。此处的绕过方法。非常简单….不多说。

    下面我把源码分析下。

    上传第一步,检测文件的mime头,判断是否为图片文件!代码如下…. /admin/lib.php下

    function img_type($srcimg)

    {

    if(is_file($srcimg)){

    $image_info = getimagesize($srcimg);

    switch ($image_info['mime']) {

    case ’image/gif’: return true; break;

    case ’image/jpeg’: return true; break;

    case ’image/png’: return true; break;

    case ’image/bmp’: return true; break;

    default : return false; break;

    }

    }else{

    return false;

    }

    }

    此处很容易绕过,直接在图片文件里面加上GIE89a或者使用图片马。

    上传第二步,检测文件扩展名是否为php|htm|html文件 /admin/lib.php

    function file_check( $filename, $file_str = ”php|htm|html” ) {

    $file_arr = explode(“|”, $file_str);

    $name_arr = explode(“.”, $filename);

    $name_cnt = count($name_arr) - 1;

    for($ii = 0; $ii < count($file_arr); $ii++) {

    if(!strcmp(strtolower($name_arr[$name_cnt]), strtolower($file_arr[$ii]))) {

    error(“頃措嫻 韺岇澕鞚€ 鞐呺滊摐頃 靾?鞐嗠姅 順曥嫕鞛呺媹雼?”);

    }

    }

    }

此处就不说了!

    重点代码如下:

    在cafe_lib.php文件中,这样定义上传的:

    /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

    * file upload 頃靾 (鞛勳潣鞝滌瀾;;)

    * type=file 鞚?name 毵?鞛呺牓 $_FILES[氤€靾榏 搿?鞛呺牓

    * uploadFile(韺岇澕氤€靾橂獏,鞐呺滊摐瓴诫?鞐呺滊摐韺岇澕氇,鞐呺滊?臧€電ロ暅韺岇澕頇曥灔鞛?|搿滉惮攵?鞓? .jpg|.bmp|.gif)

    /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/

    function uploadFile($ufile,$updir,$upfile,$upexf=""){  //注意此处$upexf="" 如果按作者思想,本来应该设计一个全局变量值为“.jpg|.bmp|.gif”!经查,末设置全局变量,

电脑资料

对一次韩国站的上传点分析》(https://www.unjs.com)。也末传值进来!

    $base_dir = $updir;  //获取上传路径

    $kdir = str_replace($_SERVER[DOCUMENT_ROOT],”,$updir); //将路径去除根路径,作为相对路径。

    $kdir_ = explode(“/”,$kdir);  //分离

    $_rootdir = $_SERVER[DOCUMENT_ROOT];  //取绝对路径

    $_tmpdir = ”;

    //鞎堧岆摛鞏挫?韽措崝 靸濎劚頃橁赴

    foreach($kdir_ as $key => $value){   //此处为建立上传文件存放文件路径

    if(!empty($value)){

    $_tmpdir.=’/’.$value;

    if(!is_dir($_rootdir.$_tmpdir)){

    @mkdir($_rootdir.$_tmpdir, 0707);

    }else{

    @chmod($_rootdir.$_tmpdir,0707);

    }

    }}

$fls = $ufile;  //取上传文件信息

    $flsname = $upfile;

    //鞐呺滊?頇曥灔鞛?歆€鞝? if($upexf){ //此处判断扩展名时,传入已经被赋值为空,所以末起作用,不过可借鉴

    $exif_tmp = explode(‘|’,$upexf);  //本身是将.jpg|.bmp|.gif按|分隔开来。赋值给$exif_tmp变量

    $exif=”;

    foreach($exif_tmp as $key => $value){

    $exif.=”\\”.$exif_tmp[$key].”$|”;   //此处将护展名分离,并作为正则模型

    }

    $exif = substr($exif,0,-1);  //获取正则模型

    }

    if($fls){ //判断上传文件是否为空,此处上传就不为空

    if($upexf)  //因开头已赋值所以,我们的文件后缀可以是任意的

    {

    if(!eregi($exif,$fls[name])) //此处正则判断上传文件扩展名是否为白名单内的值,白名单模式{

    echo ’鞐呺滊?頃犾垬 鞐嗠姅 韺岇澕鞛呺媹雼?’;

    $fileupload=’0′;

    return;exit;

    }else{

    //鞐呺滊?臧€電? $fileupload=’1′;

    }

    }else{ //因为$upexf为空,所以$fileupload=1,导致任意文件上传。

    $fileupload=’1′;

    }

    //韺岇澕氇?毵岆摛旮?

    $fexi = substr($fls[name],-3); //上传后,截取后缀最后三位为文件格式,漏洞存在,利用只需要 paxmac.ephp即可

    $upfilename = $upfile.’.’.$fexi; //连接,上传

    @mkdir($updir,0777); //创建目录

    if(move_uploaded_file($fls[tmp_name],”$updir/$upfilename”)){ //上传文件

    return $upfilename;  //返回文件名

    }else{

    return false;

    }

    @unlink($fls[tmp_name]); //删除昨晚文件

    }else{

    echo ”鞐呺滊摐頃 韺岇澕鞚?鞐嗢姷雼堧嫟.”;

    }}

    以上码,我们可以清楚地看到,漏洞位置。

    利用方法很简单。直接上传mei.aphp就可以拿到webshell了,所谓的上传突破,方法不过就是那么几种,关键在于的是灵活运用,而不是单纯地去查别人怎么上传的。

    文中若有错误,还请指正,谢谢!

    ​

最新文章