10 코인
gdb로 동적 분석 할 때, system을 call하는 부분에서 다음과 같은 오류가 발생합니다
Continuing.
[Attaching after Thread 0x7ffff7d88740 (LWP 3524) vfork to child process 3525]
[New inferior 2 (process 3525)]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[Detaching vfork parent process 3524 after child exec]
[Inferior 1 (process 3524) detached]
process 3525 is executing new program: /usr/bin/dash
Error in re-setting breakpoint 1: No symbol table is loaded. Use the "file" command.
Error in re-setting breakpoint 1: No symbol "main" in current context.
Error in re-setting breakpoint 1: No symbol "main" in current context.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Error in re-setting breakpoint 1: No symbol "main" in current context.
I do well at getting the flag
[Inferior 2 (process 3525) exited normally]
one chance for flag
왜 이런 오류가 발생할까요..
local환경에서 그냥 프로그램 실행하거나 exploit code로 실행할 시에는 잘 됩니다.
gdb에서 디버깅하는 과정에서만 오류가 납니다. 도와주세요ㅠ
#pwnable
작성자 정보
답변
1
d0razi
대표 업적 없음
-
문제 원인
system 함수가 실행될 때 내부적으로 vfork와 exec를 사용하여 자식 프로세스를 생성하고, 해당 프로세스에 쉘 명령어를 실행하는데, gdb는 이 자식 프로세스를 자동으로 추적한다고 하네요(이 문제에서는 /usr/bin/dash). 그래서 기존 프로세스와 분리하고 자식 프로세스를 추적하려고 하는데 /usr/bin/dash가 디버깅 심볼이 없기 때문에 gdb가 추적할 수 없어서 해당 오류가 발생한다고 합니다. -
해결 방법
set follow-fork-mode parent
gdb에서 디버깅 하기전에 위 명령어를 사용해주면 오류 없이 잘 동작하네요.