3 코인
oob 문제 / 로컬은 되지만 서버에서는 되지 않습니다. (도커에서도 쉘 딸 수 있습니다.)
p = process("./oob")
e = ELF("/lib/x86_64-linux-gnu/libc.so.6")
f = ELF("./oob")
환경에서 쉘을 얻었지만 서버에서는 쉘을 못얻고 있습니다
서버 libc를 확인하니
lib/x86_64-linux-gnu/libc.so.6 를 사용하고 있었습니다.
도커로 문제 환경을 구성한 후 libc offset을 다음과 같이 확인했습니다.
(gdb) p system
$16 = {int (const char *)} 0x7facce685d70 <__libc_system>
(gdb) p/x 0x7ffe11950ba8
$19 = 0x7ffe11950ba8
(gdb) p/x 0x7facce685d70 - 0x7facce635000
$20 = 0x50d70
제 로컬과 system 함수 offset이 같은것으로 보아 맞는 것 같습니다.
혹시 서버에서 libcbase 이외에도 더 수정해야할 것이 있나요?
PIE base 같은 경우 __dso_handle를 leak할 수 있어서 구했었습니다.
#포너블
#pwnable
#서버
#oob
#libc
#로되리안
#로컬
작성자 정보
답변
2
질문자가 채택한 답변입니다. 좋은 지식을 공유해줘서 고마워요!
daeseong
시스템 해킹 입문
gdb 설치시 libc offset이 달라집니다.
도커에 gdb 설치 전 가져온 libc 파일을 사용해서 시도해 보세요.
root@DAE:/mnt/a/DreamHack-Wargame/pwn/oob/test# symbols libc_before.so.6 | grep system
__libc_system:0x50d60
system:0x50d60
svcerr_systemerr:0x169140
root@DAE:/mnt/a/DreamHack-Wargame/pwn/oob/test#
[gdb 설치 전]
root@DAE:/mnt/a/DreamHack-Wargame/pwn/oob/test# symbols libc_after.so.6 | grep system
__libc_system:0x50d70
system:0x50d70
svcerr_systemerr:0x168fb0
[gdb 설치 후]
mini-chip
Perfect 10
참고로 말씀드리면 도커 외부의 gdb에서 도커 내부의 프로세스에 attach할 수 있습니다.
그렇게 되면 docker에 gdb 설치 없이 디버깅이 가능합니다.