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 |