포스팅 썸네일 이미지

SYSTEM HACKING/PWNABLE

[PWN] shellcode 정리

본 글은 Dreamhack System Hacking Curriculum - Shellcode를 참고하여 작성되었습니다. 1. 개요 기본적으로 시스템 해킹의 목적은 대상 시스템을 '부당하게 이용'하는 것입니다. administrator의 권한을 빼았는 것부터 시작해서 인가되지 않은 파일을 열어보는 것 등등도 해킹의 목적이 될 수 있겠죠. 이를 위해 제작된 어셈블리어 코드를 쉘코드(shellcode)라고 합니다. 해당 코드를 실행시키면 쉘(shell)을 실행시킬 수 있기 때문입니다. 굳이 C언어와 같은 고등 언어가 아닌 어셈블리어로 작성하는 이유는, 어셈블리어 단으로 작성할 경우 RIP레지스터만 조정할 수 있어도 바로 원하는 코드를 실행할 수 있기 때문입니다. 물론 어셈블리어로 작성된다는 특성상 아키텍쳐 ..

2022.04.06 게시됨

 포스팅 썸네일 이미지

SYSTEM HACKING/PWNABLE

[Python] Built-in 객체 사용하기, 응용하기 (Python RCE)

Built-in 객체 사용하기, 응용하기 (for CTF) Python built-in functions (Python RCE) 요즘 python으로 포너블 문제가 많이 나오던데, 왠만하면 이거 관련 문제들이여서 한번 정리하려고 합니당 1. __builtin__ 객체 소개 일단 'built-in'함수라는건 누구나 알고 있다고 생각합니다. 그 python에서 기본적으로 제공하는 그 함수들 맞아유! 더 중요하게 봐야할 건 built-in 객체입니다. 예를 들어, builtins.open 은 내장 함수 open() 의 완전한 이름입니다. 이렇게 모든 내장 식별자를 연결하는 액세스를 제공합니다. 어려워 보일 수 있는데 사실 우리가 평소에 사용하던 것들입니다. 혹시나 더 궁금하신 분들은 여기로 #1. Using ..

2021.05.14 게시됨

 포스팅 썸네일 이미지

SYSTEM HACKING/PWNABLE

[STACK] mprotect ROP

ROP using mprotect 오늘은 기존의 ROP와는 조금 다른 것을 해보려고 합니다. 기존에는 system함수를 이용해서 권한을 얻는 식이라면, 이번에는 mprotect함수를 이용해서 권한을 획득하는 방식의 ROP에 대해서 알아보려고 합니다. 1. mprotect함수란 기본적으로 mprotect함수에 대해서 알아보도록 합시다. mprotect함수는 메모리에 대한 접근을 제어하는 함수로, 원형은 다음과 같습니다. #include int mprotect(const void *addr, size_t len, int prot); - addr : 접근을 제어할 주소 - len : 주소 기준으로 관여할 길이 - prot : 다음 값들의 비트OR값이다. PROT_NONE : 접근할 수 없다. PROT_READ..

2021.03.17 게시됨

 포스팅 썸네일 이미지

SYSTEM HACKING/PWNABLE

그래서 우리가 포너블을 하는 이유

물론 저도 부족한 지식이지만 동아리 활동을 통해 포너블에 대해 후배들을 가르치면서, 가장 많이 설명한 부분이 "포너블이 무엇이고, 왜 하는가"에 대한 부분입니다. 저는 처음 공부할 당시에 정말 맨땅에 헤딩 식으로 공부를 했기 때문에, 정확하게 내가 왜 이걸 하고 있으며 결론적으로 이루고 싶은 바가 무엇인지도 모르고 그냥 풀었습니다. 저는 어떤 일이든 내가 어떤 일을 하고있으며, 이 일의 목적은 무엇인지 파악하는 것이 매우 중요하다고 생각하는 반면에 구글을 찾아보면 무작정 워게임들을 추천하는 글밖에 없는 것 같아서 이 글을 작성합니다. (혹시나 잘못 작성된 부분이 있다면 댓글 부탁드립니다. 감사합니다!) 0. 포너블이란 사실 이내용은 조금만 찾아봐도 널려있는 내용이라 간단하게 하고 넘어가겠습니다. 우선 왜..

2021.03.07 게시됨

 포스팅 썸네일 이미지

SYSTEM HACKING/PWNABLE

[Stack] Stack Frame 공부하기 - 2

Stack Frame -2- 오늘은 Stack Frame에 대해서 더 자세히 들여다보도록 합시다. 저번에는 전체적인 흐름에 대해서 파악해보았다면, 이번에는 하나의 함수에만 집중해서 정확히 어떤 일들이 일어나는지 확인해보도록 하겠습니다. (참고)앞으로의 내용은 기본적으로 메모리 주소(ex. C언어의 pointer 등등..)에 대한 기본적인 이해는 있다는 전제 하에 작성된 글입니다. 1. 더 자세히 들여다보기 이번에는 조금은 다른 코드를 통해서 분석해보도록 합시다. //gcc -m32 -g -o ex2 ex2.c #include int main() { int a = 5; char arr[64]; printf("main함수가 호출되었습니다\n"); return 0; } 위 코드는 저번 글에서 사용한 코드에서 ..

2021.03.02 게시됨

 포스팅 썸네일 이미지

SYSTEM HACKING/PWNABLE

[Stack] Stack Frame 공부하기 - 1

Stack Frame -1- 오늘은 Stack Frame에 대해서 배울 예정입니다. 앞으로 2~3개의 글을 통해서 기본적으로 Stack Frame이 무엇인지, 시스템 보안을 하는 사람의 입장에서는 어떤 것들을 알고 있어야 하는지, 그리고 나아가 Stack Frame을 분석할 수 있는 툴 중 하나인 gdb 사용방법을 작성할 예정입니다. 1. Stack Frame이란? 사실 Stack Frame이라는 말보다는 그냥 Stack, Stack 자료구조정도로 더 많이 쓰이는 것 같습니다. 기본적으로 프로그램이라고 함은 컴퓨터의 메모리를 사용해서 이런저런 연산/작동을 수행하는 것을 칭하죠. 그럼 이런 프로그램들이 수십개가 실행되고 있는 컴퓨터에서는 메모리를 효율적으로, 잘 쓰는게 중요하겠죠? 그래서 이 프로그램들이 ..

2021.03.01 게시됨

 포스팅 썸네일 이미지

SYSTEM HACKING/PWNABLE

함수의 got 구하기

생각보다 물어보는사람이 많아서... 걍 정리글 씁니다 제가 아는 방법은 두가지 방법 정도가 있는 것 같아요. 저는 첫 번째 방법을 추천합니다. 1. gdb 사용 첫 번째 방법은 gdb를 이용합니다. gdb -q (파일명)으로 gdb를 실행하고, gdb로 p (함수명) 입력해 함수의 plt주소를 찾습니다. +) 이때 프로그램을 실행시켜 함수를 실행하면 다른값을 보여주니 gdb 실행하고 다른 명령 하지말고 바로 p (함수명) 해주시길 바랍니다. 그렇게 함수의 plt를 알아낸 다음, 그 주소의 plt가 jmp하는 곳이 got주소입니다. 다음 사진의 경우 printf의 got는 0x601238입니다. 왜 저런 과정을 통해서 구해지는지 모르겠다구요? 참고1을 읽어봅시다. 기본적인 plt와 got의 지식이 필요하네..

2020.10.09 게시됨

 포스팅 썸네일 이미지

SYSTEM HACKING/PWNABLE

[Stack] Fake EBP에 대하여

FEBP(Fake EBP)에 대하여 오늘은 Fake EBP에 대해서 이야기해봅시다. FPO랑 비슷한 맥락입니다. FPO를 몰라도 충분히 이해할 수 있지만, 설명하는 과정에서 FPO와 비교를 하면서 많이 설명할 것이기 때문에 한번씩은 읽으면 좋을 것 같습니다. https://dokhakdubini.tistory.com/228?category=809542 [Stack] Frame Pointer Overflow, FPO에 대하여 오늘은 FPO, Frame Pointer Overflow에 대해서 알아볼 것입니다. SFP Overflow라고도 불립니다. FPO에 대한 풀이 글들을 보면 계속 leave가 ebp+4에 접근할 수 있다, sfp를 조작했으니 ebp를 조작할 수 있다이런.. dokhakdubini.tis..

2020.08.31 게시됨

 포스팅 썸네일 이미지

SYSTEM HACKING/PWNABLE

[Stack] RET sled에 대하여

오늘은 RET Sled에 대해서 알아볼 것입니다. RET Sled는 Return Address영역에 RET 명령어의 주소를 연속적으로 삽입해서 esp를 조작하는 기법입니다. 일단 RET의 구조를 한번 봅시다. Internal of "ret" pop eip jmp eip 이해를 돕기 위해 그림도 가져왔습니다. 상황 자체는 함수의 에필로그 중 leave까지 진행한 상황이라고 가정합시다. 그러면 SFP 안의 값이 ebp안으로 들어가있겠죠? 그런 뒤 esp는 RET를 가리키고 있을 거고요. 그런 뒤에 ret가 실행되면서 RET(return address)안에 있는 값이 eip에 pop되고, 그 값으로 jmp(이동)하게 됩니다. 이 그림의 경우에는 ret를 통해서 0xaabbccdd라는 주소에 접근하게 되겠죠? ..

2020.08.08 게시됨

 포스팅 썸네일 이미지

SYSTEM HACKING/PWNABLE

[Stack] Frame Pointer Overflow, FPO에 대하여

오늘은 FPO, Frame Pointer Overflow에 대해서 알아볼 것입니다. SFP Overflow라고도 불립니다. FPO에 대한 풀이 글들을 보면 계속 leave가 ebp+4에 접근할 수 있다, sfp를 조작했으니 ebp를 조작할 수 있다이런 말들이 되게 많은데 이걸 단계별로 제대로 이해하지 못하고 넘어가면 이게 뭔 개소리지??? 하다가 포기하게 되니까 천천히 이해해봅시다. 일단 FPO가 뭔지 알아봅시다. 일단 FPO를 이해하기 위해서는 기본적인 stack구조가 어떻게 굴러가는지 알아야하며, 더불어 stack bufferoverflow가 어떻게 일어나는지 배경지식으로 알고 있어야 합니다. 그에 대해서 잘 모른다면 먼저 stack bufferoverflow에 대해서 공부를 해보고, 이 글은 buf..

2020.07.30 게시됨

 포스팅 썸네일 이미지

SYSTEM HACKING/PWNABLE

[stack] 함수의 에필로그(epilogue)

함수의 에필로그(epilogue)에 대하여 오늘은 함수의 에필로그라는걸 배울 것입니다. 보통 함수의 프롤로그와 에필로그를 묶어서 설명하는데, 모든 함수의 처음(프롤로그)과 끝(에필로그)에 공통적으로 들어가기 때문에 프롤로그와 에필로그라고 합니다. 오늘은 에필로그만 보겠습니다. 에필로그의 각 단계를 설명하고, 그림으로 다시한번 이해해 보도록 하겠습니다. Function Epilog leave ret 간단하죠? 에필로그는 leave와 ret로 구성되어있습니다. 그러나 각 단계를 더 나눠서 볼게요. Internal of "Leave" move esp, ebp pop ebp 우선 Leave입니다. ebp를 esp로 복사하여 지역변수를 정리하고, stack의 가장 위에 있는 값을 ebp에 pop합니다. 근데 여기..

2020.07.30 게시됨