(writeup) Hero CTF 2023
PWN
Appointment Book (solved)


- có cả hàm cho ta shell nhưng bị ẩn

- ở option1 đơn giản là liệt kê ra các appointment
- ta cần khai thác ở option2

- cấp phát bộ nhớ cho biến s và v4
- có lỗi out_of_bound ở đây
- ta có thể nhập vào số âm (hiện tại chưa biết nên nhập bao bnhieu nên nhập đại -10)
- biến v5 sẽ được gán địa chỉ của &appointment + 16 * v2
- rồi tới bước nhập ngày tháng năm vào biến s, sau đó gắn biến v0 cho giá trị của biến s sau khi đi qua hàm date_to_timestamp

- rồi con trỏ
*v5
sẽ dc gán giá trị v0
- cuối cùng nhập thêm 1 đoạn messages về cái appointment đó
- đưa nội dung vừa nhập đó vào vị trí địa chỉ tiếp theo của v5
- rồi free(s)
- hmmm, cho hàm lấy shell, vậy sao có shell bh…
- thì idea thế này:
-
- cho v5 là địa chỉ GOT nào đó để đến khi nào gặp hàm đó thực thi là có shell luôn (chọn puts@GOT)

thực thi puts 1 lần nữa do vòng lặp sẽ cho shell
-
- hoặc chọn exit@GOT khi mình chọn option3 thoát chương trình sẽ cho shell
-
- hoặc chọn free@GOT đều được
-
- giá trị v5 là hàm get shell
-
- giá trị được lấy từ hàm đổi ngày sang số

- có liên quan đến UNIX timestamp
- tìm kiếm ra link này

18 tháng 2 năm 1970
- vậy thì từ appointment đến puts@GOT là -12, đến free@GOT là -13, đến exi@GOT là -5
- chọn cách nào cũng dc

- lần nhập cuối cùng không quan trọng

#Hero{Unch3ck3d_n3g4t1v3_1nd3x_1nt0_G0T_0v3wr1t3_g03s_brrrrrr}
Rope Dancer



offset 16 + 8(saved rbp)

- về cơ bản thì chắc chắn sẽ làm phương pháp SYSROP
- tìm kiếm thanh ghi rax, syscall

khum có cái nào dễ dàng cả
đổi hướng: xài eax

chỉ có xor eax, eax
phù hợp để thiết lập thanh ghi

xor thôi không đủ, cần cả tăng nó lên giá trị 0xf
về syscall chắc chắn có

- thông qua hàm if nhờ lần nhập đầu là 'yes\n'
- lần nhập thứ 2 yêu cầu là gmail, tức là miễn chỉ cần có byte '@' (tức là byte 0x40) là thoả mãn

nếu không là exit chương trình
- lần nhập 3 có thể là sigreturnframe
- idea:
– ghi '/bin/sh' vào 1 địa chỉ ghi được, đồng thời địa chỉ đó có byte '@'


duoc lun nek kkkk
nhưng ta cần địa chỉ đó nằm ở rbp

thấy gadget này hợp lí hơn, chỉ cần byte ghi đè saved rbp là địa chỉ đó là được
- về cách set rax về 0xf, mình có xor_inc_ret rồi
- tức là xor về 0, inc lên 1 rồi ret
- vậy ta cần inc_ret thêm 14 lần thành 0xf=15

Hero{1_w4nN4_b3_4_ROP3_D4nC3r_s0_b4d!!!}
PROG
Math Trap (solved)
- đây là bài tính toán đơn giản
- chỉ thấy những phép toán + - * /
- sử dụng framework pwntool để nhận chuỗi
- lồng hàm if để kiểm tra rồi tính phép toán phù hợp
- do là wu hơi trễ nên k có hình kkkk =))))
- script:
Hero{E4sy_ch4ll3ng3_bu7_tr4pp3d}