• [BJDCTF2020]EasySearch


    一个登录框

    可能是sql注入,先万能密码测一下,发现不行

    扫一下目录,发现:/index.php.swp

    1. ob_start();
    2. function get_hash(){
    3. $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()+-';
    4. $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
    5. $content = uniqid().$random;
    6. return sha1($content);
    7. }
    8. header("Content-Type: text/html;charset=utf-8");
    9. ***
    10. if(isset($_POST['username']) and $_POST['username'] != '' )
    11. {
    12. $admin = '6d0bc1';
    13. if ( $admin == substr(md5($_POST['password']),0,6)) {
    14. echo "";
    15. $file_shtml = "public/".get_hash().".shtml";
    16. $shtml = fopen($file_shtml, "w") or die("Unable to open file!");
    17. $text = '
    18. ***
    19. ***
    20. Hello,'.$_POST['username'].'

    21. ***
    22. ***';
    23. fwrite($shtml,$text);
    24. fclose($shtml);
    25. ***
    26. echo "[!] Header error ...";
    27. } else {
    28. echo "";
    29. }else
    30. {
    31. ***
    32. }
    33. ***
    34. ?>

    重点看

    if(isset($_POST['username']) and $_POST['username'] != '' )
        {
            $admin = '6d0bc1';
            if ( $admin == substr(md5($_POST['password']),0,6)) {
                echo "";

    POST传入的password的前6位进行md5加密后等于6d0bc1

    脚本:

    1. import hashlib
    2. for i in range(1000000000):
    3. a = hashlib.md5(str(i).encode('utf-8')).hexdigest()
    4. if a[0:6]=='6d0bc1':
    5. print(i)
    6. break

    运行结果:

    2020666

    传参抓包

    访问public/c563b2bc56e767ad0c7bd8e9353ddbb9aa662002.shtml

    回显了前面输入的username,可能是我们的利用点

    这题思路是利用“Apache SSI远程命令执行漏洞”

    SSI是嵌入HTML页面中的指令,在页面被提供时由服务器进行运算,以对现有HTML页面增加动态生成的内容,而无须通过CGI程序提供其整个页面,或者使用其他动态技术。

    从技术角度上来说,SSI就是在HTML文件中,可以通过注释行调用的命令或指针,即允许通过在HTML页面注入脚本或远程执行任意代码。

    当目标服务器开启了SSI与CGI支持,我们就可以上传shtml,利用语法执行命令。

    题目中username被写入了shtml文件,就可以将username改为

    不在当前目录,查看上一目录

     

    访问flag_990c66bf85a09c664f0b6741840499b2

    得到flag

     

  • 相关阅读:
    Java之JDBC
    docker部署ETC(以太经典)主网链
    XML配置文件
    一个获取当前登录机器IP的工具类
    【PAT(甲级)】1047 Student List for Course(超时问题)
    力扣刷题 day58:10-28
    PostgreSQL常用指令
    Material Design组件 - 使用BottomSheet展现扩展内容(一)
    【字典合集】SecLists-更全面的渗透测试字典 v2024.1
    redis 学习记录
  • 原文地址:https://blog.csdn.net/Yb_140/article/details/127548454