远程代码执行渗透与攻防

Posted 私ははいしゃ敗者です

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了远程代码执行渗透与攻防相关的知识,希望对你有一定的参考价值。

目录

前言

远程代码执行:Remote Code Execute

远程命令执行:Remote Command Execute

为什么要远程执行代码?

漏洞危害 

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

PHP RCE涉及函数 

代码code注入:

命令command注入 :

靶场案例 

 CTF案列

RCE防御 


前言

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

远程代码执行:Remote Code Execute

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

远程命令执行:Remote Command Execute

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

为什么要远程执行代码?

漏洞危害 

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

PHP RCE涉及函数 

代码code注入

命令command注入 :

靶场案例 

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

Windows命令拼接符号:

Linux命令拼接符号:

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

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

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

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

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

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

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

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

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

 CTF案列

我们打开CTFhub平台:

 

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

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

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

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

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

 然后显示如下:

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

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

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

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

出现如图下所示的界面:

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

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

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

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

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

发现什么都没有。

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

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

得到:

然后提交flag:

 接下来我们来看第三题:

 老样子,我们打开靶场:

看到如下代码:

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

这一步和上一关一样。

 回显:

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

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

 

 

得到以下数据:

老规矩,拿去解密:

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

提交:

 我们接下来看第四关:

它这里过滤了空格。

老方法 :

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

得到这么一串数据:

解密:

第五关:

 

 

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

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

 

 发现里面有一个flag。

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

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

 

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

提交flag。

第六关:

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

 

 cat命令查看文件:

右键查看网页源码:

第七关:

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

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

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

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

右键查看源码:

RCE防御 

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

 

以上是关于远程代码执行渗透与攻防的主要内容,如果未能解决你的问题,请参考以下文章

网络安全 渗透 攻防3(用户与组管理 服务器远程管理)

老男孩网络安全课程主要学啥?

渗透思路(《网络安全与攻防策略》读书笔记)

零基础自学网络安全/网络渗透攻防路线学习方法建议收藏

【网络安全入门教程】Web渗透测试常用工具

网络安全 渗透 攻防1(虚拟机安装部署,IP地址详解)