RCE漏洞概念
“感谢您阅读本篇博客!如果您觉得本文对您有所帮助或启发,请不吝点赞和分享给更多的朋友。您的支持是我持续创作的动力,也欢迎留言交流,让我们一起探讨技术,共同成长!谢谢!🚀✨”
概念
因为业务需要,开发者未对用户输入的参数做严格的过滤,导致恶意用户的输入被作为命令来执行,比如PHP中的exec()
、system()
等,如果这些函数的参数是由用户所提供的,那么恶意用户就可能通过构造命令拼接来执行额外系统命令,出现远程代码漏洞比如这样的代码
exec
属于命令执行eval()
A瓦 函数属于代码执行
管道符
一般我们是需要用后面的语句来进行攻击,所以首选|
如果被过滤了在考虑其他
逻辑与 逻辑或
命令执行
常见的路由器、防火墙、入侵检测等设备的web管理界面上。一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping
测试,并返回测试结果
执行条件
- 开发人员调用了能够执行系统命令的函数
- 这个函数的参数可控(即用户能够控制)
- 开发人员没有对该函数的参数进行过滤或过滤不严
系统命令执行函数
PHP
命令执行函数
system()
字符串作为OS命令执行
passthru()
字符串作为OS命令执行,不需要输出执行结果,且输出全部的内容
exec()
字符串作为OS命令执行,需要输出执行结果,且它只会输出最后一行的内容
shell_exec()
字符串作为OS命令执行,需要输出执行结果,且输出全部的内容
popen()/proc_open()
字符串当作OS命令来执行,但是该函数返回的是文件指针而非命令执行结果该函数有两个参数
反引号 ``
引号里面的代码也会被当作OS命令来执行,实际上是调用shell_exec
(函数来执行)
代码执行
其实在黑盒测试中是很难发现RCE
漏洞,更多的是需要白盒代码审计,通过源码我们再进一步查找可以造成命令执行漏洞的函数去推测出它的逻辑
代码执行函数
@
符合的作用是屏蔽掉错误信息,这样哪怕连接出错也不会报错,原因是防止别人根据错误提示信息来推测出你的数据库结构进行注入攻击一类的黑客行为
eval()
字符串作为参数传入,然后将其作为代码执行
assert()
传入的参数当成PHP代码执行,不需要加入分号
call_user_func()
调用一个用户自定义的函数或方法,方法调用方法
create_function()
创建一个匿名函数执行代码,由于创建的是一个匿名函数,因此无法像普通函数一样直接调用,必须将其赋值给一个变量
array_map()
用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组,回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致
array_filter()
用于过滤数组中的元素,返回一个新的数组
uasort()
php环境大于5.6使用,使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
preg_replace('正则规则','替换字符','目标字符')
将目标字符中符合正则规则的字符替换为替换字符,此时如果正则规则中使用/e修饰符,则存在代码执行漏洞
Pikachu靶场
命令执行
ping
命令 使用 逻辑与或绕过 &&
后端代码使用shell_exec
造成命令执行的函数 直接执行了系统命令
代码执行
输入的字符串被作为编程语言内置的代码去执行,
输入字符串直接被eval
执行
通过代码写入生成文件的一句话马,首先使用fputs
写入文件内容,先fopen
打开shell.php
,以w
写入模式打开,没有这个文件则创建,并在此文件内写入内容
<?php assert($_POST[fin]);?>
输入框执行后文件成功写入,如果实战中回显路径的话可以蚁剑连接
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)