ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Toddler's Bottle] 4번.[flag]
    $ 시스템 해킹 $/pwnable.kr 2018. 11. 30. 22:33

    이번시간에 풀어볼 문제는 www.pwnable.kr 4번째 문제 [flag]입니다.

    키워드를 한번 뽑아보면 packed // reversing // need binary

    리버싱을 이용해야 하는 문제인거 같네요

    일단 url 이용해서 다운로드를 받아줍니다.

    그리고 파일이 무엇인지 확인합니다.

    실행했을때 힌트를 받을수도 있기 때문에 실행파일로 바꿔 봅시다.

    실행파일로 바뀌었다는 알수 잇습니다.

    실행을 한번 해보겠습니다

    malloc() (동적할당) strcpy 그리고 flag 그곳에 둘것이니 가져가라 라는 뜻같네요

     

    파일 분석을 한번 해보면..

    그냥 ELF형식의 64비트라는것을 알수 있네요. 32비트가 아니라는것은 알수 있었습니다.

     

    그러면 이제 gdb 이용해서 리버싱을 한번 해보겠습니다.

    gdb 들어왔는데 잠시 설정 좀 먼저 하겠습니다.

     set disassembly-flavor intel 해주는 이유는 설정을 안하면 기본적으로 default값인 at&t 어셈블리어를 사용하여 표시해 줍니다

    하지만 저같은 경우에는 intel 어셈블리어로 공부를 해서 다음과 같은 설정을 하는 것입니다.

    개개인에 따라서 하셔도 되고 안하셔도 되는 부분입니다.

     

    이제 진짜 실행을 해보겠습니다.

    아…?  Unpack 해줘야 하는 파일인가 보네요.

     gdb 나가는 방법은 quit 입니다.

    Unpack 하는 방법은 다음과 같습니다.

     

    다시 gdb 들어가서 disassemble main 해봅시다.

    물론 코드를 이해해도 되지만

    <+13> <puts> 입력

    <+23> <malloc> 동적할당

    <+32> 주석으로 #0x6c2070 <flag>

    이렇게 보여주네요

     

    malloc다음 코드 mov rdx,QWORD PTR [rip+0x2c0ee5]에 주목해 봅시다. 메모리에 저장되어 있는 값을 한번 확인해 봐야겠습니다.

     

    0x6c2070 flag 있는것 같으니 한번 확인해 보겠습니다.

     

    메모리 검사라고 해서

    형식 : x/"범위""출력형식""범위의 단위""메모리주소 또는 함수명"

    범위 : 범위의 단위 * 범위 byte 출력

    출력 형식 : x(16진수),s(문자열), l(명령어)

    범위의 단위 : b(1byte), h(2byte), w(4byte), g(8byte)

      있습니다.

     

    일단 0x6c2070 참조하는 메모리가 있는지 확인해 볼게요.

    Flag 0x00496628 있나 보네요

    0x00496628 있는 문자열을 출력해 보겠습니다.

    .. 드디어 flag 찾았습니다.

    다음 문자를 www.pwnable.kr 4 문제의 Flag 입력해 주면 정답입니다.

    [*참고자료*]

    http://msbang.co.kr/221214943293

    https://9chuck.blog.me/220588769618

    https://blog.naver.com/tkdldjs35/220639025435

    '$ 시스템 해킹 $ > pwnable.kr' 카테고리의 다른 글

    [Toddler's Bottle] 5번.[passcode]  (0) 2018.12.02
    [Toddler's Bottle] 3번.[bof]  (0) 2018.12.01
    [Toddler's Bottle] 2번.[collision]  (0) 2018.11.29
    [Toddler's Bottle] 1번.[fd]  (0) 2018.11.29

    댓글

Designed by Tistory.