• [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 漏洞

  • 相关阅读:
    数据库系统的结构
    从数学到算法
    ANR及卡顿体验优化
    QT的TCP连接功能概述
    jsp家教信息发布网站系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
    InnoDB和MyISAM区别
    凉鞋的 Unity 笔记 108. 第二个通识:增删改查
    Java实现Csv文件导入导出
    Linux性能优化:性能优化工具
    git 项目带分支迁移到另一个 git 服务器
  • 原文地址:https://blog.csdn.net/m0_64180167/article/details/133075926