代码执行/命令执行总结
php的代码执行/命令执行函数
1 代码执行
1.1 eval
(PHP 4, PHP 5, PHP 7)
|
|
把字符串 code
作为PHP代码执行。
|
|
直接蚁剑链接密码为c
1.2 assert
(PHP 4, PHP 5, PHP 7)
|
|
如果 assertion
是字符串,它将会被 assert() 当做 PHP 代码来执行。
使用方法同eval
|
|
1.3 preg_replace
|
|
(PHP 4, PHP 5, PHP 7)
preg_replace — 执行一个正则表达式的搜索和替换 搜索subject中匹配pattern的部分, 以replacement进行替换。
当使用被弃用的 e
修饰符时, 这个函数会转义一些字符(即:'
、"
、 \
和 NULL
然后进行后向引用替换。在完成替换后, 引擎会将结果字符串作为php代码使用eval方式进行评估并将返回值作为最终参与替换的字符串。
举个栗子:
|
|
/e
修饰符前的正则表达式匹配后面的字符串参数,将chabug
字符串替换为phpinfo()
并且以eval()
的方式执行。
一句话:
|
|
1.4 call_user_func
|
|
(PHP 4, PHP 5, PHP 7)
call_user_func
— 把第一个参数作为回调函数调用
第一个参数 callback
是被调用的回调函数,其余参数是回调函数的参数。
举个例子:
|
|
一句话shell:
|
|
蚁剑链接
需要设置http body和编码器
1.5 call_user_func_array
|
|
call_user_func_array
调用回调函数,并把一个数组参数作为回调函数的参数
举个例子:
|
|
和上一个函数相比只是将$c
改为数组传入,蚁剑连接方式同理。
1.6 create_function
|
|
create_function函数接收两个参数$args
和 $code
然后组成新函数function_lambda_func($args){$code;}
并eval(function_lambda_func($args){$code;})
我们不需要传参数,直接把$code
改为普通的一句话就行了。
|
|
密码c
1.7 array_map
|
|
返回数组,是为 array1
每个元素应用 callback函数之后的数组。 callback 函数形参的数量和传给 array_map()
数组数量,两者必须一样。
一句话:
|
|
还有诸如array_filter
、uksort
、uasort
、array_walk + preg_replace
、preg_filter
、mb_ereg_replace
、register_shutdown_function
、filter_var
更多的回调函数请移步 创造tips的秘籍——PHP回调后门
2 命令执行
2.1 system
|
|
system — 执行外部程序,并且显示输出,本函数执行 command 参数所指定的命令, 并且输出执行结果。
|
|
2.2 passthru
|
|
passthru — 执行外部程序并且显示原始输出
|
|
2.3 exec
|
|
exec() 执行 command 参数所指定的命令。
|
|
2.4 pcntl_exec
|
|
pcntl_exec — 在当前进程空间执行指定程序
$path
指定可执行二进制文件路径
|
|
该模块不能在非Unix平台(Windows)上运行。
2.5 shell_exec
|
|
通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。
|
|
2.6 popen
|
|
打开一个指向进程的管道,该进程由派生给定的 command 命令执行而产生。
|
|
与之对应的还有proc_open()
函数
2.7 反引号
在php中称之为执行运算符,PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回,使用反引号运算符的效果与函数 shell_exec()
相同。
|
|
2.8 ob_start
|
|
|
|
实际上还是通过回调system函数,绕不过disablefunc
2.9 mail
讲不清楚,直接贴链接
3 bypass_disablefunc
https://github.com/l3m0n/Bypass_Disable_functions_Shell
https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD
4 参考链接
参考各位师傅的文章
如果你觉得这篇文章对你有所帮助,欢迎赞赏或关注微信公众号~