CTF RCE(远程代码执行)
php代码执行
一、相关函数
1、代码注入
eval()
传入的必须是有效的 PHP 代码。所有的语句必须以分号结尾。
return 语句会立即中止当前字符串的执行。代码执行的作用域是调用 eval() 处的作用域。因此,eval() 里任何的变量定义、修改,都会在函数结束后被保留。
assert()
call_user_func()/call_user_func_array()
可以传递任何内置函数或用户自定义函数,除了语言结构如array(),echo(),empty(),eval(),exit(),isset(),list(),print(),unset()
create_function()
usort()/uasort()
2、命令执行
- system()
- exec()/shell_exec()
- passthru
- ``运算符
二、命令执行的绕过
1、命令执行的分隔符
例子:system("echo ".$_GET[1]);
功能 | 符号 | payload |
---|---|---|
换行符 | %0a | ?1=123%0apwd |
回车符 | %0d | 同上 |
连续指令 | ; | ?1=123;pwd |
后台进程 | & | ?1=123&pwd |
管道符 | |(显示后面语句的结果) | ?1=123|pwd |
逻辑运算 | ||或&& | ?1=123||pwd |