远程代码执行渗透与防御
- 1.简介
- 2.PHP RCE常见函数
- 3.靶场练习
- 4.防御姿势
1.简介
远程代码执行漏洞又叫命令注入漏洞
命令注入是一种攻击,其目标是通过易受攻击的应用程序在主机操作系统上执行任意命令。 当应用程序将不安全的用户提供的数据(表单、cookie、HTTP 标头等)传递到系统 shell 时,这些类型的攻击就有可能发生了。 在这种攻击中,攻击者提供的操作系统命令通常以易受攻击的应用程序的权限执行。 通常,由于输入验证不足,它们是很可能发生的
漏洞危害
- 获取服务器权限
- 获取敏感数据文件
- 写入恶意文件getshell
- 植入木马病毒勒索软件
2.PHP RCE常见函数
命令command注入
命令 | 作用 |
---|---|
system() | 执行外部程序,并且显示输出 |
exec()/shell_exec() | 通过shell执行命令,并且将完整的输出以字符串的方式返回 |
pcntl_exec() | 在当前进程空间执行指定程序 |
passthru() | 执行外部程序并且显示原始输出 |
popen() | 打开进程文件指针 |
proc_open() | 执行一个命令,并且打开用来输入/输出的文件指针 |
代码code注入
函数 | 作用 |
---|---|
eval() | 把字符串code作为PHP代码执行 |
assert() | 检查一个断言是否位false |
preg_repalce() | 执行一个正则表达式的搜索和替换 |
create_function() | 创建一个匿名函数并且返回函数名称 |
call_user_func()/call_user_func_array() | 把第一个参数作为回调函数调用 |
usort()/uasort() | 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联 |
3.靶场练习
皮卡丘 exec "ping"
ping一下百度网,正常回显:
查看源码,发现对输入没有处理之后我们还是一手拼接
baidu.com & ipconfig
命令执行成功!
皮卡丘 exec "eval"
exec"evel"
,更简单。随意输入字符,返回文字
eval(输入)
也就是执行任何我们输入的数据,例如输入phpinfo();
4.防御姿势
- 开源框架,升级到最新版本
- 尽量不使用命令执行的函数
- 尽量使用白名单
- 用正则表达式对用户输入的内容进行充分处理
- 使用WAF