• BUUCTF做题Upload-Labs记录pass-11~pass-20


    BUUCTF做题Upload-Labs记录pass-11~pass-20

    ——
    上一篇:BUUCTF做题Upload-Labs记录pass-01~pass-10
    ——

    pass-11

    白名单上传:'jpg','png','gif'
    上传抓包可以看到url中的结构。
    请添加图片描述

    应该是用get 型 %00 截断
    但是要求需要php的版本号低于5.3.29, 且magic_quotes_gpc为关闭状态。
    这里不满足条件,所以用不了。

    如果满足条件,可以这样构造:
    请添加图片描述

    ——

    pass-12

    post 型 %00 截断

    通过get方式是在url的参数中添加%00。这是因为%00通过get方式传递到服务器会被自动解码,所以就变成了ascii码中数值0对应的那个字符(null),这才能达到截断的目的。

    但是如果是通过post的话,加入%00不会别服务器解码,只会原样被参数变量接收。所以这里要通过修改post数据的十六进制来达到截断的目的。

    所以抓包之后要转换成hex格式查看

    先填好post 的路径,php后面加上a为了等下十六进制格式方便找到这个位置
    请添加图片描述

    然后查看hex格式,
    请添加图片描述

    把上面61的位置改成 00 后,可以看到原来数据包中 php后面变成了一个框框。
    请添加图片描述

    ——

    pass-13

    有个页面/include.php
    请添加图片描述

    上传jpg一句话,加上 GIF89a
    请添加图片描述

    利用:
    配合包含页面

    /include.php?file=upload/3420220725120812.gif

    请添加图片描述

    -——

    pass-14

    getimagesize()函数, 对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求
    和前一题一样做法

    /include.php?file=upload/7220220417095836.gif

    ——

    pass-15

    exif_imagetype() 函数读取一个图像的第一个字节并检查其签名。
    条件:需要打开配置文件中的 php_exif

    做法和前面一样:

    /include.php?file=upload/7920220417134706.gif

    ——

    pass-16

    白名单:.jpg|.png|.gif

    源码中有imagecreatefromjpeg()函数:成功则返回一图像标识符/图像资源,失败则返回false,导致图片马的数据丢失。

    做法:图片的二次渲染

    1、先把图片马进行上传,然后再把上传的图片马下载下来。
    2、下载下来的图片可以通过010eidtor 和原来的图片马进行数据的对比,看哪个部分没有被修改。
    3、对原来的图片马进行修改,把php代码写到数据中没有被修改的地方。
    4、修改后的图片马上传,其数据中的webshell数据未被修改,再配合前面提到的包含漏洞,得以执行图片马中的php代码。

    ——

    pass-17

    源码检验:先将文件上传到服务器,然后判断文件后缀是否在白名单里,如果在则重命名,否则删除。

    这样就存在一个安全问题,那就是我同时上传多个相同文件,在它删除之前访问就可以了。
    也就是条件竞争问题。

    上传 .php 一句话木马
    发到 intruder 模块,clear 清除,原包爆破
    请添加图片描述

    ——

    pass-18

    后端检验过程为:检查后缀名是否在白名单中;检查文件大小以及文件是否已经存在,然后上传,然后在进行二次渲染,重命名。

    和前面一题比也是条件竞争,但是是结合了上传图片马的条件竞争,再结合文件包含进行利用。

    ——

    pass-19

    与前面题目相比,这里可以控制上传并保存下来的文件名,即参数save_namemove_uploaded_file()函数中的img_path是由post参数save_name控制的。
    请添加图片描述
    ——

    方法一:

    配合文件包含,上传一个图片马。利用:/include.php?file=upload/upload-19.jpg
    请添加图片描述

    ——

    方法二:

    **move_uploaded_file()**有这么一个特性,会忽略掉文件末尾的 /.
    名字改成 php.
    利用:/upload/upload-19.php.
    请添加图片描述

    或:.php/.
    请添加图片描述

    利用:/upload/19.php/
    请添加图片描述


    %00截断 ,但是要php版本小于5.

    ——

    pass-20

    代码中

    $file = explode('.', strtolower($file));
    
    • 1

    explode() 函数把字符串分割为数组。本函数返回由字符串组成的数组,其中的每个元素都是由 separator 作为边界点分割出来的子字符串。
    比如xx.php以点为分隔符数组就是{xx,php}

    $ext = end($file);
    
    • 1

    后缀取数组的最后一个,然后判断白名单

    $file_name = reset($file) . '.' . $file[count($file) - 1];
    
    • 1

    reset()函数将内部指针重置为指向数组的第一个元素。就是取出第一个元素的值。然后再和数组的最后一个元素合起来组成文件名。

    我们传参数的时候就
    save_name[0]=xx.php save_name[2]=png
    然后他就是数组类型了。就不会执行

    数组绕过构造:
    请添加图片描述

    利用:/upload/20.php.
    请添加图片描述

    ——

    到这,upload-labs测试就结束了,主要还是学习了文件上传各种代码的检验方式以及各种绕过方法。
    其中有几题也是没有测试成功,主要体现在16-18这三题的图片二次渲染以及条件竞争,测试过程有一定难度,目前还是在于概念的理解。

  • 相关阅读:
    【C++干货铺】初识模板
    Python3出现的Error总结
    美国生活经济学 -- 读书笔记
    利用 SonarScanner 静态扫描 Rainbond 上的 Maven 项目
    ECO模式真的是省油模式吗?为什么很多司机都不开?
    Flink1.15源码解析--安全模块及安全上下文
    Win10打开软件提示comdlg32.ocx文件丢失?
    八、线程池
    Java 数据结构与算法 插入类排序:直接插入排序、希尔排序
    Java的虚拟线程和结构化并发,含完整示例代码
  • 原文地址:https://blog.csdn.net/Goodric/article/details/125995753