golem 의 소스입니다 
마지막 부분이 추가됫네요 

 // stack destroyer!

        memset(buffer, 0, 44);

memset(buffer+48, 0, 0xbfffffff - (int)(buffer+48));

buffer부터 메모리 끝 영역까지 전부 초기화 해버려서 저번 문제에서 사용햇던 메모리 마지막 영역을 사용 할 수가 없게되었다.

고민하고 시도해보다가 알게 된 방법이 리눅스 공유 라이브러리에 대한 개념을 알아야한다 . (타 블로그와 위키에서 공부를 하였습니다.)
https://wiki.kldp.org/HOWTO/html/Program-Library-HOWTO/shared-libraries.html

LD_PRELOAD 

프로세스 실행 과정 중 라이브러리를 로딩 할때, LD_PRELOAD 변수가 설정되어 있으면 해당 변수에 지정된 라이브러리를 먼저 로딩하고, 이중 libc 함수명과 동일한 함수가 있다면 해당 함수를 먼저 호출해 준다.

즉, 자동으로 후킹을 수행하도록 해준다는 말과 같다.

0xff                                    ~                                      0x00
커널 | argv | argc | ret | ebp | buf | 공유라이브러리 | heap | data | code
      |---------  stack ----------------|

 메모리 구조는 이런식으로 구성이 되어있고 여지껏 stack을 이용해서 공격을 진행해왔습니다 .
그리고 이번 문제는 공유라이브러리 영역을 이용해서 공격을 해야합니다 .

원래 프로그램을 실행시키면 보통의 공유 라이브러리를 로드하지만
LD_PRELOAD를 정의할시 프로그램을 실행하면 LD_PRELOAD에서 정의해준 라이브러리를 로드하게되고 이번에는 저 공유라이브러리 영역에 데이터를 올려서 진행을 할것이다 .

공유 라이브러리 영역에 쉘 코드를 넣은뒤에 RET주소를 공유 라이브러리에 넣은 쉘코드의 주소로 덮어 씌워준다 
위키 3.4를 참고하여주세요 
gcc -fPIC -shared -o ./shellcode ./Empty_Test_Program.c
위키 3.5를 참고하여주세요 
export LD_PRELOAD=./shellcode
shell코드 주소를 확인 후 ret주소에 덮어쓴다 

이 정도가 순서가 되겠습니다 그럼 진행해볼게요 

진행을 하던 도중에
collect2 : ld returned 1 exit status 라는 오류가 떳네요 
이유를 생각해보니 직접 라이브러리 정의를 안해준거같습니다 .

라이브러리 정의 문제가 아니였고 생각해보니 공유 라이브러리도 하나의 심볼릭링크로 만들어주는 작업이기때문에 \x2f 가 제외된 48바이트 쉘코드를 이용해서 풀엇어야 했습니다 .


별다른 오류가 뜨지않는걸 확인했습니다
export를 이용해서 정상적으로 LD_PERLOAD에 올라가 있는지 확인해보겠습니다


정상적으로 등록된거같습니다 


환경변수에 등록한 이후에 gdb를 열려고하니 자꾸 저러한 에러가 떠서 gdb를 먼저 분석한 후에 환경변수를 등록하고 진행을 해보겠습니다 .


leave 부분에다가 브포를 잡고 진행을 해보겠습니다 


계속 ls:error in loading shared libraries 라는 에러가 뜨면서 진행을 계속 하지 못했습니다 찾고 찾고 찾고 또 찾아본후 가장 유력한 원인이 gdb버전이 낮아서 에러가 난거같다는 주장이 잇었습니다 분명히 bash2를 썻는데..하며 생각해보며 혹시나 하는 생각에 /bin/bash2 export SHELL =/bin/bash2도 사용해줬습니다 .

심볼릭링크도 지운 후 다시 만들엇더니 오류가 뜨지 않았습니다 ..

문제 진행할때 저 친구들을 입력하는것을 습관을 들여야겠습니다-_-;


공유 라이브러리는 낮은 주소에 잇다는걸 확인을 하여서
esp에서 -100부터 -200.. 점점점점 낮춰가며 노가다를 한 끝에 놉코드와 쉘코드 친구들을 발견했습니다 .정말 반가워요 

적당한 주소값을 고른 후 공격을 해보겠습니다 


심볼릭링크로 공격을 해줘야하나 아니면 다른 쉘코드를 추가로 써줘야하나 무엇을 먼저 시도해볼까 고민을하다가 저렇게 공격을 했더니 바로 쉘을 휙득했습니다
기법을 전혀 모르면 풀 수 없고 알아도 저런 어처구니없은 버전의 낮음이 가져온 폐해였습니다

'해커스쿨 lob' 카테고리의 다른 글

LOB bugbear  (0) 2016.05.12
LOB darkknight  (0) 2016.05.11
LOB skeleton  (0) 2016.05.05
LOB vampire  (0) 2016.05.04
LOB troll  (0) 2016.05.04

+ Recent posts