远程代码执行渗透与攻防(一)

目录

前言

远程代码执行:Remote Code Execute

远程命令执行:Remote Command Execute

为什么要远程执行代码?

漏洞危害 

近几年影响比较大的RCE漏洞

PHP RCE涉及函数 

代码code注入:

命令command注入 :

靶场案例 

 CTF案列

RCE防御 


前言

远程代码执行漏洞(RCE,也叫任意代码执行),是由用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致执行了服务器的命令。 RCE漏洞的造成方式有很多种,一旦可以执行任意命令,就可以执行任意操作,属于高危漏洞。

远程代码执行:Remote Code Execute

应用程序在调用一些能够将字符串转换为代码的函数(如PHP中的eval(),eval可以将字符串当做函数执行)时,没有考虑用户是否控制这个字符串,将造成代码执行漏洞。一般很难通过黑盒查找漏洞,大部分都是根据源代码判断代码执行漏洞。

远程命令执行:Remote Command Execute

命令执行直接调用操作系统命令。其原理是,在操作系统中,“&、|、||”都可以作为命令连接符使用,用户通过浏览器提交命令执行命令,由于服务端没有针对执行函数做过滤,将用户的输入作为系统的命令的参数拼接到命令行中,在没有过滤用户输入的情况下,造成命令执行漏洞。

为什么要远程执行代码?

远程代码执行渗透与攻防(一)_第1张图片

漏洞危害 

远程代码执行渗透与攻防(一)_第2张图片

 近几年影响比较大的RCE漏洞

远程代码执行渗透与攻防(一)_第3张图片

PHP RCE涉及函数 

代码code注入

远程代码执行渗透与攻防(一)_第4张图片

命令command注入 :

远程代码执行渗透与攻防(一)_第5张图片

靶场案例 

在靶场案列演示之前,我们先来学习一些基础的知识:

Windows命令拼接符号:
远程代码执行渗透与攻防(一)_第6张图片

Linux命令拼接符号:
远程代码执行渗透与攻防(一)_第7张图片

接下来我们拿pikaqiu靶场来做演示:

远程代码执行渗透与攻防(一)_第8张图片

我们再来看一下它的源代码,很简单就是调用了shell_exec执行用户输入的命令:

远程代码执行渗透与攻防(一)_第9张图片

 我们输入一个127.0.0.1去ping一下:

远程代码执行渗透与攻防(一)_第10张图片

得到了结果,并执行了响应。

远程代码执行渗透与攻防(一)_第11张图片

 但如果我们在这条命令后面跟上了恶意的命令呢?由于服务端没有对恶意函数进行限制,会不会导致恶意代码执行呢?

远程代码执行渗透与攻防(一)_第12张图片

远程代码执行渗透与攻防(一)_第13张图片

 如图显示,ipconfig命令执行了。原本只有ping功能的服务,却应为没有对用户输入进行验证,导致了恶意命令的执行。

我们再来看一下第二种eval:

远程代码执行渗透与攻防(一)_第14张图片

我们之前说过,代码执行漏洞就是因为后端使用了eval()这样的函数,导致将用户输入的字符串解析成了代码执行,我们这里输入 phpinfo();看看会发生什么?

远程代码执行渗透与攻防(一)_第15张图片

 可以看到他将我们输入的字符串当作函数来执行了。

远程代码执行渗透与攻防(一)_第16张图片

 CTF案列

我们打开CTFhub平台:

远程代码执行渗透与攻防(一)_第17张图片

 远程代码执行渗透与攻防(一)_第18张图片

我们从最简单的eval执行开始:

远程代码执行渗透与攻防(一)_第19张图片

我们启动靶场,打开环境:

远程代码执行渗透与攻防(一)_第20张图片

看到出现如图下所示的场景:

远程代码执行渗透与攻防(一)_第21张图片

我们这里可以分析一下他的代码,可以看到这里面有个eval函数,传参是cmd,那我们可以直接通过Webshell工具去连接他:

远程代码执行渗透与攻防(一)_第22张图片

我们点击添加,然后双击url打开:

远程代码执行渗透与攻防(一)_第23张图片

 然后显示如下:远程代码执行渗透与攻防(一)_第24张图片

 我们可以看到这里有个index.php文件,我们通过终端去看看:

远程代码执行渗透与攻防(一)_第25张图片

 可以看到在根目录路径下有个flag_22263文件,我们打开它:

 然后看到了flag,点击提交他:

远程代码执行渗透与攻防(一)_第26张图片

我们再来看下第二道题目:

远程代码执行渗透与攻防(一)_第27张图片

出现如图下所示的界面:

远程代码执行渗透与攻防(一)_第28张图片

我们来分析一下这串代码,首先判断用户输入存不存在,然后通过Get请求接受用户输入的ip,然后执行ping -c 用户输入的ip并赋值给$cmd参数,最后通过exec函数去执行。

我们这里输入ping 127.0.0.1来查看他的功能是否正常:

远程代码执行渗透与攻防(一)_第29张图片

远程代码执行渗透与攻防(一)_第30张图片

 因为这里是一个linux的操作系统,所以我们在127.0.0.1加上;号在跟上ls命令:

远程代码执行渗透与攻防(一)_第31张图片

 然后我们发现了以下的文件:

远程代码执行渗透与攻防(一)_第32张图片

 我们继续构造语句查看这个文件的内容:

远程代码执行渗透与攻防(一)_第33张图片

发现什么都没有。

远程代码执行渗透与攻防(一)_第34张图片

 我们继续在我们的语句后面添加上命令,进行一个base64的转码:

远程代码执行渗透与攻防(一)_第35张图片

远程代码执行渗透与攻防(一)_第36张图片

然后果然出现了内容,接下啦我们把这段base64的编码拿去解密:

远程代码执行渗透与攻防(一)_第37张图片

得到:

远程代码执行渗透与攻防(一)_第38张图片

然后提交flag:

远程代码执行渗透与攻防(一)_第39张图片

 接下来我们来看第三题:

远程代码执行渗透与攻防(一)_第40张图片

 老样子,我们打开靶场:

远程代码执行渗透与攻防(一)_第41张图片

看到如下代码:

远程代码执行渗透与攻防(一)_第42张图片

和上一管基本相似,但多了一个过滤cat命令。

这一步和上一关一样。

远程代码执行渗透与攻防(一)_第43张图片

 回显:

远程代码执行渗透与攻防(一)_第44张图片

 但这里因为cat命令被禁用了,我们只能另寻他路了。

其实这里考的就是我们查看文件的方式,Linux系统下查看文件的命令太多了,我就不一一列举了,这里直接 less跟上文件名:

远程代码执行渗透与攻防(一)_第45张图片

 远程代码执行渗透与攻防(一)_第46张图片

 远程代码执行渗透与攻防(一)_第47张图片

远程代码执行渗透与攻防(一)_第48张图片

得到以下数据:

远程代码执行渗透与攻防(一)_第49张图片

老规矩,拿去解密:

远程代码执行渗透与攻防(一)_第50张图片

 然后得到了这么一串数据:

提交:

远程代码执行渗透与攻防(一)_第51张图片

 我们接下来看第四关:

远程代码执行渗透与攻防(一)_第52张图片

它这里过滤了空格。

老方法 :

远程代码执行渗透与攻防(一)_第53张图片

远程代码执行渗透与攻防(一)_第54张图片

这一题主要考的就是我们Liunx里有哪些可以替换空格的操作符号:

远程代码执行渗透与攻防(一)_第55张图片

远程代码执行渗透与攻防(一)_第56张图片

远程代码执行渗透与攻防(一)_第57张图片

得到这么一串数据:

远程代码执行渗透与攻防(一)_第58张图片

解密:

远程代码执行渗透与攻防(一)_第59张图片

第五关:

远程代码执行渗透与攻防(一)_第60张图片

远程代码执行渗透与攻防(一)_第61张图片 

远程代码执行渗透与攻防(一)_第62张图片 

出现了跟之前不同的东西,这应该是个文件夹,而不是跟之前一样是一个文件。

我们通过ls命令去列出这个文件夹的内容:

远程代码执行渗透与攻防(一)_第63张图片

 远程代码执行渗透与攻防(一)_第64张图片

 发现里面有一个flag。

这一题考的就是过滤目录分割符:

远程代码执行渗透与攻防(一)_第65张图片

这里我们先 cd 到目录下,然后跟上;号,接着cat命令 去查看这个文件:

远程代码执行渗透与攻防(一)_第66张图片

远程代码执行渗透与攻防(一)_第67张图片 

然后我们直接右键查看网页源代码:

远程代码执行渗透与攻防(一)_第68张图片

提交flag。

第六关:

远程代码执行渗透与攻防(一)_第69张图片

像上面提到的这些运算符全部都被过滤了。但唯独没有过滤;号。

远程代码执行渗透与攻防(一)_第70张图片

远程代码执行渗透与攻防(一)_第71张图片 

 cat命令查看文件:

远程代码执行渗透与攻防(一)_第72张图片

远程代码执行渗透与攻防(一)_第73张图片 右键查看网页源码:

远程代码执行渗透与攻防(一)_第74张图片

第七关:

远程代码执行渗透与攻防(一)_第75张图片

我们发现好多东西都被过滤了。

这一题由于;符号被过滤了,所以我们在url一栏中后面添加上%0a来进行绕过:

远程代码执行渗透与攻防(一)_第76张图片

我们本来应该构造如下语句的:127.0.0.1%0acd flag_is_here%0als 进入这个目录,查看文件,但由于空格和flag都被过滤了,我们之前提到过空格可以用${IFS}来替代,flag这里我们可以运用通配符来替代。

远程代码执行渗透与攻防(一)_第77张图片

然后应该构造如下语句的:127.0.0.1%0acd${IFS}f***_is_here%0alsmore${IFS}f***_20021218031292.php来进行绕过:

远程代码执行渗透与攻防(一)_第78张图片

右键查看源码:

远程代码执行渗透与攻防(一)_第79张图片

RCE防御 

1、尽量不要使用命令执行的函数
2、如果必须使用,需要做白名单处理
3、用正则表达式对用户输入的内容进行处理
4、使用WAF

 

你可能感兴趣的:(Web漏洞,安全,web安全,网络,网络安全)