• [BJDCTF2020]EasySearch Apache SSI漏洞


    这道题有点意思 是SSI 漏洞

    照样 我们先熟悉SSI漏洞是什么

    SSI

    服务端包含

    1. SSI 提供了对现有html增加动态的效果
    2. 是嵌入 html的指令 只有网页被调用了 才会执行
    3. 允许执行命令 所以会造成rce

    使用条件

    1. 当文件上传的时候 无法上传php
    2. 但是服务器开启了 SSI CGI支持
    3. 就可以通过 shtml文件上传
    4. Web 服务器已支持SSI(服务器端包含)
    5. Web 应用程序未对相关SSI关键字做过滤
    6. Web 应用程序在返回响应的HTML页面时,嵌入了用户输入

    格式

    了解完了漏洞原理 我们开始做题

    做题

    打开网站 登入界面 我们会想到 弱口令 无果 sql注入 不存在注入点 robots.txt 不存在

    于是我们看看是不是存在其他文件

    我们使用dirsearch扫 无果 奇了怪了 完全不行啊

    后面使用另一个工具才扫出来备份文件

    1. <?php
    2. ob_start();
    3. function get_hash(){
    4. $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()+-';
    5. $random = $chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)];//Random 5 times
    6. $content = uniqid().$random;
    7. return sha1($content);
    8. }
    9. header("Content-Type: text/html;charset=utf-8");
    10. ***
    11. if(isset($_POST['username']) and $_POST['username'] != '' )
    12. {
    13. $admin = '6d0bc1';
    14. if ( $admin == substr(md5($_POST['password']),0,6)) {
    15. echo "";
    16. $file_shtml = "public/".get_hash().".shtml";
    17. $shtml = fopen($file_shtml, "w") or die("Unable to open file!");
    18. $text = '
    19. ***
    20. ***
    21. Hello,'.$_POST['username'].'

    22. ***
    23. ***';
    24. fwrite($shtml,$text);
    25. fclose($shtml);
    26. ***
    27. echo "[!] Header error ...";
    28. } else {
    29. echo "";
    30. }else
    31. {
    32. ***
    33. }
    34. ***
    35. ?>

    直接代码审计 这里其实就两块

    第一部分

    1. $admin = '6d0bc1';
    2. if ( $admin == substr(md5($_POST['password']),0,6))

    通过MD5加密后的值需要前6位和admin变量中一样

    直接python代码

    1. import hashlib
    2. for i in range(100000000):
    3. hashe=hashlib.md5(str(i).encode('utf-8')).hexdigest()
    4. if hashe[0:6]=="6d0bc1":
    5. print(i,hashe)
    1. 2020666 6d0bc1153791aa2b4e18b4f344f26ab4
    2. 2305004 6d0bc1ec71a9b814677b85e3ac9c3d40

    随便选一个 作为密码登入即可

    第二部分

    1. $file_shtml = "public/".get_hash().".shtml";
    2. $shtml = fopen($file_shtml, "w") or die("Unable to open file!");
    3. $text = '
    4. ***
    5. ***
    6. Hello,'.$_POST['username'].'

    7. ***
    8. ***';
    9. fwrite($shtml,$text);
    10. fclose($shtml);
    11. ***
    12. echo "[!] Header error ...";
    13. }

    创建一个 shtml后缀 对内容进行写入 内容是 username的内容 写入完成输出 header error

    这里就是用上面的SSI 漏洞来做了

    返回username

    抓包 然后写入代码

    然后访问右边的路径

    实现了rce

    现在找flag就行了

    学到了学到了 SSI 漏洞

  • 相关阅读:
    OPenFast中AeroDyn,ElastoDyn,ElastoDyn_Tower,ServoDyn的作用!
    【算法】回溯法Backtracking
    聚星文社工具【聚星文社】Ai小说推文一键生成工具大更新:一键出图、一键改文、一键关键帧、MJ+SD推文神器
    线性表-单链表-C语言实现
    JavaWeb-MyBatis(下)
    webpack原理篇(五十八):实战开发一个简易的webpack
    ESP32 Micropython编程(Thonny)01----环境搭建&点灯
    【C++】STL — stack和queue的使用 + 适配器和仿函数的使用 + 优先级队列 priority_queue 的模拟实现
    无代码数据导出入门教程
    【我是产品经理_注册安全分析报告】
  • 原文地址:https://blog.csdn.net/m0_64180167/article/details/133075926