Bazinga!

버퍼 오버플로우와 취약점 본문

수업기록/시스템 해킹

버퍼 오버플로우와 취약점

Bazinga! 2024. 9. 12. 10:07

https://youtu.be/1S0aBV-Waeo?si=vF0ViXxAqscBe6UW

버퍼 오버플로우란?

낮은 수준의 메모리 공격이다.

버퍼 오버플로우 공격은 아마도 낮은 수준의 c함수나 무언가를 사용하여 문자열이나 다른 변수를 특정 길이의 메모리 조각에 쓰는 상황이다.

하지만 우리는 그보다 더 긴 내용을 쓰려고 할때 이후의 메모리 주소를 덮어쓰게 되어 모든 종류의 문제가 발생할수있

 

프로그램이 실행될 때 메모리에서 어떤 일이 일어날까?

프로그램이 운영체제에 의해 실행될 때, 우리는 쉘에 있고 프로그램을 실행하기 위한 명령을 입력한다.

운영체제는 코드의 기본 메소드를 함수로서 효과적으로 호출한다.

그러나 실제 프로세스, 실행 파일은 매우 특정한 방식으로 메모리에 보관된다.

서로 다른 프로세스 간에 일관된다.

 

함수란?

무언가를 수행하고 이전 위치로 다시 돌아가는 코드 영역

 

080491a6  size_t sub_80491a6()

080491a6  55                 push    ebp {__saved_ebp}
080491a7  89e5               mov     ebp, esp {__saved_ebp}
080491a9  53                 push    ebx {__saved_ebx}  {data_804c000}
080491aa  83ec14             sub     esp, 0x14
080491ad  e82effffff         call    sub_80490e0
080491b2  81c34e2e0000       add     ebx, 0x2e4e
080491b8  83ec0c             sub     esp, 0xc
080491bb  8d8308e0ffff       lea     eax, [ebx-0x1ff8]  {data_804a008, "size: "}
080491c1  50                 push    eax  {data_804a008, "size: "}
080491c2  e899feffff         call    printf
080491c7  83c410             add     esp, 0x10
080491ca  8b83fcffffff       mov     eax, dword [ebx-0x4]  {stdin}
080491d0  8b00               mov     eax, dword [eax]
080491d2  50                 push    eax {var_20}
080491d3  6a01               push    0x1
080491d5  6a04               push    0x4 {var_28}
080491d7  8d45f4             lea     eax, [ebp-0xc {var_10}]
080491da  50                 push    eax {var_10} {var_2c}
080491db  e890feffff         call    fread
080491e0  83c410             add     esp, 0x10
080491e3  83ec0c             sub     esp, 0xc
080491e6  8d830fe0ffff       lea     eax, [ebx-0x1ff1]  {data_804a00f, "buf: "}
080491ec  50                 push    eax  {data_804a00f, "buf: "}
080491ed  e86efeffff         call    printf
080491f2  83c410             add     esp, 0x10
080491f5  8b83fcffffff       mov     eax, dword [ebx-0x4]  {stdin}
080491fb  8b10               mov     edx, dword [eax]
080491fd  8b45f4             mov     eax, dword [ebp-0xc {var_10}]
08049200  52                 push    edx {var_20_1}
08049201  50                 push    eax {var_24}
08049202  6a01               push    0x1 {var_28}
08049204  8d8360000000       lea     eax, [ebx+0x60]  {buf}
0804920a  50                 push    eax  {buf}
0804920b  e860feffff         call    fread
08049210  83c410             add     esp, 0x10
08049213  90                 nop     
08049214  8b5dfc             mov     ebx, dword [ebp-0x4 {__saved_ebx}]
08049217  c9                 leave    {__saved_ebp}
08049218  c3                 retn     {__return_addr}
08049219  int32_t main(int32_t argc, char** argv, char** envp)

08049219  8d4c2404           lea     ecx, [esp+0x4 {argc}]
0804921d  83e4f0             and     esp, 0xfffffff0
08049220  ff71fc             push    dword [ecx-0x4 {__return_addr}] {__return_addr_1}
08049223  55                 push    ebp {__saved_ebp}
08049224  89e5               mov     ebp, esp {__saved_ebp}
08049226  53                 push    ebx {__saved_ebx}  {data_804c000}
08049227  51                 push    ecx {argc} {var_10}
08049228  e8b3feffff         call    sub_80490e0
0804922d  81c3d32d0000       add     ebx, 0x2dd3
08049233  e86effffff         call    sub_80491a6
08049238  83ec08             sub     esp, 0x8
0804923b  8d8315e0ffff       lea     eax, [ebx-0x1feb]  {data_804a015, "Kenterkey Fried Chicken"}
08049241  50                 push    eax {var_1c}  {data_804a015, "Kenterkey Fried Chicken"}
08049242  8d83e0000000       lea     eax, [ebx+0xe0]  {target}
08049248  50                 push    eax {var_20}  {target}
08049249  e8f2fdffff         call    strcmp
0804924e  83c410             add     esp, 0x10
08049251  85c0               test    eax, eax
08049253  7514               jne     0x8049269

08049255  83ec0c             sub     esp, 0xc
08049258  8d832de0ffff       lea     eax, [ebx-0x1fd3]  {data_804a02d, "Good Job :)"}
0804925e  50                 push    eax {var_20}  {data_804a02d, "Good Job :)"}
0804925f  e81cfeffff         call    puts
08049264  83c410             add     esp, 0x10
08049267  eb12               jmp     0x804927b

08049269  83ec0c             sub     esp, 0xc
0804926c  8d8339e0ffff       lea     eax, [ebx-0x1fc7]  {data_804a039, "Try Again"}
08049272  50                 push    eax {var_20}  {data_804a039, "Try Again"}
08049273  e808feffff         call    puts
08049278  83c410             add     esp, 0x10

0804927b  b800000000         mov     eax, 0x0
08049280  8d65f8             lea     esp, [ebp-0x8]
08049283  59                 pop     ecx
08049284  5b                 pop     ebx {__saved_ebx}  {data_804c000}
08049285  5d                 pop     ebp {__saved_ebp}
08049286  8d61fc             lea     esp, [ecx-0x4]
08049289  c3                 retn