LOB darkknight -> bugbear
ID : darkknight
Passwd : new attacker
접속해서 ls 명령어로 파일을 확인합니다.
cat 명령으로 code를 열어봅니다.
RTL을 이용합니다. RTL은 Return To Library로 ret 명령을 만나서 돌아갈 때 code 영역으로 돌아가는 것을 원래 stack 영역으로 변조 했었는데, Library로 돌아가는 기법입니다.
system()함수는 내부적으로 어떤 명령을 실행시키기 위해 /bin/sh을 실행시키고 이를 통해
원하는 명령을 실행시키는 것에 착안하여 system()함수 코드 내부 어딘가에 /bin/sh 문자열이
존재할 것임을 추측할 수 있습니다.
그래서 system 함수의 주소를 찾고, system 함수 내부에 있는 /bin/sh 문자열을 인자로 전달하면 쉘이 뜰 것 같습니다.
system 함수의 주소를 찾고, /bin/sh 문자열을 찾겠습니다.
tmp 디렉터리를 만들고 실행 파일을 복사하고 gdb로 열어봅니다.
| i(4) | buffer(40) | dummy(4) | sfp(4) | ret(4) |
이런 메모리 구조를 가집니다.
s
main에 break point를 걸고 실행해보겠습니다.
보면 system 함수의 주소가 0x40058ae0입니다.
그럼 /bin/sh 문자열을 찾으려면 코드를 짜야 합니다.
이 코드를 컴파일 후 실행하면 /bin/sh 문자열의 주소를 얻을 수 있습니다.
얻었습니다.
인자는 함수 주소의 8byte 뒤에 넘겨줘야 하기 때문에 “함수 주소 + 4byte + 인자”여야 합니다.
payload : ./bugbear `python –c ‘print “A”*44 + “\xe0\x8a\x05\x40” + “AAAA” + “\xf9\xbf\x0f\x40”’`
원본 파일에 공격해보겠습니다.
exploit!
감사합니다.
'System&Write up > LOB' 카테고리의 다른 글
LOB giant -> assassin Write up (0) | 2017.11.09 |
---|---|
LOB bugbear -> giant Write up (0) | 2017.11.08 |
LOB golem -> darkknight Write up (0) | 2017.10.26 |
LOB skeleton -> golem Write up (0) | 2017.10.12 |
LOB vampire -> skeleton Write up (0) | 2017.10.11 |