HO_9
HO9
HO_9
전체 방문자
오늘
어제
  • 분류 전체보기 (104)
    • Write Up (3)
    • WarGame (21)
      • The Lord of Bufferoverflow(.. (7)
      • The Lord of Sql Injection(L.. (1)
      • Pwnable.kr (1)
      • Pwnable.tw (0)
      • XSS GAME (6)
      • Pwnable.xyz (5)
    • SYSTEM HACKING (49)
      • 기법 (24)
      • 문제 풀이 (24)
    • CODING (2)
      • PYTHON (2)
    • WEB HACKING (1)
    • Plan (0)
    • PROJECT (0)
    • iOS (6)
    • ALGORITHM (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

  • .

인기 글

태그

  • 아파치
  • log4j
  • JNDI
  • 취약점

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
HO_9

HO9

DAY-6 Return To Library
SYSTEM HACKING/기법

DAY-6 Return To Library

2017. 11. 11. 00:13
728x90

오늘은 Return To Library(RTL)에 대해서 알아 볼 것이다.

문제는 해커스쿨의 FTZ를 이용하겠다.


리턴 값을 라이브러리가 있는 곳으로 바꿔버린다는 뜻이다.즉 우리가 실행시키고 싶은 라이브러리 주소를 리턴값으로 넘기는 것이다.

DAY-5에서는 쉘코드를 이용해서 흐름을 바꿧는데 뭐하러 쉘코드를 사용하지 않는지 의문이 들 것 이다.

이런 방법은 옛날 부터 막혀있다.스택이 일정치 않아서 찾기도 힘들뿐만 아니라 스택에서도 코드실행을 막는다고 한다.

그래서 RTL을 이용해서 쉘을 실행시켜 보겠다.


일단 RTL을 해보기 전 이론먼저 훑어 보겠다.

{

[낮은 주소값 = 높은주소]                                                `      [높은 주소값 = 낮은주소]

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA        BBBB            system                          "/bin/sh" 

[buffer]                                                                                    [saved ebp]      [saved eip]    [return값]        [인자]


DAY-3에서 보았듯이 버퍼 공간을 다채우면 saved ebp,eip가 나오게된다.
saved eip에 원하는 함수의 주소를 넣어주고 함수가 끝난 후 해야 할 return 값을 받고 인자를 받는다.

이걸로 쉘을 딸수 있다.


문제 소스코드.




첫번째 방법.


일단 gdb로 attackme를 까본다


깐 후에 몇 개의 공간을 넣어야지 ebp를 침범할 수 있는지 알아 보자.(DAY-3 참조)


.

.

.

268개의 공간을 넣으면 saved ebp까지차서 eip로 원하는 함수를 실행 시킬수 있을 것이다.


saved eip에 원하는 함수를 넣어도 인자가 없으면 말짱 도로묵이다.

일단 라이브러리에 /bin/sh가 있는지 찾아보자.


gdb에서 info proc mappings를 사용하면 라이브러리가 어느공간을 차지하는지 볼 수 있다.



일단 시작주소는 알았다.

시작 주소를 알아보는 이유는 FTZ에서 파이썬이 실행되니 라이브러리를 열어서 /bin/sh문장을 찾아볼 것 이다.

그럼 /bin/sh문장이 몇번째 줄에 있는지 알 수 있게된다.그러면 시작주소에서 몇번째 줄에 있는지를 더하면

/bin/sh의 주소가 나올 것 이다.



1232164번째줄에 있다.

더해서 hex값으로 바꿔주면 0x4014AD24이 나온다.

한번 확인해 보자.



정확하게 /bin/sh이 들어있다.


그럼 이제 답만입력하면 끝난다.


성공적으로 쉘이 들어갔다.



두번째 방법.


두번째 방법에서는 /bin/sh의 주소를 구하는 것 빼고는 모두 동일하다.

라이브러리에 있는 문자열을 구해 파일을 만들어 그파일을 /bin/sh에 심볼릭 링크를 걸으면 /bin/sh의 주소값이 더욱 빠르게 구해질 것 이다.



일단 attackme에 쓸만한 문자열이 있는지 확인을 위해 0x8048000인 처음주소부터 확인해 보겠다.



확인을 하다보니 GNU라는 문자열이 보인다.

이문자열을 이용해서 심볼릭링크를 걸겠다.



걸린 모습을 볼 수 있다.

하지만 이렇게만 하면 파일을 실행할 때 GNU라는 문자열을 만나도 그냥 문자열로만 인식할 것 이다..

그이유는 GNU가 만들어져 있지만 GNU를 환경변수에 올려 놓지 않아서 그렇다.

환경변수에 올려줘야 한다.


export PATH=/home/level11/tmp:$PATH

         //PATH문장 뒤에 있는 주소에 들어있는 주소의 명령어만 실행이 된다.

   //그래서 /home/level11/tmp를 해주면 tmp안에 있는 명령어를 실행시킬 수 있다.

   //$PATH를 붙이는 이유는 원래있던 문자열을 이어붙이기 위해서이다.



올라간것을 확인 할 수 있다.


그럼 GNU문자열의 주소를 인자로 넣어주면 /bin/sh이 들어갈 것이다.


 

시스템 함수의 인자로 /bin/sh을 넘겨서 쉘을 따내었다.




'SYSTEM HACKING > 기법' 카테고리의 다른 글

DAY-7 ROP(Return Oriented Programming)  (0) 2017.11.18
Special Chapter-RTL Chaining  (0) 2017.11.11
DAY-5 쉘코드 작성  (0) 2017.11.10
DAY-4 프로세스 디버깅  (0) 2017.11.02
DAY-3 버퍼오버플로우를 풀어보자  (0) 2017.10.23
    'SYSTEM HACKING/기법' 카테고리의 다른 글
    • DAY-7 ROP(Return Oriented Programming)
    • Special Chapter-RTL Chaining
    • DAY-5 쉘코드 작성
    • DAY-4 프로세스 디버깅
    HO_9
    HO_9

    티스토리툴바