ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 해커스쿨 ftz level15
    System/HackerSchool ftz level 2019. 6. 14. 18:20

    어젯밤에 그냥 자서 오늘은 지금 하나랑 새벽에 하나 올라갈 겁니다.

    코드를 보면 사실 level14의 코드와 매우 흡사한 모습인데, 달라진 점이라면 check 변수 호출할 때 포인터 변수로 지정했다는 것 뿐이네요

    분석을 시작하기에 앞서 일단 우리가 봐야 할 부분은 <main+17>부터 <main+32>인 것 같습니다. 그 전에는 시작부, 그 이후에는 BOF 성공 뒤에 차례로 실행되는 구문이라서..

    <main+17>을 보면 fgets 함수를 실행하기 전에 [ebp-56]의 주소를 EAX에 저장한 뒤 PUSH합니다. 고로 여기서부터 버퍼가 시작한다고 볼 수 있겠네요 그리고 <main+29>를 보면 그 뒤에 [ebp-12]의 값을 EAX에 넣은 뒤, <main+32>에서 그 값을 0xdeadbeef와 비교합니다.

    중요한 거는 check가 포인터형 변수로 지정되었기 때문에 level14처럼 주소에 0xdeadbeef라고 쓰면 안된다는 겁니다. [ebp-12] 위치에 0xdeadbeef 라는 값이 저장된 주소값을 넣어줘야 성공적으로 쉘을 딸 수 있습니다 -

    그래서 이제 0xdeadbeef 라는 값이 저장된 주소를 찾아야 해요

    이걸 어떻게 찾냐?

    gdb의 x명령어를 사용하면 됩니다. 이게 메모리를 조사하는 명령어거든요

    x/16x 이 뜻은 16진수의 메모리를 16바이트로 끊어서 보여주겠다는 뜻입니다. 그래서 <main+32> 다음 <main+32+16>이 출력되죠

    위에서 <main+32>에서 0xdeadbeef 의 주소를 비교한다고 했죠? 그래서 그 0x80484b0부터 이것저것 출력해 본 거구요

    근데 이미 <main+32>에서 0xbeef어쩌구와 0x어쩌구dead가 나왔죠? 고로 0x80484b0의 주소와 0x80484c0의 주소 사이에 0xdeadbeef가 저장된 주소가 있을 겁니다

    따라서 x/x 명령어(메모리별로 끊어서 출력해줌)를 사용해서 하나하나 볼 겁니다

    앞에서부터 두 글자씩 또잉또잉하면서 결국 <main+34>에서 0xdeadbeef 가 저장되네요!

    그러므로 이 0x80484b2 주소로 공격하면 분명 쉘을 딸 수 있을 거에요

    우 와 풀 렸 다 !

    다 쓰고 보니까 오늘따라 굉장히 긴 거 같아요 아직 낮이라 쌩쌩해서 그런건지 이것저것 많이 썼네요. 이래야 공부가 되는 거긴 한데 하하,,

    이제 시험공부하러 갑니다 ㅂㅂ

     

    2019.6.14

    InBseiBjb21lIHRvIG1lLCBpZiB5b3UgYW5zd2VyIHRoaXMi

    'System > HackerSchool ftz level' 카테고리의 다른 글

    해커스쿨 ftz level17  (0) 2019.06.15
    해커스쿨 ftz level16  (0) 2019.06.15
    해커스쿨 ftz level14  (0) 2019.06.13
    해커스쿨 ftz level13  (0) 2019.06.12
    해커스쿨 ftz level12  (0) 2019.06.11
Designed by Tistory.