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
질문자가 채택한 답변입니다. 좋은 지식을 공유해줘서 고마워요!
avatar
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 설치 후]

2024.11.13. 23:13

참고로 말씀드리면 도커 외부의 gdb에서 도커 내부의 프로세스에 attach할 수 있습니다.
그렇게 되면 docker에 gdb 설치 없이 디버깅이 가능합니다.

2024.11.13. 23:40
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기