news 2026/3/10 16:00:37

攻防世界: ics-05

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
攻防世界: ics-05

攻防世界: ics-05

本文知识点

preg_replace可执行代码漏洞的使用

preg_replace有三个参数,第一个参数是正则的模式字符串,第二个是替换的数据,第三个是正则模式字符串要去匹配的字符串。

当正则的模式字符串与要匹配的字符串匹配时(即第一个参数与第三个参数匹配),就会使用替换数据(第二个参数)进行替换。

当正则的第一个参数包含/e的时候就能触发代码执行的逻辑,具体可看后文。

题目总览

点击下图中的红框位置,跳转到设备维护中心的页面

然后再次点击云平台设备维护中心,可以看到浏览器中出现了page参数,因此怀疑其是一个文件包含的漏洞。

原始文件获取

使用前面提到过的php伪协议,将index.php转换为base64的编码输出。(为什么转换为base64, 因为文件包含漏洞的后端代码可能是include $page,如果这是一个php的代码,php代码的执行引擎会直接执行,而不会将原始文件返回给我们)

我们希望得到原始的文件,方便我们分析怎么绕过,得到flag。

将上述的base64解码,得到下面的php内容:

<?phperror_reporting(0);@session_start();posix_setuid(1000);?><!DOCTYPEHTML><html><head><meta charset="utf-8"><meta name="renderer"content="webkit"><meta http-equiv="X-UA-Compatible"content="IE=edge,chrome=1"><meta name="viewport"content="width=device-width, initial-scale=1, maximum-scale=1"><link rel="stylesheet"href="layui/css/layui.css"media="all"><title>设备维护中心</title><meta charset="utf-8"></head><body><ulclass="layui-nav"><liclass="layui-nav-item layui-this"><a href="?page=index">云平台设备维护中心</a></li></ul><fieldsetclass="layui-elem-field layui-field-title"style="margin-top: 30px;"><legend>设备列表</legend></fieldset><tableclass="layui-hide"id="test"></table><script type="text/html"id="switchTpl"><!--这里的 checked 的状态只是演示--><input type="checkbox"name="sex"value="{{d.id}}"lay-skin="switch"lay-text="开|关"lay-filter="checkDemo"{{d.id==10003?'checked':''}}></script><script src="layui/layui.js"charset="utf-8"></script><script>layui.use('table',function(){vartable=layui.table,form=layui.form;table.render({elem:'#test',url:'/somrthing.json',cellMinWidth:80,cols:[[{type:'numbers'},{type:'checkbox'},{field:'id',title:'ID',width:100,unresize:true,sort:true},{field:'name',title:'设备名',templet:'#nameTpl'},{field:'area',title:'区域'},{field:'status',title:'维护状态',minWidth:120,sort:true},{field:'check',title:'设备开关',width:85,templet:'#switchTpl',unresize:true}]],page:true});});</script><script>layui.use('element',function(){varelement=layui.element;//导航的hover效果、二级菜单等功能,需要依赖element模块//监听导航点击element.on('nav(demo)',function(elem){//console.log(elem)layer.msg(elem.text());});});</script><?php$page=$_GET[page];if(isset($page)){if(ctype_alnum($page)){?><br/><br/><br/><br/><div style="text-align:center"><pclass="lead"><?phpecho$page;die();?></p><br/><br/><br/><br/><?php}else{?><br/><br/><br/><br/><div style="text-align:center"><pclass="lead"><?phpif(strpos($page,'input')>0){die();}if(strpos($page,'ta:text')>0){die();}if(strpos($page,'text')>0){die();}if($page==='index.php'){die('Ok');}include($page);die();?></p><br/><br/><br/><br/><?php}}//方便的实现输入输出的功能,正在开发中的功能,只能内部人员测试if($_SERVER['HTTP_X_FORWARDED_FOR']==='127.0.0.1'){echo"<br >Welcome My Admin ! <br >";$pattern=$_GET[pat];$replacement=$_GET[rep];$subject=$_GET[sub];if(isset($pattern)&&isset($replacement)&&isset($subject)){preg_replace($pattern,$replacement,$subject);}else{die();}}?></body></html>

代码分析

重点关注下面的代码,前面提到的知识点,我们可以利用preg_replace函数的可执行漏洞,执行我们想执行的任何代码。

HTTP_X_FORWARDED_FOR这个请求头就是客户端的ip地址,我们知道这个地址是能通过x-forwarded-for的请求头进行伪造的。

`if($_SERVER['HTTP_X_FORWARDED_FOR']==='127.0.0.1'){echo"<br >Welcome My Admin ! <br >";$pattern=$_GET[pat];$replacement=$_GET[rep];$subject=$_GET[sub];if(isset($pattern)&&isset($replacement)&&isset($subject)){preg_replace($pattern,$replacement,$subject);}else{die();}}

破解思路

通过前面的分析,我能想到的一条路径就是发送一个x-forwarded-for的请求头,到达preg_replace函数的处理逻辑,然后利用这个函数的漏洞,执行任意代码,从而拿到flag。

  1. 尝试执行ls系统命令,得到对应的文件名或则文件夹名称。(如果你不知道谁是文件还是文件夹,可以执行ls -l命令)

  2. 使用cat命令查看flag。

注意:

这里我有几个踩坑的地方

  1. pat参数不能够匹配sub参数,导致代码没有得到执行。(最简单的情况就是pat是sub 的子字符串)
  2. 由于我直接在burp suite中进行改包,忘记将参数进行uri的编码了,导致执行失败

uri编码小知识

  1. 对Url进行编码后可以将一些特殊字符和汉字变为Encode编码格式
  2. encodeURI方法不会对下列字符编码 ASCII字母、数字、~!@#$&*()=:/,;?+’
  3. encodeURIComponent方法不会对下列字符编码 ASCII字母、数字、~!*()’
  4. encodeURIComponent编码的范围更广,会将http://XXX中的//也编码,会导致URL不可用。

错误的编码方式

正确的编码方式

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/9 23:27:51

BetterNCM终极改造指南:从普通播放器到全能音乐工作站

BetterNCM终极改造指南&#xff1a;从普通播放器到全能音乐工作站 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 你是否觉得网易云音乐的界面太过单调&#xff1f;想要更多个性化功能…

作者头像 李华
网站建设 2026/3/7 8:54:10

快速验证微调效果:Qwen2.5-7B推理测试全流程演示

快速验证微调效果&#xff1a;Qwen2.5-7B推理测试全流程演示 1. 为什么这次微调验证值得你花十分钟&#xff1f; 你有没有遇到过这样的情况&#xff1a;辛辛苦苦跑完一轮LoRA微调&#xff0c;结果一测试发现模型还是固执地自称“阿里云开发的”&#xff0c;完全没记住你精心设…

作者头像 李华
网站建设 2026/3/5 20:41:43

PinWin:让任意窗口始终置顶的终极解决方案

PinWin&#xff1a;让任意窗口始终置顶的终极解决方案 【免费下载链接】PinWin Pin any window to be always on top of the screen 项目地址: https://gitcode.com/gh_mirrors/pin/PinWin 在Windows多任务处理中&#xff0c;你是否经常因为窗口切换而打断工作流程&…

作者头像 李华
网站建设 2026/3/8 1:16:43

深度启动盘制作工具完全攻略:从零基础到精通使用

深度启动盘制作工具完全攻略&#xff1a;从零基础到精通使用 【免费下载链接】deepin-boot-maker 项目地址: https://gitcode.com/gh_mirrors/de/deepin-boot-maker 还在为系统安装、数据救援或硬件测试而困扰吗&#xff1f;深度启动盘制作工具正是你需要的终极解决方案…

作者头像 李华
网站建设 2026/3/4 11:22:19

PDF视觉差异对比工具:让文档比较变得简单高效

PDF视觉差异对比工具&#xff1a;让文档比较变得简单高效 【免费下载链接】diff-pdf A simple tool for visually comparing two PDF files 项目地址: https://gitcode.com/gh_mirrors/di/diff-pdf 在日常工作中&#xff0c;你是否曾经遇到过这样的情况&#xff1a;收到…

作者头像 李华
网站建设 2026/3/4 2:07:57

终极指南:用开源工具实现NVIDIA显卡专业级色彩校准

终极指南&#xff1a;用开源工具实现NVIDIA显卡专业级色彩校准 【免费下载链接】novideo_srgb Calibrate monitors to sRGB or other color spaces on NVIDIA GPUs, based on EDID data or ICC profiles 项目地址: https://gitcode.com/gh_mirrors/no/novideo_srgb 在数…

作者头像 李华