ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 해커스쿨 LOB level11
    System/HackerSchool LOB 2019. 7. 16. 19:20

    으음,, bash2 띄우는걸 깜빡하고 몇시간 삽질할 뻔 했네요..

    일단 코드로 제약사항은 많이 줄었지만 치명적인 제약이 걸렸는데, 스택을 초기화해버리는 stack destroyer입니다

    프로그램 종료 전에 buffer부터 0xbfffffff까지 ret주소 제외, 모두 0으로 초기화해버립니다.. 그럼 쉘코드를 어디에 넣어야 할까

    뭘 어디야 그럼 buffer보다 낮은 주소겠죠 근데 넣기 마땅한 곳이 없어보이네요?

    그럼 좀 더 찾아봐야 해요 그래서 찾은 것은 바로 공유 라이브러ry

    공유 라이브러리는 일반적인 프로그램에서 함수들은 외부 라이브러리부터 그 뜻과 용도를 전달받아 사용되는데(로드되는데), 이 때마다 연동되는 동적 라이브러리입니다.

    그런데 공유 말고 외부 라이브러리에 등록돼있지 않은 함수들을 추가해서 사용할 때를 생각해봅시다.

    1. 프로그램 실행...

    2. 어 이 함수는 뭐지 라이브러리에 저장해야겠다

    3.(외부 라이브러리 메모리에 로드)

    이럴 거란 말이죠 근데 이 작업을 수행하기 위한 환경변수가 기막히게도 존재합니다 바로 LD_PRELOAD인데 이 환경변수에 파일을 등록해 놓으면 메모리가 로드되기 전, 환경변수에 등록한 파일을 먼저 메모리에 로드합니다

    그렇죠? 보통 프로그램은 파일 실행 전에 외부 라이브러리부터 로드해 놓을 테니까요

    그런데 전 레벨의 해결 단서 기억하나요 파일은 메모리 영역 종료 전에 해당 프로그램의 이름을 다시 보여주고 가는거요

    그니까 쉘코드가 이름인 파일을 LD_PRELOAD에 등록한 뒤에 실행해보면 그 메모리 영역 끝부분에 쉘코드가 그대로 나타날 거고, 그 부분을 이용해서 쉘을 따면 되겠죠?

    이야 오랜만에 설명 길었다

    a.c는 아무 동작도 하지 않는, 시작하자마자 끝나는 C파일입니다. shared object를 컴파일하는 명령어가 -fPIC -shared (파일이름) -o이니까 입력한 뒤에 nop뭉텅이 + 쉘코드 이렇게 파일을 만들어줍니다

    이제 LD_PRELOAD 환경변수에 그 파일을 등록시켜주시고요

    쭉쭉 내려보면 nop 뭉텅이를 볼 수 있습니다 여길 이용해서 쉘코드 파일을 실행하면 될 거 같죠

    근데 왜 안돼 이러다가 bash2 입력을 깜빡한걸 기억했습니다 휴 진짜 또 삽질 겁나 할뻔

    쉘이 잘 따진 것을 확인할 수 있습니다 ^^

     

    2019.7.16

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

    해커스쿨 LOB level 14  (0) 2019.07.18
    해커스쿨 LOB level13  (0) 2019.07.18
    해커스쿨 LOB level10  (0) 2019.07.15
    해커스쿨 LOB level9  (0) 2019.07.15
    해커스쿨 LOB level7  (0) 2019.07.14
Designed by Tistory.