其他分享
首页 > 其他分享> > [BJDCTF2020]EasySearch

[BJDCTF2020]EasySearch

作者:互联网

首先是题目只有一个登陆界面,

查看响应头也没有什么,尝试过sql,没有回显。

然后用扫描工具,扫出来一个index.php.swp。

打开发现是源码。

<?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 == substr(md5($_POST['password']),0,6)
也就是密码只要是前六位的哈希值为6d0bc1就会创建一个shtml。
shtml是一个动态回显的,类似于python的flask。
大麦那边是Hello,$_POST['username']
说明可以用<!--#exec cmd=""-->来进行命令执行。(这个是shtml的问题)
然后在登陆时候把用户名弄成<!--#exec cmd="ls"-->去找。
最终payload

 


 





标签:shtml,回显,EasySearch,text,echo,file,POST,BJDCTF2020
来源: https://www.cnblogs.com/FPointzero/p/16417579.html