(writeup) TJCTF'23
flip-out
Image Not Showing
Possible Reasons
- The image was uploaded to a note which you don't have access to
- The note which the image was originally uploaded to has been deleted
Learn More →
Image Not Showing
Possible Reasons
- The image was uploaded to a note which you don't have access to
- The note which the image was originally uploaded to has been deleted
Learn More →
- đây là chương trình nhập vào 1 index để in ra nội dung của vị trí đó trong stack
Image Not Showing
Possible Reasons
- The image was uploaded to a note which you don't have access to
- The note which the image was originally uploaded to has been deleted
Learn More →
- thì ta thấy chuỗi chữ 'Nothing to see here… Nothing to see here…' nó sẽ đc lưu vào biến nptr
- sau đó sẽ là các biến khác nối đuôi nhau
- flag dc lưu vào biến v18
Image Not Showing
Possible Reasons
- The image was uploaded to a note which you don't have access to
- The note which the image was originally uploaded to has been deleted
Learn More →
- vậy bài này nối chuỗi bth thôi
46 + 2 + 8*10 = 128
- hoặc nhân sinh có nghi ngờ thì thử số này lun là ra
Image Not Showing
Possible Reasons
- The image was uploaded to a note which you don't have access to
- The note which the image was originally uploaded to has been deleted
Learn More →
Image Not Showing
Possible Reasons
- The image was uploaded to a note which you don't have access to
- The note which the image was originally uploaded to has been deleted
Learn More →
- bài này chắc k cần script nhưng viết ra cho mng lun:
tjctf{chop-c4st-7bndbji}
shelly
Image Not Showing
Possible Reasons
- The image was uploaded to a note which you don't have access to
- The note which the image was originally uploaded to has been deleted
Learn More →
Image Not Showing
Possible Reasons
- The image was uploaded to a note which you don't have access to
- The note which the image was originally uploaded to has been deleted
Learn More →
256 byte biến s + 8 byte save_rbp –-> offset = 264
- chương trình sẽ in ra cho ta 1 cái stack của $rsp
Image Not Showing
Possible Reasons
- The image was uploaded to a note which you don't have access to
- The note which the image was originally uploaded to has been deleted
Learn More →
- vậy việc mình là chèn shellcode, padding đến save_rbp, rip là stack ta leak ra được để return về shellcode của ta
- vậy bài này là ret2shellcode có leak bth
Image Not Showing
Possible Reasons
- The image was uploaded to a note which you don't have access to
- The note which the image was originally uploaded to has been deleted
Learn More →
tjctf{s4lly_s3lls_s34sh3lls_50973fce}
groppling-hook
Image Not Showing
Possible Reasons
- The image was uploaded to a note which you don't have access to
- The note which the image was originally uploaded to has been deleted
Learn More →
- nhìn sơ qua source, có thể đoán rằng đây là ret2win
- tìm offset

18 bytes
- ret2win này đặc biệt có thêm kiểm tra thông qua mã lệnh asm

nhảy số 1 (jle: jump less_equal) so sánh bé hơn hoặc bằng
–-> return về EXIT
EXIT là hàm laugh (cười dô bản mặt)
nhảy số 2 (jg: jump greater) so sánh lớn hơn
–-> return về EXIT
nếu không lớn hơn sẽ jmp bình thường (jump: nhảy)
–-> return về DONE
DONE là sẽ đưa giá trị hiện tại của rax lên rsp lại
rồi nop, leave, ret bình thường
- vậy ta cần rip ta là 1 địa chỉ lưng chừng giữa 0x401262 và 0x040128a là được, nhưng vì địa chỉ 0x040128a là ret của hàm main nên ret về main sẽ tiếp tục ret
- còn lùi về 0x0401289 sẽ còn 1 lệnh
pop rbp
sẽ đưa địa chỉ ta ret tiếp theo vào rbp và sau đó exit main bình thường

- muốn lì với cách này thì payload sẽ như sau
- sau hàm check hợp ngữ asm đó nó sẽ ret 1 lần nữa nên lần này sau rip sẽ là hàm win của mình
- return 2 lần là được

tjctf{this_i#-my-questsss}


nhập 256 byte vào chuỗi s
in ra lại s –-> fmtstr
nhảy vào hàm r1 với tham số là 8 byte đầu của chuỗi s
rồi kiểm tra với hàm win

hàm này sẽ cộng cái con trỏ *xd
lên 2

AIM🎯 : xd = 0x86a693e

hàm r2 với r3 bịp thôi
- từ ida ta thấy biến xd là 1 cái heap

- con trỏ
*xd
sẽ so sánh với 0x86a693e , tức là bên trong heap sẽ so sánh với số đó

- hmmm, nhập dc có 1 lần duy nhất
- idea sẽ là ow địa chỉ khác ghi được chứa giá trị 0x86a693e vào con trỏ
*xd
(đúng hơn là 0x86a693e - 2 = 0x86a693c do còn qua hàm r1)

xd là heap, *xd
là rỗng(chưa qua hàm r1)

sau khi qua hàm r1

trong hàm win, so sánh eax với giá trị 0x86a693e

eax hiện tại : 0x2

dừng ở lần nhập
- ta chừa 5 hàng địa trống ở trên để chèn payload
- ở vị trí tô trắng đó (%11) ta sẽ bắt đầu ghi đè thành vùng nhớ ghi được, và ghi 1/2 lượng giá trị 0x86a693e
- ở vị trí tiếp theo (%12) ghi lượng còn lại vào địa chỉ ghi được ở phân vùng thấp hơn 2 (do đã ghi 2 ở trước, sẽ bắt đầu ghi tiếp nối đuôi nhau)
- ở vị trí kế tiếp (%13) sẽ ghi thành phân vùng ghi được trước đó vào biến xd (sẽ ghi rw_section đè lên cả heap)
ghi lần 3 thì phải trừ 2 lần đầu
p3 - (p2 - p1) - p1 = p3 - p2 +(p1 - p1) = p3 - p2

trước fmtstr

sau fmtstr

so sánh eax vs 0x86a693e

tjctf{f0rm4tt3d_5883cc30}
teenage-game


- bài này y hệt bài baby-game-2 hồi giải pico_ctf_23 nên coi wu bên đây hen

tjctf{so_many_new_features_but_who_will_stop_the_underflow?_47c6f204377cb18b30e68da46e9930dc}
(writeup) TJCTF'24
cowsay
%10$s

baby-heap
0x81
0x70

ring-opening-polimerization
sled