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传参。

相关推荐
无盐海4 天前
CSRF漏洞攻击(跨站请求伪造攻击)
前端·csrf
网络安全-海哥4 天前
Web安全深度实战:从漏洞原理到防护方案
sql·web安全·网络安全·xss·csrf·漏洞挖掘·安全防护
牢七6 天前
Csrf4
csrf
white-persist8 天前
CSRF 漏洞全解析:从原理到实战
网络·python·安全·web安全·网络安全·系统安全·csrf
携欢12 天前
PortSwigger靶场之 CSRF where token is not tied to user session通关秘籍
前端·csrf
携欢12 天前
PortSwigger靶场之CSRF where token validation depends on request method通关秘籍
安全·web安全·csrf
携欢13 天前
POrtSwigger靶场之CSRF where token validation depends on token being present通关秘籍
前端·csrf
唐古乌梁海25 天前
Flask项目中CSRF Token实现的解决方案
python·flask·csrf
汉堡包0011 个月前
【靶场练习】--DVWA第三关CSRF(跨站请求伪造)全难度分析
前端·安全·csrf