远程命令执行和远程代码执行

一、远程命令执行和远程代码是怎样形成的?

RCE(remote command/code execute)概述
RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
远程系统命令执行
一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口。
比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上
一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。 而如果,设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器。
现在很多的甲方企业都开始实施自动化运维,大量的系统操作会通过"自动化运维平台"进行操作。 在这种平台上往往会出现远程系统命令执行的漏洞。
远程代码执行
同样的道理,因为需求设计,后台有时候也会把用户的输入作为代码的一部分进行执行,也就造成了远程代码执行漏洞。不管是使用了代码执行的函数,还是使用了不安全的反序列化等等。
因此,如果需要给前端用户提供操作类的API接口,一定需要对接口输入的内容进行严格的判断,比如实施严格的白名单策略会是一个比较好的方法。

二、pikachu实例

命令执行
我们就直接看一下代码吧,发现直接调用系统函数shell_exec将用户输入的内容拼接进来而没有对输入内容做过滤,从而就形成了命令执行。
在这里插入图片描述
我们尝试输入:127.0.0.1|ipconfig,发现页面直接输出了ipconfig的内容。
在这里插入图片描述
PS1:Windows和Linunx下常用管道符
Windows
“|”:直接执行后面的语句。
“||”:如果前面执行的语句出错,则执行后面的语句。前面的语句只能为假。
“&”:如果前面的语句为假则直接执行后面的语句。前面的语句可真可假。
“&&”:如果前面语句为假则直接出错,也不执行后面的语句。前面的语句只能为真。
Linux
“;”:执行完前面的语句再执行后面的。
“|”、“||”、“&”、“&&”和Windows使用方法相同。
PS2:命令执行函数
1.exec()
在这里插入图片描述
2.system()
输出执行结果,返回最后一行。
如果PHP运行在服务器模块中,system()函数还会尝试在每行输出完毕之后,自动刷新web服务器的输出缓存。
3.passthru()
执行外部程序并且显示原始输出。同exec()函数类似,passthru()函数也是用来执行外部命令的。当所执行的Unix命令输出二进制数据,并且需要直接传送到浏览器的时候,需要用此函数来替代exec()或system()函数。常用来执行诸如pbmplus之类的可以直接输出图像流的命令。
4.shell_exec()
通过shell环境执行命令,并且将完整的输出以字符串的方式返回。该函数会在错误出现或者程序执行没有输出两种情况下返回NULL,也就是说,没有办法通过该函数检测程序执行失败(可以改用exec)。
5.popen()
打开一个指向进程的管道,该进程由派生指定的 command 命令执行而产生。返回一个和 fopen() 所返回的相同的文件指针,只不过它是单向的(只能用于读或写),此指针可以用于 fgets(),fgetss() 和 fwrite()。并且必须用 pclose() 来关闭。若出错,则返回 false。
6.proc_open()
执行一个命令,并且打开用来输入/输出的文件指针。
代码执行
直接查看源码,发现后台使用了evel()函数来处理用户输入的内容,如果不是evel要处理的格式就输出“你喜欢的字符还挺奇怪的!”。因此我们可以构造一个特殊内容触发evel函数执行,我们尝试输入:phpinfo(),页面直接将phpinfo()的内容显示了出来。
PS3:PHP代码执行函数
1.evel():传入的参数必须为PHP代码,既需要以分号结尾。
2.assert():直接将传入的参数当成PHP代码执行,不需要以分号结尾,当然加上也可以。
3.preg_replace():#preg_replace(‘正则规则’,‘替换字符’,‘目标字符’)
#执行命令和上传文件参考assert函数(不需要加分号)。
#将目标字符中符合正则规则的字符替换为替换字符,此时如果正则规则中使用/e修饰符,则存在代码执行漏洞。
4.create_function():创建匿名函数执行代码。
5.array_map(): 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
6.call_user_func():传入的参数作为assert函数的参数。
7.call_user_func_array():将传入的参数作为数组的第一个值传递给assert函数。
8.array_filter():用回调函数过滤数组中的元素:array_filter(数组,函数)
9、uasort():
#php环境>=<5.6才能用
#uasort() 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联 。
在这里插入图片描述
在这里插入图片描述

三、防范措施

1.尽量不要使用命令执行函数。
2.客户端提交的变量在进入执行命令函数前要做好过滤和检测。
3.在使用动态函数之前,确保使用的函数是指定的函数之一。
4.对PHP语言来说,不能完全控制的危险函数最好不要使用。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
SmartBI是一种企业级的商业智能系统软件,用于数据分析和报告生成。近期,SmartBI被发现存在远程命令执行漏洞。 该漏洞的存在使得攻击者可以通过构造恶意的命令,并通过远程访问的方式执行这些命令,从而获取系统权限并进行未授权操作。这可能导致许多安全风险,包括未经授权的数据访问、敏感信息泄漏、系统瘫痪等。 远程命令执行漏洞通常是由于软件代码中的缺陷或不安全配置导致的。在SmartBI的情况下,攻击者可以通过用户输入参数中的特殊字符来注入恶意命令,由于软件没有对这些输入进行充分的验证和过滤,导致了漏洞的存在。 为了防止此类漏洞的利用,SmartBI的开发者应该加强对用户输入的验证与过滤。验证用户输入的合法性,确保输入中不包含任何潜在的恶意命令,如特殊字符、命令标识符等。此外,软件应该限制命令执行的权限,只允许执行必要的操作,并保证执行环境的安全性。 对于用户来说,应该及时更新SmartBI软件到最新版本,以获取安全补丁和修复。此外,用户在使用SmartBI时应保持警惕,避免点击不明链接、下载可疑附件,以及及时报告任何异常情况。 总之,SmartBI远程命令执行漏洞的存在给企业数据安全带来了潜在威胁。开发者需要加强软件的安全性设计和防护措施,而用户则应该保持警惕并采取合适的安全措施来最大程度地降低风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值