ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Pwn] RTL_Core
    CTF write_up/Hack CTF 2019. 9. 24. 11:12

    문제를 확인해 보겠습니다.

     

    딱히 봐야 하는 보호 기법은 없는 것 같습니다.

     

    실행을 해보면 아래와 같습니다.

     

    passcode를 입력해 달라고 하네요!

     

    IDA 32bit로 열어서 분석해 보겠습니다.

     

    main함수 디컴파일 코드 입니다.

    gets로 s변수에 입력을 받고 해당 변수와 hashcode 값과 비교를 합니다.

     

    hashcode값은 아래와 같습니다.

     

    hashcode = 0xC0D9B0A7 = 3235492007 입니다.

     

    입력한 s변수가 check_passcode함수의 인자로 들어가기 때문에 코드를 확인해 보겠습니다.

     

    4바이트 단위로 주소를 받아서 입력하는것으로 보아 아래와 같이 값을 받아오는것 같습니다.

     

    i = 0  ->  a1+0x0

    i = 1  ->  a1+0x4

    i = 2  ->  a1+0x8

    i = 3  ->  a1+0xC

    i = 4  ->  a1+0x10

     

    의 형식으로 값을 받아 오기 때문에 결국에는 다음과 같은 연산으로 값을 비교합니다.

     

    [a1+0x0]+[a1+0x4]+[a1+0x8]+[a1+0xC]+[a1+0x10] == 0xC0D9B0A7

     

    그렇기 때문에 저 값을 5로 나누고 남은값을 추가해서 나타내 보면 다음과 같은 payload를 만들 수 있습니다.

     

     

    분기를 해결하고 core함수로 들어갔습니다.

     

    여기서 봐야할 것은 dlsym함수로 printf 함수의 real 주소를 출력해 준다는 것이고, read로 buf에 입력을 받습니다.

     

    하지만 여기서 주의 깊게봐야할 점은 아래와 같습니다.

     

    0xf7de5020 != 0xf7d88020 이라는 것입니다.

    ASLR이 걸려 있어서 주소 값이 매번 달라집니다.

     

    그래서 문제를 줄때 libc.os.6파일을 같이 준것 같습니다.

     

    해당 서버의 환경과 로컬에서의 환경과는 주소값이 다르기 때문에 libc.os.6 파일을 제시해 준것 입니다.

     

    미리 libc = ELF("./libc.os.6") 코드를 이용해서 미리 import 해두었습니다.

     

    우리가 필요한 자료는 아래와 같습니다.

    1. system의 offset

    2. system의 real address

    3. printf의 offset

    4. /bin/sh 문자열의 real address 

     

    가 필요합니다.

     

    일단 base_address를 구해야 하기 때문에 printf_address - printf_offset 를 해주면 구할수 있습니다.

    base_address를 이용해서 system_address를 구해볼수 있습니다.

     

    또한 /bin/sh 문자열도 찾아야 하는데 문제 파일에는 없기 때문에 libc.os.6에 있는 주소값은 offset 이므로 

    찾을수있는 주소는 /bin/sh의 offset 입니다.

     

    offset + base_address = real_address가 되기 때문에 이를 이용해서 여기까지 코드를 작성해 보겠습니다.\

     

    그리고 마지막으로 read함수에서 buf의 크기는 다음과 같습니다.

     

    0x3E = 62 + SFP[4] = 66 이므로 66개의 dummy값을넣고 RET 자리에 system_addr을 넣습니다.

    그리고 rtl 기법을 이용해서 string("/bin/sh 문자열")을 인자로 넣어 주면 Clear를 할 수 있습니다.

     

    최종 exploit code를 작성해 보겠습니다.

     

     

    Flag : HackCTF{5ucc355ful_r7lc0r3_f1l3_4cc355}

    'CTF write_up > Hack CTF' 카테고리의 다른 글

    [Pwn] Gift  (0) 2019.10.25
    [Pwn] Look at me  (0) 2019.09.24
    [Pwn] Random Key  (0) 2019.09.24
    [Pwn] 1996  (0) 2019.09.24
    [Pwn] Beginner_Heap  (0) 2019.09.24

    댓글

Designed by Tistory.