Ics-05

只有这里可以点开

审底下的代码

调用lila的use方法加载table模块,这里的AI辅助审代码时,这个layui框架让我很注意,接下来查一下。

然后就是交互功能,监听点击事件(domo元素)与弹窗

这段Layui代码中,导航点击的监听是通过Layui的 element 模块提供的事件接口实现的,具体步骤是:

  1. 指定监听的目标

element.on('nav(demo)', ...) 中的 nav(demo) 是"事件类型+组件标识":

  • nav :表示监听的是导航组件的点击事件(这是Layui element 模块预定义的事件类型);

  • demo :是导航容器对应的 lay-filter 属性值(需要在HTML的导航标签上设置 lay-filter="demo" ,用来标识要监听的导航组件)。

  1. 绑定点击后的回调函数

element.on 的第二个参数是回调函数:当用户点击了 lay-filter="demo" 对应的导航项时,这个函数会被自动触发。

函数里的 elem 参数,是被点击的导航项对应的DOM元素,通过 elem.text() 可以获取该导航项显示的文本内容。

  1. 执行点击后的反馈逻辑

回调函数中调用 layer.msg(elem.text()) ,是点击后的具体操作:弹出一个提示框,显示被点击导航项的文本内容,完成点击后的交互反馈。

先查找一下domo标识,看一下有什么东西。

好吧,原来是监听整个页面的数据,然后弹窗。

那就抓个包看看。

发现奇怪的东西。

下面有回显 ,可控!

其实我还挺好奇有没有模板注入类似的东西的。

好吧,只是静态展示

想试试目录扫描,但网卡实在扫不了,看wP

我前面想的居然是对了一点点,可以用伪协议读取源代码,然后看一下写的什么东西,有思路了。接着做。

但具体原理是什么啊...,如果是文件包含,那为什么改了之后还会显示页面,而不是报错呢?

当前 page=inde 的请求在文件包含场景下"没事",是因为后端可能做了容错/过滤处理,常见原因有3类:

  1. 后端存在"默认值/容错逻辑"

若后端的文件包含代码是类似这样的设计:

php

// 假设后端逻辑

page = _GET['page'] ?? 'index'; // 若page参数为空,默认用index

// 或对不存在的文件做兜底

if (!file_exists("{$page}.php")) {

$page = 'index'; // 若page对应的文件不存在,自动切换为index

}

include("{$page}.php");

此时即使传了 page=inde (对应 inde.php 不存在),后端会自动加载默认的 index.php ,所以页面仍能正常显示框架内容。

  1. 目标文件实际存在

后端可能确实有 inde.php 这个文件(比如文件名拼写错误、测试文件),此时 include("inde.php") 会正常加载该文件的内容,页面自然不会报错(你看到的"inde"文字,可能就是 inde.php 里的内容)。

  1. 后端做了"白名单过滤"

若后端对 page 参数做了白名单校验(仅允许指定的合法值),比如:

php

$allow_pages = ['index', 'device', 'log']; // 允许的页面列表

page = in_array(_GET['page'], allow_pages) ? _GET['page'] : 'index';

include("{$page}.php");

此时传 page=inde (不在白名单内),后端会自动替换为默认的 index ,因此页面仍能正常加载。

简言之,文件包含场景下"传错参数没报错",本质是后端做了参数容错、文件兜底或白名单过滤,避免了非法/错误参数导致的页面崩溃。

这是**"设备维护中心"网页的源代码**,基于Layui前端框架开发,核心信息与功能如下:

  1. 页面基础信息
  • 访问方式:通过 view-source: 协议查看源代码,URL为 index.php?page=index ------说明这是一个PHP页面,通过 page 参数传递内容标识(典型的"文件包含"类参数,用于加载对应模块的内容)。

  • 页面定位:标题为"设备维护中心",是一个面向设备管理的后台页面。

  1. 核心功能模块
  • 导航栏:通过Layui的 layui-nav 组件实现,导航项链接带 ?page=index 参数,与URL的 page 参数对应,用于切换页面模块。

  • 设备列表表格:使用Layui的 table 模块渲染,通过 url: '/something.json' 接口加载设备数据(如设备ID、名称、区域、维护状态等),同时包含"设备开关"的Layui Switch组件(用于控制设备状态)。

  1. 潜在的技术逻辑

URL中的 page=index 参数,通常对应PHP的文件包含功能(如 include($_GET['page'].php) )------即后端通过 page 参数的值,加载对应的功能文件(如 index.php 对应的模块文件)。这也是这类页面中"伪协议利用"的典型场景(若后端未对 page 参数做严格过滤,可能被注入伪协议实现文件读取等操作)。

简言之,这是一个基于Layui的设备管理后台页面,通过 page 参数实现模块切换,同时包含设备数据展示、状态控制等功能。

点击这个按钮加载对应的页面。

我懂这个静态页面显示什么意思了,回显东

西,难怪有些函数它给我过滤了,不是好玩。

我好蠢啊。

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();

}

开审。

首先传入的得是127.0.0.1才行,这让我想到了xff。(注:这个东西放在最后一排无效)

成功进入。

接下来就是正则替换。

preg_replace(

mixed $pattern, // 正则表达式模式(支持数组)

mixed $replacement, // 替换的内容(支持数组)

mixed $subject, // 待处理的目标字符串(支持数组)

int $limit = -1, // 可选:最大替换次数(-1表示无限制)

int &$count = null // 可选:引用变量,记录实际替换的次数

): mixed

到这里就真不懂了,接着看WP

了解了e漏洞:

/e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向

引用替换完之后)。

提示:要确保 replacement 构成一个合法的 PHP 代码字符串,

否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错误。

这个场景对应的是PHP中 preg_replace 函数的代码执行漏洞,其核心原理是利用了 preg_replace 的 /e 修饰符(或类似的代码执行逻辑),将替换内容作为PHP代码执行,从而实现了服务器命令执行,具体过程如下:

  1. 漏洞触发的核心条件

preg_replace 函数在使用** /e 修饰符**时,会将"替换内容( replacement 参数)"当作PHP代码执行(注:PHP 7.0及以上版本已移除 /e 修饰符,但旧版本或特定环境仍可能存在类似风险)。

在这个请求中,URL参数对应的是 preg_replace 的三个核心参数:

  • pat=abc :对应 preg_replace 的正则模式($pattern),即匹配字符串中的"abc";

  • rep=system("ls") :对应替换内容($replacement),这里构造了系统命令执行函数 system("ls") ;

  • sub=def abc :对应目标字符串($subject),其中包含了"abc"(用于触发正则匹配)。

  1. 漏洞执行的流程

当后端执行 preg_replace("/{pat}/e", rep, $sub) 时:

  1. 正则模式 /abc/e 匹配到目标字符串 sub 中的"abc";

  2. 由于 /e 修饰符的存在,替换内容 system("ls") 会被当作PHP代码执行;

  3. system("ls") 是PHP的系统命令执行函数,会在服务器上执行 ls (列出当前目录文件)的系统命令;

  4. 命令执行的结果(文件列表,如 index.html 、 start.sh 等)被返回并显示在响应中。

  5. 响应结果的对应性

响应红框中的 index.html 、 index.php 等内容,正是 ls 命令执行后返回的服务器当前目录的文件列表,证明了攻击者成功通过 preg_replace 的代码执行漏洞,获取了服务器的文件信息(甚至可以进一步执行其他系统命令)。

简言之,这个场景的原理是利用 preg_replace 的 /e 修饰符漏洞,将替换内容构造为系统命令函数,触发服务器端代码执行,从而获取服务器资源或执行恶意操作。

发现可疑文件。

由于浏览器会自动帮你编码,而包不行,所以包还要额外编码。

这靶场好像有点问题。

总而言之就是利用/e传参。

相关推荐
petunsecn7 小时前
CSRF防护模式选择指南:三种方案的对比与决策
csrf
-曾牛8 天前
CSRF跨站请求伪造:原理、利用与防御全解析
前端·网络·web安全·网络安全·渗透测试·csrf·原理解析
张3蜂8 天前
CSRF Token:网络应用安全的关键防线——深度解析与实战指南
前端·安全·csrf
张3蜂8 天前
跨站请求伪造(CSRF):原理、攻击与防御全解析
网络·安全·csrf
重生之我在番茄自学网安拯救世界9 天前
网络安全中级阶段学习笔记(五):CSRF跨站请求伪造学习笔记(超全总结)
笔记·学习·网络安全·csrf·跨站请求伪造
世界尽头与你13 天前
跨站请求伪造(CSRF)漏洞
web安全·网络安全·渗透测试·csrf
老马爱知18 天前
第5篇 | Web应用的“外邪”:XSS、CSRF与SSRF漏洞详解
web安全·xss·csrf·零信任·ssrf·信任边界·攻防启示录
无盐海2 个月前
CSRF漏洞攻击(跨站请求伪造攻击)
前端·csrf
网络安全-海哥2 个月前
Web安全深度实战:从漏洞原理到防护方案
sql·web安全·网络安全·xss·csrf·漏洞挖掘·安全防护