• Upload-labs十六和十七关


    第十六关

    直接上传php文件判断限制方式:

    同第十五关白名单限制

    第十六关源码:
    在这里插入图片描述
    代码逻辑判断了后缀名、content-type,以及利用imagecreatefromgif判断是否为gif图片,最后再做了一次二次渲染

    第71行检测 f i l e e x t 和 fileext和 fileextfiletype是否为gif格式.

    然后73行使用move_uploaded_file函数来做判断条件,如果成功将文件移动到$target_path,就会进入二次渲染的代码,反之上传失败.

    在这里有一个问题,如果作者是想考察绕过二次渲染的话,在move_uploaded_file( t m p n a m e , tmpname, tmpname,target_path)返回true的时候,就已经成功将图片马上传到服务器了,所以下面的二次渲染并不会影响到图片马的上传.如果是想考察文件后缀和content-type的话,那么二次渲染的代码就很多余.(到底考点在哪里,只有作者清楚.哈哈)

    由于在二次渲染时重新生成了文件名,所以可以根据上传后的文件名,来判断上传的图片是二次渲染后生成的图片还是直接由move_uploaded_file函数移动的图片.

    我看过的writeup都是直接由move_uploaded_file函数上传的图片马.今天我们把move_uploaded_file这个判断条件去除,然后尝试上传图片马.

    上传gif
    添加到gif的尾部.
    在这里插入图片描述
    成功上传含有一句话的111.gif,但是这并没有成功.我们将上传的图片下载到本地.
    可以看到下载下来的文件名已经变化,所以这是经过二次渲染的图片.我们使用16进制编辑器将其打开
    在这里插入图片描述
    可以发现,我们在gif末端添加的php代码已经被去除.

    关于绕过gif的二次渲染,我们只需要找到渲染前后没有变化的位置,然后将php代码写进去,就可以成功上传带有php代码的图片了.

    经过对比,蓝色部分是没有发生变化的
    在这里插入图片描述
    我们将代码写到该位置.
    上传后在下载到本地使用16进制编辑器打开,可以看到php代码没有被去除.成功上传图片马

    绕过思路:

    1、把经过二次渲染的图片进行捆绑webshell图片马,文件上传时候 文件名为.gif后缀、文件类型content-type:image/gif、文件头GIF89a

    推荐使用gif格式,十六进制编辑图片文件找到二次渲染未修改的图片区域插入一句话木马

    第十七关

    第十七关源码:
    在这里插入图片描述
    代码逻辑:

    这里先将文件上传到服务器,然后通过rename修改名称,再通过unlink删除文件,因此可以通过条件竞争的方式在unlink之前,访问webshell

    绕过思路:

    1、条件竞争绕过上传webshell

    上传一个fputs写入shell文件功能的webshell,通过python或者burpsuite访问该文件

    f.php文件内容

    '); ?>

    burpsuite抓包:通过爆破形式不断的进行文件上传

    burpsuite抓包:通过爆破形式不断的访问该文件

  • 相关阅读:
    list类型常用命令及其底层数据结构
    SpringMVC源码分析(三)HandlerExceptionResolver启动和异常处理源码分析
    操作系统 面试题(二)
    DSA8300 泰克 Tektronix 数字采样示波器 简述
    【深度学习】(2) Transformer 网络解析,代码复现,附Pytorch完整代码
    物联网开发笔记(10)- 使用Wokwi仿真micropython on ESP32开发板实现音乐播放
    2022年0702 第八课 JAVA中的数据结构重中的集合
    【CUDA】算子编译错误ATen/ATen.h: No such file or directory
    springboot+vue运动场馆预约系统python+django体育馆预约系统
    【2023最新版】Python全栈知识点总结
  • 原文地址:https://blog.csdn.net/weixin_54986292/article/details/132799352