ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [pwnable.kr] Level 8 - leg
    Wargame/pwnable.kr 2023. 4. 23. 06:33
    반응형

    Level 8 - leg를 풀어보자.

     

    문제를 보면 아빠는 arm을 공부하라고 하는데, 본인은 leg를 더 선호한다고 한다.

    (study가 공부가 아닐 수도 있지만 그냥 넘어가도록 하자.)

    <leg의 문제 화면>

     

    우선 문제에서 알려준 파일들을 다운로드하기 위해 Kali에서 wget을 사용한다.

    <leg 파일 다운로드>

     

    파일을 알아보기 전에, ssh로 접속을 하여 동작을 보도록 하자.

    leg 파일을 실행하니, 문구가 출력되고 입력을 받고 있다.

    'test'를 입력하자 하나의 문장이 출력되고 나서 프로그램이 종료된다.

    <ssh 접속 후 leg 파일 실행>

     

    동작을 봤으니, ssh 접속을 종료하고 다운로드 받았던 파일들을 보도록 하자.

    먼저 leg.c 파일을 보니, key1, 2, 3의 함수가 있고 main 함수를 실행하고 있다.

    이 key 함수들은 모두 어셈블리어로 되어 있는데, 문제에서 언급한 arm 어셈블리어인 것 같다.

    <leg.c 파일>

     

    gdb로 분석을 해보도록 하자.

    <main+48>에서 r0 값을 r4에, <main+56>에서 새로 구한 r0 값을 r3에 넣는다.

    그 후 <main+60>에서 r4에 위의 두 값을 더한 값을 넣는다.

     

    그리고, <main+68>에서 새로 구한 r0을 r3에 넣고, <main+72>에서 r2에 r4와 r3를 더한 값을 넣는다.

    이것이 입력하는 key 값과 같으면 문제가 해결되는 것 같다.  

    <main 함수 gdb 분석>

     

    먼저 key1에서는 <key1+8>을 보면, r3에 pc 값을 넣고 그 값을 다시 r0에 넣는다.

    결국 pc가 무엇인지 구하면 되는 것인데, pc는 opcode가 실행될 때의 fetch 주소를 갖는다.

     

    간략하게 설명하자면 명령어가 CPU에서 실행될 때, fetch -> decode -> execute 순으로 실행이 된다.

    이 때, 여러 개의 명령어를 효율적으로 실행하기 위해 병렬적으로 명령어를 수행하게 된다.

    첫 번째 명령어의 execute 때, 두 번째 명령어의 decode가 실행되고 세 번째 명령어의 fetch가 수행된다.

    이 문제에서 key1의 pc 값은 다다음 명령어인 0x8ce4의 값을 갖는다.

     

    key2는 pc에 4를 더한 값 즉 0x8d0c의 값을 갖는다.

     

    key3은 lr의 값을 갖는다.

    함수가 끝날 때마다 bx lr이 있는 것을 볼 수 있는데, lr은 바로 return 값이라고 생각하면 된다.

    즉 key3에서의 lr 값은 key3 함수가 끝나고 난 <main+68>의 주소인 0x8d80이라는 것을 알 수 있다.

    <key 함수 gdb 분석>

     

    이제 이 세 값을 더하면 key1(0x8ce4) + key2(0x8d0c) + key3(0x8d80) = 0x1a770이 나온다.

    입력은 10진수의 정수값으로 받고 있으므로, 108400이 정답이다.

    다시 ssh로 접속해 leg 파일을 실행하고 구한 값을 입력하면 flag가 출력된다.

    <leg의 flag 확인>

    반응형

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

    [pwnable.kr] Level 9 - mistake  (0) 2023.05.07
    [pwnable.kr] Level 7 - input  (0) 2023.04.09
    [pwnable.kr] Level 6 - random  (0) 2023.04.09
    [pwnable.kr] Level 5 - passcode  (0) 2023.04.01
    [pwnable.kr] Level 4 - flag  (0) 2023.02.05

    댓글

Designed by Tistory.