1
2
KCSC - TTV challenge
Tiến độ: 7/8

chall2 (Showdown)

Đầu tiên mình có 1 ảnh .png nên mình dùng zsteg và pngcheck thì không thấy có gì đáng nghi

Sau đó mình mở ảnh và thấy có ảnh gái anime ẩn đằng sau

Do đó nên mình sẽ dùng stegslove hoặc Aperi để tìm

Flag: KCSC{Th3_uNs3n_bL@de_1s_the_D34dL1357}


chall3 (Ping Flood)

Bài này mình có 1 file pcapng cần phân tích để tìm lưu lượng độc hại do bị tấn công DDoS Đầu tiên mình nghĩ ra cần phải tìm ra ip của kẻ tấn công để từ đó tìm hiểu xem máy chủ bị gửi đến thông tin gì nhưng sau đó mình vô tình tìm được 2 dấu ==”=”== ở cuối nên mình cho rằng đây là thông tin bị mã hóa bằng base64 icmp.type == 8 (filter theo request)

Tiếp đến mình thêm cột ==code== vào để xem ký tự

Đây là ký tự trong bảng mã ASCII và mình cần làm ở đây là xuất cột code này ra và chuyển về bẳng mã ASCII

Mình dùng lệnh tshark để xuất ra sau đó chuyển sang mã ASCII tshark -r traffic.pcap -Y "icmp.type == 8" -T fields -e icmp.code \ | awk '{if($1>=32 && $1<=126) printf "%c",$1; else printf "."} END{print ""}''

Sau đó giải mã nó bằng base64

Flag: KCSC{(^..)=^..^=(._.^)}


chall4 (Aidoru)

Để tìm file đã bị xóa mình tìm trong các mục lưu trữ nhưng không thấy gì Sau đó thì mình chú ý thấy có file ==NTUSER.DAT== đây là file lưu lại các hoạt đôgnj gần đâu của user nên mình thử phân tích file này Mình dùng ==registryspy== duyệt đến NTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs

Tại đây mình thấy có các Value mình thử giải mã từng Value thì thấy tại Value 0 giải mã được windowsdefender—.lnk Sau đó mình thử tìm xem đường dẫn này dẫn tới file nào Users/admin/AppData/Roaming/Microsoft/Windows/Recent/

Nhưng trớ trêu thây chả có file .txt hay .exe hay bất cứ file nào cả Vậy nên mình dùng biện pháp mạnh hơn là xem lịch sử web sqlite3 "$DB"

1
2
.headers on
.mode column
1
2
3
4
5
6
7
8
9
SELECT
downloads.current_path AS target_path,
datetime((downloads.start_time/1000000)-11644473600,'unixepoch') AS started_utc,
downloads.received_bytes,
downloads.total_bytes,
downloads_url_chains.url AS source_url
FROM downloads
LEFT JOIN downloads_url_chains ON downloads.id = downloads_url_chains.id
ORDER BY downloads.start_time DESC;

Ấy chà thì ra là ==Chỉ Quạt== mình đoán đây không phải là lỡ tay xóa mà là xóa rồi sau đó muốn tìm lại để xem hehe:3

Flag: KCSC{Onlyfans_leak.zip}


Mình có Password của file zip là aHR0cHM6Ly95b3V0dS5iZS9qRVRIdlpQYUFBRQ== sau khi giả mã bằng base64 thì được https://youtu.be/jETHvZPaAAE (đây là video hoạt ảnh nộ của nhân vật 4 sao Barbara trong Genshin Impact)

chall5 (Suspicious)

Đầu tiên giải nén file zip thì mình có được file .ad1 với hint ==malware persistence== nên mình dùng công cụ FTK imager để mở file và phân tích

File .ad1 này chỉ chứa 1 phần của bộ nhớ như User và Windows Tiếp đến mình kiểm tra các nơi có khả năng chứa malware Đầu tiên là phần Users C:\Users\admin\AppData\Roaming\Microsoft\Windows\Start Menu\Program\Startup

Trong temp có mục khả đắng nghi là ==Setupexe== nhưng trong temp bị reboot sẽ bị xóa hết nên không thể nằm trong này C:\Users\admin\AppData\Local\Temp

Nhưng đều không tìm thấy malware Tiếp theo mình thử tìm kiếm trong Windows C:\Windows\System32\Tasks

Tại đây có điểm khả nghi đó là ==npcapwatchdog== nên mình export ra rồi xem XML

Mình thấy có dòng <Command>C:\Program Files\Npcap\CheckStatus.bat</Command> đây rất có thể là malware cần tìm vì khi máy khởi động sẽ gọi tới đường dẫn trên Chuyển tên file sang Sha256

FLag: KCSC{flag_2fdd0e210a7617f021572ec5c057b4966fb0cec74d7daadb59cb5541cb9d721e}


chall6 (BabyStego)

Đầu tiên là kiểm tra file và nội dung babystego exiftool babystego

Có vẻ như header của file bị sai Sau đó mình đọc header của file để xem sai ở đâu xxd babystego | head

Và mình thấy header của file bị sai ở 8 byte đầu và hình như các chunk khác cũng có gì đó không đúng mình nhớ IHdR là viết hoa toàn bộ mà sao ở đây lại có chữ thường trông rất khả nghi Trước tiên mình sửa 8 byte đầu bị sai cái đã rồi tính tiếp hexedit babystego

Ok vậy là sữa xong header nhưng ảnh vẫn chưa hiện vậy là có lẽ có thể liên quan tới chunk hồi nãy bị viết thường

Mình định sữa thủ công chunk bị sai nhưng mình thấy mất thời gian với lỡ tay nhập lộn 1 ký tự cái là ancut luôn nên mình nhờ chat viết script cho an toàn python3 as.py babystego flag.png

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
64
65
66
67
import sys, zlib, struct

CANON = {
b'IHDR', b'PLTE', b'IDAT', b'IEND',
b'bKGD', b'cHRM', b'gAMA', b'hIST', b'iCCP', b'iTXt',
b'pHYs', b'sBIT', b'sPLT', b'sRGB', b'tEXt', b'tIME', b'tRNS',
b'eXIf',
}

PNG_SIG = b"\x89PNG\r\n\x1a\n"

def canonicalize(ctype: bytes) -> bytes:
"""
Trả về type 'chuẩn' khớp theo chữ cái (không phân biệt hoa/thường).
Nếu không khớp bất kỳ tên chuẩn nào, giữ nguyên ctype.
"""
for t in CANON:
if ctype.upper() == t.upper():
return t
return ctype

def fix_png(in_path: str, out_path: str):
data = bytearray(open(in_path, "rb").read())

if data[:8] != PNG_SIG:
data[:8] = PNG_SIG

i = 8
total = len(data)
fixed = 0

while i + 8 <= total:
if i + 8 > total:
break
# length + type
length = struct.unpack(">I", data[i:i+4])[0]
ctype = bytes(data[i+4:i+8])
data_start = i + 8
data_end = data_start + length
crc_pos = data_end
if crc_pos + 4 > total:
break

new_type = canonicalize(ctype)
nt = bytearray(new_type)
nt[2] = bytes([nt[2]]).upper()[0]
new_type = bytes(nt)

if new_type != ctype:
data[i+4:i+8] = new_type

new_crc = zlib.crc32(data[i+4:data_end]) & 0xffffffff
data[crc_pos:crc_pos+4] = struct.pack(">I", new_crc)
fixed += 1

i = crc_pos + 4
if new_type == b'IEND':
break

open(out_path, "wb").write(data)
print(f"[+] Done. Wrote: {out_path}. Chunks processed: {fixed}")

if __name__ == "__main__":
inp = sys.argv[1] if len(sys.argv) > 1 else "babystego"
outp = sys.argv[2] if len(sys.argv) > 2 else "babystego_fixed.png"
fix_png(inp, outp)

Chạy xong mình sẽ được 1 ảnh PNG Xem ảnh để lấy flag

Flag: KCSC{Ch40_M|_|n9_D3N’_V01’_77/_KCSC}`


chall7 (NiceJop from niceComp)

Vì đây là file dmp nên trước tiên mình kiểm tra xem đây là memory của windows hay linux Mình dùng file và exiftool nhưng không thấy gì

Nên mình đọc header thử xem có gì không

Vậy đây là là dmp của linux Kiểm tra phiên bản và kernel linux

1
vol -f memory.dmp banners.Banners

Tải symbol table phù hợp về và build (Doạn này nhờ chat chỉ miễn sao tải đúng bản mình kiểm tra và build chạy là được) Liêt kê danh sách các chương trình có trong memory

1
vol -f memory.dmp --symbol-dirs=./symbols linux.pslist

Phát hiện có SSH tại pid 2054 và GUI tại pid 1913 và có cả sftp-server Tiếp theo mình kiểm tra cây quan hệ

1
vol -f memory.dmp --symbol-dirs=./symbols linux.pstree

Thì phát hiện ra sftp-server được sinh ra từ sshd và có hành dộng gửi file Kiểm tra lịch sử nhập lệnh trên terminal

1
vol -f memory.dmp --symbol-dirs ./symbols linux.bash.Bash

Và mình thấy có lệnh rm -rf .bash_history (xóa lịch sử) và sudo ./avml memory.dmp (tạo bộ nhớ) Kiểm tra xem có tiến trình nào đang mở tại các pid mà mình nghi ngờ Pid 2047

1
vol -f memory.dmp --symbol-dirs ./symbols linux.lsof.Lsof --pid 2047

Pid 1913

1
vol -f memory.dmp --symbol-dirs ./symbols linux.lsof.Lsof --pid 1913

Pid 2054

1
vol -f memory.dmp --symbol-dirs ./symbols linux.lsof.Lsof --pid 2054

Kiểm tra biến môi trường Pid 2047

1
vol -f memory.dmp --symbol-dirs ./symbols linux.envars.Envars --pid 2047

Mình thấy được SSH_CONNECTION = 10.0.0.1 32259 10.0.0.27 22, LOGNAME = lucius, PWD = /home/lucius, SSH_CLIENT = 10.0.0.1 32259 22 Pid 1913

1
vol -f memory.dmp --symbol-dirs ./symbols linux.envars.Envars --pid 1913

Pid 2054

1
vol -f memory.dmp --symbol-dirs ./symbols linux.envars.Envars --pid 2054

Kiểm tra bản đồ bộ nhớ của 3 pid Pid 2047

1
vol -f memory.dmp --symbol-dirs ./symbols linux.proc.Maps --pid 2047

Pid 1913

1
vol -f memory.dmp --symbol-dirs ./symbols linux.proc.Maps --pid 1913

Pid 2054

1
vol -f memory.dmp --symbol-dirs ./symbols linux.proc.Maps --pid 2054

Sau khi ttổng hợp lại thông tin mình tháya tại pid 2047 có đoạn

Đây chính là vị trí vùng stack Kiểm tra xem trong pid 2047 có tồn tại file zip không

1
vol -f memory.dmp --symbol-dirs ./symbols \ linux.vmaregexscan.VmaRegExScan --pid 2047 --pattern 'PK\x03\x04'

Mình tìm thấy header của file zip tron sftp-server tại địa chỉ 0x7ffe99e75f10 Nên mình sẽ dump toàn bộ VMA của pid 2047

1
2
vol -f memory.dmp --symbol-dirs ./symbols \
-o vma_out linux.proc.Maps --pid 2047 --dump

Tính vị trí header 0x7ffe99e75f10 - 0x7ffe99e6a000 = 0xBF10 = 48912 Sau đó thì từ vị trí đó mình cắt và xuất ra thành file bin

1
tail -c +$((48912+1)) vma_out/pid.2047.vma.0x7ffe99e6a000-0x7ffe99e8b000.dmp > zip_from_header.bin

Mình kiểm tra xem header có đúng chuẩn là file zip chưa

1
hexdump -C -n 64 zip_from_header.bin

Ok vậy là chuẩn r Đã có đầu thì phải có đuôi nên mình sẽ tìm vị trí kết thúc của file zip

1
LC_ALL=C grep -obaP "\x50\x4B\x05\x06" zip_from_header.bin | head -n1

Để cho chắc mình kiểm tra xem có comment length ở cuối không

Từ những dữ liệu mình tính nãy giờ thì mình có được như sau 7176 + 22 + 0 = 7198 byte Có đủ đầu đuôi rồi thì mình cắt lấy khúc giữa nữa thôi là xong

1
dd if=zip_from_header.bin of=recovered.zip bs=1 count=7198 status=none

Vậy là mình có được file zip chứa flag

Siêu cấp chú ý: kiểm tra xem file flag bên trong có đủ hay không

Như hình là ok chứ đừng như mình xuất ra mà file png rỗng làm mình tưởng đây là lừa nên quằn mất cả đống thời gian

Crack mật khẩu

1
2
zip2john recovered.zip > zip.hash
john --wordlist=rockyou.txt zip.hash

Giải nén file zip với pass infected Đọc flag

Flag: KCSC{w3ll_d0n3_y0u_go7_my_secr3t_n0w}


chall8 (Malicious intern)