RCE(remote code execute)远程代码执行,其核心思想利用一些可以将参数作为代码执行的函数,构造恶意输入从而实施攻击。
PHP相关敏感函数
常见的敏感函数如下:
|
|
eval()
Evaluates the given code as PHP.
如果不进行处理的话,非常危险的一个函数。我们都很熟悉的一个页面:
|
|
最为简单的利用:
|
|
更进一步的利用:
|
|
此时去访问/test.php
并POST数据即可执行任意代码
preg_replace()
/e
修正符使preg_replace()
,将replacement
参数当做php 代码执行
php 5.5之后/e
修饰符已废用 使用preg_replace_callback()
函数代替
|
|
create_function()
用于创建匿名函数,例如以下函数创建一个求和函数:
|
|
mail()
来源于CVE-2016-10033
|
|
其主要的利用是其第5个参数additional_parameters
:
|
|
其参数可以允许传递额外参数作为命令行选项,造成威胁。
由于mail()
函数的本质在*nix
系统中是调用系统的sendmail()
函数,那么可以看看手册有哪些可以利用的参数
|
|
# 任意文件读取
那么可以如下构造:
|
|
则这样会读取/etc/passwd
内容写入tmp.log
的文件中
# 任意文件写入
|
|
这里我们就不用知道web根目录,直接写文件到当前目录,写到shell.php
文件的内容就是发送邮件的内容了,你可以写任意内容。
其他对于mail()
函数的利用可以参考以下文章:
相关技巧
防御
- 尽量不要执行外部的应用程序和命令
- php使用
escapeshellcmd()
和escapeshellarg()
disable_functions中禁用 - 在使用诸如:eval、preg_replace、assert这些函数的时候,确定参数的内容,严格过滤危险参数。
- 接受的参数变量尽量用引号包裹,并在拼接前调用
addslashes
进行转义 - 检查bash破壳漏洞
- 检查各个反序列化命令执行漏洞
工具
- tplmap
- 各大反序列化检测工具