远程命令执行漏洞

RCE(remote command/code execute,远程命令执行)漏洞,一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口,比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上。

一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。如果设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台执行,从而控制整个后台服务器

原理

以PHP为例,system、exec、shell_exec、passthu、popen、proc_popen等函数可以执行系统命令。当我们可以控制这些函数的参数时,就能运行我们想运行的命令,从而进行攻击。

攻击

管道符 作用 举例
| 直接执行后面的语句 ping 127.0.0.1 | whoami
|| 前面的语句执行出错则执行后面的语句 ping 127.0.0.1 || whoami
& 前面的语句为假则执行后面的语句 ping 127.0.0.1 & whoami
&& 前面的语句为假,直接出错;前面的语句为真,执行后面的语句 ping 127.0.0.1 && whoami

PHP RCE

PHP RCE指的是通过远程代码执行漏洞来攻击PHP程序的一种方式。简单来说,由于PHP应用程序没有正确处理外部输入数据(用户提交的表单、请求参数等等),此时通过某些手段向PHP应用程序中注入恶意代码,然后通过这些恶意代码实现对攻击服务器的控制。

无参数RCE

https://blog.csdn.net/2301_76690905/article/details/133808536

题目特征

1
2
3
if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['star'])) {    
eval($_GET['star']);
}

preg_replace(pattern, replacement, subject)

pattern::要搜索的模式,可以使用一些PCRE修饰符

replacement:用于替换的字符串或字符串数组

subject:要进行搜索和替换的字符串或字符串数组

返回值:返回subject,返回类型同subject(字符串或字符串数组)

相关函数介绍

  • scandir()

​ 返回当前目录中的所有文件和目录的列表。返回的结果是一个数组,其中包含当前目录下的所有文件和目录名称

  • localeconv()

​ 返回一包含本地数字及货币格式信息的数组。(数组的第一项是‘.’,这个 . 的作用很大)

  • current()

​ 返回数组中的单元,默认取第一个值。pos()和current()是同一个东西

  • getcwd()

​ 取得当前工作目录

  • dirname()

​ 函数返回路径中的目录部分

  • chdir()

​ 函数改变当前的目录

  • array_flip()

​ 交换数字组中的键和值,成功时返回交换后的数组

  • array_rand()

​ 从数组中随机取出一个或多个单元

  • array_reverse()

​ 将数组内容反转

  • strrev()

​ 用于反转给定字符串

  • eval()、assert()

​ 命令执行

  • highlightfile()、show_source()、readfile()

​ 读取文件内容

实例

1
?参数=var_dump(scandir(current(localeconv())));

实际上作用是返回当前目录:scandir(‘.’)