[BJDCTF2020]EasySearch Apache SSI漏洞

这道题有点意思 是SSI 漏洞

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

SSI

服务端包含

SSI 提供了对现有html增加动态的效果

是嵌入 html的指令 只有网页被调用了 才会执行

允许执行命令 所以会造成rce

使用条件

当文件上传的时候 无法上传php

但是服务器开启了 SSI CGI支持

就可以通过 shtml文件上传


 Web 服务器已支持SSI(服务器端包含)
   

 Web 应用程序未对相关SSI关键字做过滤
    

 Web 应用程序在返回响应的HTML页面时,嵌入了用户输入

格式

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

做题

[BJDCTF2020]EasySearch Apache SSI漏洞_第1张图片

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

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

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

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

alert('[+] Welcome to manage system')";
            $file_shtml = "public/".get_hash().".shtml";
            $shtml = fopen($file_shtml, "w") or die("Unable to open file!");
            $text = '
            ***
            ***
            

Hello,'.$_POST['username'].'

*** ***'; fwrite($shtml,$text); fclose($shtml); *** echo "[!] Header error ..."; } else { echo ""; }else { *** } *** ?>

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

第一部分

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

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

直接python代码

import hashlib

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

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

第二部分

 $file_shtml = "public/".get_hash().".shtml";
            $shtml = fopen($file_shtml, "w") or die("Unable to open file!");
            $text = '
            ***
            ***
            

Hello,'.$_POST['username'].'

*** ***'; fwrite($shtml,$text); fclose($shtml); *** echo "[!] Header error ..."; }

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

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

返回username

抓包 然后写入代码

[BJDCTF2020]EasySearch Apache SSI漏洞_第2张图片

然后访问右边的路径

[BJDCTF2020]EasySearch Apache SSI漏洞_第3张图片

实现了rce

现在找flag就行了

[BJDCTF2020]EasySearch Apache SSI漏洞_第4张图片

[BJDCTF2020]EasySearch Apache SSI漏洞_第5张图片

学到了学到了 SSI 漏洞

你可能感兴趣的:(BUUctf,apache,安全,web安全)