Tổng hợp write-up cuộc thi CTF WhiteHat Play ! 11 - Summer race

WhiteHat Team

Administrators
Thành viên BQT
09/04/2020
85
553 bài viết
Tổng hợp write-up cuộc thi CTF WhiteHat Play ! 11 - Summer race
Cuộc thi CTF WhiteHat Play ! 11 đã chính thức kết thúc vào 15h00 ngày 27/06/2022. BTC xin cám ơn các member đã cháy hết mình cùng cuộc thi và xin chúc mừng các “chiến thần” đã đạt giải của mùa Play này!

whitehatplay11.png

WhiteHat Play ! 11 có tổng cộng 45 đề thi thuộc các lĩnh vực: Forensic, Crypto, RE, Pwn, Web, Misc, OSINT. BTC mở topic này để các player chia sẻ write-up cho các bạn thành viên cùng tham khảo nhé ;)

Đặc biệt, BTC sẽ dành tặng cho 03 thành viên có write-up hay và chi tiết nhất một phần quà nhỏ bảo gồm: 1 khẩu trang WhiteHat, 1 dây đeo thẻ WhiteHat và sticker WhiteHat.

Thông tin chi tiết:
  • Thời gian: từ 29/06 đến 23h59 ngày 03/07
  • Hình thức: comment ngay dưới topic này, mỗi bình luận tương ứng với 1 write-up, không giới hạn số write-up
Còn chờ gì nữa mà không nhanh tay chia sẻ ngay write-up để rinh về các phần quà của WhiteHat nào!

*Lưu ý:
  • Chỉ những write-up gửi trong thời gian quy định mới được nhận quà từ BTC.
  • BTC sẽ liên hệ với thành viên được nhận quà qua tin nhắn/email đăng ký tài khoản trên forum WhiteHat.vn.
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  • Love
Reactions: Chu Thế Anh

web02-Paint

Description: I tried to draw the flag but there were some errors in my code so it's not been completed yet.
Flag format: WhiteHat{flag}

Solution:​

Truy cập vào site ta có thể thấy nội dung web chỉ hiển thị `|`

Sau một hồi rà quét thì nhận thấy 1 số lần load lại trang sẽ in ra các kí tự như `.` hoặc `_`

Theo gợi ý tác giả draw the flag nên có thể các kí tự này sẽ ghép lại thành 1 bức ảnh.

Viết code in content của site này nhiều lần

Python:
import requests
url='http://164.92.81.231:9010';


cookies={'PHPSESSID':'e1mb55297ns8hd2ohi0hddzi6l'}
a=''
i=500
while i>0:
    r=requests.get(url,cookies=cookies)
    a+=r.text.replace("\r\n",'')
    i=i-1
print (a)


Kết quả

1656478297402.png

FLAG: WhiteHat{p1cture_FLag}​

 
Comment

Misc02-Art​

Description​

Category: MISCELLANEOUS
The best thing about a picture is that it never changes, even when the people in it do, or when it is zoomed in Download file here: https://drive.google.com/file/d/1J7It1RTd6lSLi-nVqnbAQJn_fuA_PnPj/view?usp=sharing

Solution​

Download the file from GG Drive and extracte it, we got one file named misc02-Art.txt
1656570661076.png
Open misc02-Art.txt, there are lines of numbers
1656570701138.png
This chall is related to Art, so i guess these three numbers are RGB values.

Basic Knowledge​

We can convert from image to txt file and vice verse with convert (a tool included in ImageMagick toolsets)
Mã:
#IMG to Txt
convert misc01.jpg misc01.txt
#Txt to IMG
convert misc01.txt  misc01.jpg
1656570772574.png
Basically, the TXT file, generated from an image, needs two inputs:
  1. Width * Height (Example: 1080*720 pixels)
  2. RGB Values (each pixel)
Pillow is a nice tool for converting these raw materials to Image. I found this code byGoogling
Python:
#Constructing the required byte data is trivial with the bytes constructor
img_bytes = bytes([R1, G1, B1, R2, G2, B2,..., Rn, Gn, Bn])

#And then we can create an Image like so:
im = Image.frombytes("RGB", (width, height), img_bytes)
So, we need a list of bytes (RGB values) and width*height to retrieve the original image.

Step 1: Finding the original image​

First, the file misc02-Art.txt got 238183 lines
1656570927598.png
So we need to find all possible cases of A and B (width*height) that:
A * B = 238183
Write a Python Script for this step, the code explains itself
Python:
from colorsys import hsv_to_rgb
from PIL import Image

#Read all RGB values  from file misc02-Art.txt
lines=[]
with open('misc02-Art.txt','r') as f:
    lines=f.readlines()
list_bytes=[] #[R1, G1, B1, R2, G2, B2,..., Rn, Gn, Bn] integer
#Process for a list of RGB value bytes
for line in lines:
    #line :'240-255-222'
    line=line.split('-') #line =['240','255','222']
   
    list_bytes.append(int(line[0]))
    list_bytes.append(int(line[1]))
    list_bytes.append(int(line[2]))

img_bytes = bytes(list_bytes)
#Find the right image resolution and generate Image to folder /images/
# 238183
for i in range(1,119092):
    if 238183 % i == 0:
        print('found ' +str(i) + ' and ' + str(238183/i))
       
        # Convert list to bytes

        img = Image.frombytes('RGB', (i, int(238183/i)), img_bytes)
        img.show()
        img.save('images/'+str(i)+'.png')
Run the step 1 script. Maybe 367*649 is the right resolution
1656570992993.png

It automatically open the result images, the right one is:
1656571013526.png

That’s a Pastebin link which one character is hidden
pastebin.com/H6nid{x}QB

Finding the right Pastebin link​

Access a non-exist patesbin got result
1656571079618.png
Simply write another script to bruteforce it.
Python:
import requests )
ret=''
for i in '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ':
    url = '<https://pastebin.com/H6niD'+i+'QB>' # url of paste
   
    print(url)
    r = requests.get(url,verify=False)
    content = r.text 
#Ignore if 'no longer' exists in content
    if  'longer' not in content:
        print(content)
Run the step 2 script and got Flag
1656571117032.png


KẾT QUẢ:
Flag: WhiteHat{Ph4n_thu0ng_cu4_b4n_l@_1_Ch1ec_n0n_k1_D13u}
 
Chỉnh sửa lần cuối:
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  • Love
Reactions: WhiteHat Team
Comment

re01-WhiteHatPlay11v1

Description: This program seems to be broken, everything I enter is wrong. Pls help me
Password: wargame
Flag Format: WhiteHat{flag}

Solution:
File WhiteHatPlay11v1.exe
Xem thông tin trong IDA Pro:

1656579190030.png


Hàm main():

Hàm mã hóa key nhập vào

1656579202609.png


Chú ý hàm trong thread

1656579214392.png


1656579221686.png


Ý đoạn code check key chính

+ Sleep 1000 giây

+ nếu > 1000 giây -> biến check sẽ bằng 0 -> giải mã key đúng và so sánh với key nhập vào đã mã hóa

1656579247612.png




Debug:

Trace vào hàm main()

1656579254313.png


Nhảy tới địa chỉ hàm được tạo trong thread

1656579264215.png


1656579270233.png


Đặt breakpoint tại đây

1656579276026.png


Sửa jne -> je để bỏ qua bước check điều kiện sleep 1000 giây

1656579284538.png


Nhập key bất kỳ

1656579291830.png


Chạy tiếp chương trình để giải mã key đúng

1656579299437.png


Key đã nhập và key đúng:

1656579310320.png


= > Flag: Whit3H4t11H4v34N1C3D4yR3VeRs31!
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Description: We have just received an urgent text message from a girl saying: "Please save me. I am being kidnapped. I'm so afraid. My phone has no internet connection, this is the only wifi available" with a screenshot attached. We tried to get back in touch after that message but weren't be able to. Perhaps the kidnapper found out and confiscated her phone. Her life is in danger, follow the clues and help us to find out where she is.

Download file: https://drive.google.com/file/d/1D45v18RoNEbw7A1kQcW3--kf18SOA8Sz/view?usp=sharing

Gợi ý Challenge: Flag is in the sky and encrypted using Vigenere cipher

Solution:
Đề bài chỉ cho 1 bức ảnh có tên của 1 cái Wifi, mình đã thử xem Exif, Steg của bức ảnh nhưng không có gì.
Lên gg search: How to find location of Wifi
Thì mình đã tìm được tool Wigle[.]net để có thể tìm ra vị trí của 1 Wifi. Truy cập vào Website thì mng phải lập một tài khoản thì mới có thể sử dụng được các chức năng. Sau đó truy cập vào wiggle[.]net/mapsearch và nhập "De4d pl4ce" vào thanh tìm kiếm SSID/Network name. Vì mình nghĩ là đề sẽ ra ở khu vực Hà Nội nên kéo bản đồ lên Hà Nội thì thấy được vị trí Wifi:
Screenshot (51).png

Mình đoán lụi nên mới dùng bằng cách này nếu mà không đoán được kiểu này thì có thể truy cập: wigle[.]net/search để có thể tìm ra chính xác toạ độ của wifi.
Sau khi được cung cấp vị trí thì mình lên GG Maps để check và căn cứ vào điểm mốc chính là: Nhà Tù Hoả Lò
Screenshot (52).png

Dùng chế độ Street View để xem và với hint ở đề bài : "Flag is in the sky" thì khi kéo bức ảnh lên trời ta thấy được một dòng chữ bị bẻ cong:
Screenshot (53).png

Tải ảnh 360 này về ta sẽ đọc được dòng chữ đó :
unnamed.jpg

FpfzjWdw{Rwhwvsxxvm_fy_fazdxu_orv_cihc_wc_cmpw_phicd_sf}
Dùng tool để decode Vigenere cipher với KEY : JixgfPddzcVKRbEp
(là một nửa tên của người chia sẻ bức ảnh trên gg map)
=> Lụm tiền
Screenshot (54).png

Flag: WhiteHat{Summertime_is_always_the_best_of_what_might_be}
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment

Writeup re02-WhiteHatPlay11v2


Dllmain:

1656921333524.png


Ý nghĩa của DllMain:

Kiểm tra tên tiến trình đang load
Chuỗi base64 so sánh:
1656921393367.png

1656921399562.png

Vào hàm export "WhiteHat" của dll:
1656921489049.png


Nhập thử flag
1656921509198.png



Ở đây so sánh độ dài chuỗi nhập vào với 0x28 = 40
1656921520771.png

Vì vậy cần vượt qua điều kiện này, nhập vào >= 41 ký tự
1656921559306.png

Đoạn này thấy base64 = @2022
1656921588745.png

Nhập lại flag:

1656921599689.png

1656921615909.png


Trace tiếp
1656921688527.png

Bypass các chỗ check bằng cách sửa thanh ghi hoặc sửa vùng nhớ
1656921708376.png

Đoạn sau này check 2 điều kiện, ta cần bypass:
1656921725466.png

Sửa dword = 0
1656921738343.png

Sửa esi = 0x29
1656921752690.png


1656921764927.png

1656921773860.png

1656921786574.png

Vùng nhớ chứa flag đúng
1656921804342.png

Thuật toán để giải mã flag

1656921821407.png

Flag => Whit3H4t11S0L1v34LifeY0uW1llR3memB3r@2022
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Thẻ
ctf wargame whitehat play ! 11 write-up
Bên trên