[GXYCTF2019]禁止套娃-使用无参数读文件

ops/2024/10/18 22:29:41/

点开靶场

发现源码、以及抓包啥都看不出来

用dirsearch扫描发现是git源码泄露,用githack获取源码

查看源码发现最终目标要执行@eval($_GET['exp'])

要执行eval就要通过这些正则,第一个正则匹配不分大小写的php伪协议之类的

重点是第二个正则 

preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])

大概意思是传递的值是字符串a-z跟上(),然后就会被替换为空,(?R)?的意思是递归匹配。

递归完之判断是否只有;,成立则传进去的 exp 就会被 eval 执行。

举个例子:

a(b(c()));这样的就可以用,反之a('b','c')带有参数的就不能使用。

所以要构造无参数的函数进行命令执行

无参数任意文件读取:查看当前目录的文件名

        ?exp=print_r(scandir(pos(localeconv())));

scandir('.');可以用来查看当前目录所有文件名
问题是不能有参数,所以就要想办法来构造这个"."

ocaleconv()返回一包含本地数字及货币格式信息的数组。而数组第一项就是"."

pos()别名current()返回数组中的单元,默认取第一个值;所以pos(localeconv())就会返回数组的第一项且这个第一项刚好就是我们需要的"."

chr(46)也就是字符"."

所以也可以构造46;chr(current(localtime(time()))): 第一个值每秒+1,最多60秒可以得到46

hebrevcl(crypt(arg))可以随机生成一个hash值。第一个大概率是$,小概率是"."

print_r(scandir(chr(ord(hebrevc(crypt(time()))))));多刷新几次一定也能出

最后查看到flag在倒数第二个

再就是如何去读倒数第二个文件

array_reverse() 以相反的元素顺序返回数组;反过来之后flag就在第二个位置了。

next()j将数组中的指针向前移动一位;那么加上next指针就会指向flag了

再利用show_source()把flag读出来

?exp=show_source(next(array_reverse(scandir(current(localeconv())))));


http://www.ppmy.cn/ops/94332.html

相关文章

JsonUtility和JsonConvert.DeserializeObject

文章目录 JsonUtility 和 JsonConvert在字符串转类型时的不同总结 JsonUtility 和 JsonConvert在字符串转类型时的不同 不同: JsonUtility.FromJson要转的字符串内不能有注释的字符串 但JsonConvert.DeserializeObject要转的字符串里可以有 原因:. Jso…

登录过程记录

过程: 未登录状态打开我的消息页-》调用后端接口查询登录状态->后端接口从cookie里拿lt,判断是否登录-》未登录,携带页面链接(我的消息)跳转passport【单点登录服务】 登录页-》输入验证码提交后-》验证成功-》根据用户信息生成票据-》携带票据和我的…

SpringBoot 自动配置(Condition)

一.Condition Condition 是在Spring 4.0 增加的条件判断功能,通过这个可以功能可以实现选择性的创建 Bean 操 作。 案例:需求1 在 Spring 的 IOC 容器中有一个 User 的 Bean,现要求: 1. 导入Jedis坐标后,加载该Bean…

【Rust光年纪】Rust 官方提供的关键工具概览:代码检查、格式化和依赖管理

提升 Rust 项目质量和安全性:掌握官方工具的核心功能和使用方法 前言 Rust 作为一种系统编程语言,拥有强大的性能和内存安全特性。然而,随着项目规模增长,代码检查、格式化和依赖管理等工作变得更加重要。因此,Rust …

线程和进程的关系

计算机是如何运行的?CPU 操作系统 进程管理 CPU 多核心 充分利用-> 并发编程,并发执行就算分时复用, 包括多进程编程。 多进程编程进程太重,创建进程,销毁进程开销比较大 ,不利于频繁创建销毁进程&…

Linux装ifort环境

下载完成之后,需要解压文件 t tar zxvf IPSXE2020u4Linux.tgz 解压完成之后进入文件夹,我们使用GUI界面安装。 键入./install_GUI.sh 启动安装程序 收集用户信息,选择同意或者不同意都可以 这一步需要等待十几秒 核验不通过 这是缺少运行程…

Android14之解决编译libaaudio.so报错问题(二百二十七)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列…

Elasticsearch 综合搜索案例解析

Elasticsearch 是一个功能强大的搜索引擎,它不仅支持全文搜索,还提供了排序、分页、高亮显示等多种搜索结果处理功能。通过综合使用这些功能,我们可以构建出丰富而高效的搜索应用。本文将通过一个具体的案例,介绍如何在 Elasticse…