【web安全】——命令执行漏洞(RCE)详解

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

作者名Demo不是emo 

主页面链接主页传送门
创作初心舞台再大你不上台永远是观众没人会关心你努不努力摔的痛不痛他们只会看你最后站在什么位置然后羡慕或鄙夷
座右铭不要让时代的悲哀成为你的悲哀
专研方向网络安全数据结构

每日emo生活有很多味道 最甜和最苦都是你

我感觉自己网安的学习遇到了问题会花很多时间去挖洞但是只能挖到注入和XSS还都是比较简单的那种cnvd都不收的但是我明明还学了很多其他的漏洞难道是我没遇到吗我想也许是经验的欠缺和对其他漏洞理解的不全面吧

很多人都说这个阶段需要沉定来积累经验靶场漏洞复现和总结经验才是当前的中心任务所以我也想好好捋一下其他类型的漏洞同时也分享出来希望也能帮到大家今天的内容是命令执行漏洞

目录

一简述命令执行漏洞

1.形成原因

2.漏洞分类

1、代码层过滤不严     

2、系统的漏洞造成命令注入     

3、调用的第三方组件存在代码执行漏洞     

二命令执行漏洞的利用条件 

三可能存在命令执行漏洞的函数PHP

1.利用系统函数实现命令执行的函数

 2.直接执行系统命令的代码函数

四命令拼接符号

1.windows的系统命令拼接符 

2.linux的系统命令拼接符 

五常用绕过防护的方法

1.通配符 

2.连接符

3.未初始化变量 

六常见位置 

七修复方案


一简述命令执行漏洞

1.形成原因

应用有时需要调用一些执行系统命令的函数如PHP中的system、exec、shell_exec、passthru、popen、proc_popen等当用户能控制这些函数的参数并且开发人员对这个参数没有严格的过滤时就可以将恶意系统命令拼接到正常命令中从而造成命令执行攻击这就是命令执行漏洞。

2.漏洞分类

1、代码层过滤不严     

     商业应用的一些核心代码封装在二进制文件中在web应用中通过system函数来调用                   

system("/bin/program --arg $arg");

2、系统的漏洞造成命令注入     

      比如bash破壳漏洞CVE-2014-6271

3、调用的第三方组件存在代码执行漏洞     

    如wordPress中用来处理图片的imageMagick组件     

    JAVA中的命令执行漏洞struts2/ElasticsearchGroovy等     

    ThinkPHP5.x的命令执行

二命令执行漏洞的利用条件 

 根据上面形成原因中我加粗的部分想来大家应该也明白了利用命令执行漏洞的前提条件就是三点

1.开发人员调用了能够执行系统命令的函数

2.这个函数的参数可控即用户能够控制

3.开发人员没有对该函数的参数进行过滤或过滤不严

 满足上面的条件才能称之为漏洞执行命令当然“过滤不严”的程度就需要根据你自己的绕过能力来自我评判了绕过方式待会我们也会讲到一些

而这些        

三可能存在命令执行漏洞的函数PHP

1.利用系统函数实现命令执行的函数

eval、assert、preg_replace、call_user_func

如果页面中存在以上这些函数并且对于用户的输入没有做严格的过滤那么就可能造成远程命令执行漏洞除此以外还有其他函数

ob_start、unserialize、creat_function 、usort、uasort、uksort、 array_filter、 array_reduce、 array_map

 2.直接执行系统命令的代码函数

systemexecshell_execpassthru pcntl_exec popen proc_open反引号

四命令拼接符号

 如果问命令执行漏洞中一定要会的东西是什么那一定是命令拼接符因为恶意命令通常是拼接在正常命令后面会用命令拼接符才是你利用命令执行漏洞的基础这里也为大家准备了windowslinux常用的拼接符

1.windows的系统命令拼接符 

拼接符示例拼接符的详解
&A&B无论A是false还是trueB都执行即互不影响
&&A&&B具有短路效果A是falseB就不执行有短路效果
|A|B表示A命令语句的输出作为B命令语句的输入执行。当A为false的时候将不会执行
||A||B表示A命令语句执行失败然后才执行B命令语句

2.linux的系统命令拼接符 

linux的命令有点复杂需要给出示例图部分同学才能理解一共有5个下面我们一个一个介绍

第一个是“&     ‘&’的作用是使命令在后台运行。只要在命令后面跟上一个空格和 ‘&’。你                                可以一口气 在后台运行多个命令。需要停止就是kill -s  进程号展示如                              下图

第二个是“;      就是分号作用就是可以进行多条命令的无关联执行每一条执行结果                                   互不影响示例如下

第三个是“&&”    这个没啥讲的跟windows的用法和功能都一样都是左边成功才执行                                   右边这里就不给例子了

第四个是“||”       这个也跟windows一样前面执行失败才执行后面

第五个是“()”       如果想执行几个命令则需要用命令分隔符分号隔开每个命令并使用                                   圆括号()把所有命令组合起来,示例如下

3.简述

常用的命令拼接符这里都涵盖完了但是要注意的是使用时不要局限于单个的简单的用法因为很多过滤参数的方式都是识别对应的拼接符所以要思维变通很多时候大量拼接符层层嵌套往往会有出其不意的效果

比如上面这个圆括号的使用例子意思就是当echo 1 执行成功后会执行后面的命令把echo 1输出到 11.txt 然后复制11.txt到根目录。 结合||和&&可以实现复杂的功能。

五常用绕过防护的方法

上面就讲到了本文会提一些过滤方法所以这里就讲一讲命令执行漏洞中常用的一些过滤方法其实本质都是模糊匹配下面给大家详细讲讲几种方法

1.通配符 

常见的通配符

符号

含义

匹配单个字符如果匹配多个字符就需要多个?连用

*

*代表任意数量的字符

[ ]

代表一定有一个在括号内的字符(非任意字符)。例如 [abcd] 代表一定有一个字符 可能是 a, b, c, d 这四个任何一个

使用示例

 一个常用的读取密码命令如下

cat /etc/passwd

使用了通配符之后他就可能有很多种变化比如这两种而这些亲测都是可以使用

cat /?tc/?as?wd
cat /*tc/*as*wd

这里需要注意的也是一样不要局限自己的思维几种通配符也是可以搭配使用的

2.连接符

常见连接符

单双引号反斜杠 " " ‘ ’ 如/'b'i'n'/'c'a't' /'e't'c'/'p'a's's'w'd 

使用示例

3.未初始化变量 

简介

未初始化的变量值都是null例如a , a,a,b,在linux环境下输出都为null 所以可以用未初始化变量加在一些命令的末尾来绕过一些黑名单

使用示例

 cat$a /etc$a/passwd$a

六常见位置 

 各种cms框架的命令执行漏洞是最多的着重在这些地方找除此之外就是插件位置插件因为各种原因经常也需要执行系统命令当然其他的地方也有只是说这两个位置最多

七修复方案

1、各种框架、插件等位置都有可能出现命令执行升级到新版本多打补丁

2、关注行业最新安全动态一旦爆发命令执行漏洞迅速修复避免造成更大影响

3、少用框架/CMS

4、可以过滤一些符号从而减少一些危险

5、安全配置好php相关参数      

        通过Php配置文件里面有个disable_functions = 配置这个禁止某些php函数 服务器便是用这个来禁止php的执行命令函数。

        例如 disable_functions=system,passthru,shell_exec,exec,popen 便禁止了用这些函数来执行系统命令

6、升级中间件

7、严格控制传入变量严禁使用魔法函数

今日份学习结束网络安全将是我一生奋斗的方向谢谢大家的阅读一起加油哇

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6