type
status
date
slug
summary
tags
category
icon
password
[NewStarCTF 2023 公开赛道]R!!C!!E!!

叫我们找到一些泄露信息,一说到这个第一反应就是看看F12有没有泄露什么,不然就抓包看看,再者目录爆破一手
爆破出了三个,看目录估计是.git仓库泄露了

.git是 Git 仓库的元数据目录,里面包含了所有提交记录、分支、配置等关键信息。
- 一旦这个目录暴露在 Web 服务器上(如
http://example.com/.git/可访问),就可以通过抓取和还原整个代码仓库。
- 访问
.git/config→ 确认是 Git 仓库
- 下载
.git/HEAD→ 得到当前分支,比如ref: refs/heads/main
- 下载
.git/refs/heads/main→ 获取当前分支最新提交哈希
- 下载
.git/objects/xx/yyyyyyyy...→ 通过提交哈希下载 blob/tree/commit 等对象
- 本地还原为源码(借助
git命令或工具)
访问
.git/refs/heads/main获取到分支提交的哈希值
8dfa5ac196862ac027e3fd40e11ff4731957c20a既然它泄露了.git仓库,那我们就可以下载该源码:
git clone https://github.com/lijiejie/GitHack.git

成功获取源码
bo0g1pop.php
正则解释:
部分 | 含义 |
[^\W]+ | 匹配 字母或数字组成的标识符(函数名) |
\( | 匹配左括号 ( |
(?R)? | 递归:允许函数调用嵌套(如 a(b(c()))) |
\) | 匹配右括号 ) |
if (';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['star'])) 最后记得加上
;号同时过滤黑名单,最后如果前两个条件满足,就直接
eval 你构造的代码剩下的就是思考怎么构造一个绕过waf的payload了:
bo0g1pop.php?star=die(getcwd());
可以看到回显目录

始终构造不出绕过waf的payload的
看了博主的wp才做出来,但是也不是很懂
多发送几次 就有了


[NewStarCTF 公开赛赛道]So Baby RCE
wc,第一反应好淳朴的RCE,就是要求我们绕过黑名单而已,试试
尝试编码绕过,发现一次编码还是被waf了,二次编码不认
PHP的
system函数和Web服务器处理URL编码的参数。通过URL传递参数时,Web服务器或PHP通常会对这些参数进行URL解码,将它们转换为相应的字符
也就是我们进行一次编码
发现第一次编码后进行核心思路是通过变形、编码、替换来绕过过滤规则
使用操作符&&衔接(&&也要进行编码绕过,不然浏览器/服务端把
& 当成 URL 参数分隔符)
Bash 变量替换规则:
${1}在 Bash 中表示第一个位置参数(类似 Python 中的sys.argv[1])
- 如果当前环境中没有定义
1变量,Bash 会将${1}替换为空字符串
- 例如:
echo a${1}b→ 如果1未定义,则输出ab
借用这种bash变量替换规则:
进行绕过:payload:
?cmd=cd${IFS}..%26%26cd${IFS}..%26%26cd${IFS}..%26%26c${1}at${IFS}ffff${1}llllaaaaggggg
- 作者:zhiles小屋
- 链接:https://tangly1024.com/article/22222e55-9ee8-80f2-bfec-e6b2f6f87b2a
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
