System hacking training/Knowledge
-
x64 BOF(Buffer Overflow)System hacking training/Knowledge 2018. 4. 18. 20:32
오늘은 x64 즉 64 bit 환경에서의 buffer overflow에 대해 포스팅하겠습니다. 먼저 x86 vs x64에 대해 선행 지식이 필요합니다. 바이너리 하나를 받았는데 이제서야 풀이해보네요.ㅠ 먼저 바이너리를 확인해보겠습니다. char buffer가 256 byte로 할당되었지만 gets()의 사용으로 인해 bof가 터집니다. gets()는 NULL문자가 오기전까지 모든 문자열을 입력받는데 바로 여기서 ret 를 침범하여 우리가 원하는 shell()를 실행할 수 있습니다. 이전의 x86 bof 문제에서 처럼 payload를 구성해보면 [x86 payload] python -c 'print "A"*256+"SFP(4)"+"ret(4)"' 이렇게 buf 를 의미없는 문자로 덮어주고 SFP를 4byt..
-
[x86 vs x64] Memory AddressSystem hacking training/Knowledge 2018. 3. 19. 22:18
오늘은 x86과 x64에 대해 전반적으로 정리를 하겠다. 추후 x86의 BOF, RTL, ROP 등 64 bit환경에서의 공격 기법에 대해서도 포스팅하겠다. x86 vs x64하면 가장 먼저 떠오르는 것은 메모리 주소 체계일것이다. x86의 메모리 주소 체계는 이러하다. [x86] Memory Address (windows 기준) 0x0000 0000 - 0xffff ffff 0x0000 0000 - 0x7fff ffff (User Section, Ring3)0x8000 0000 - 0xffff ffff (Kernel Section, Ring0) 0x0000 0000 부터 0xffff ffff 까지 사용할 수 있는 주소 공간이 있고,이는 unsigned int의 범위 0 ~ 4294967295와 동일하다..
-
ELF Memory Protection - RELROSystem hacking training/Knowledge 2018. 3. 7. 15:52
codegate 2013 문제를 풀이하려고 보호기법을 확인해 보니 partial RELRO가 걸려있었다. 이 보호기법에 대해 공부를 해본적이 없어서 정리를 해본다. 먼저 RELRO를 이해하기 위해 배경지식이 필요한데 Lazy Binding 이라는 개념에 대해 정리를 하겠다. Lazy Binding 이란?-> 모든 외부 함수의 주소를 한 번에 로딩하지 않고, 함수 호출 시점에 해당 함수의 주소만 공유 라이브러리로부터 알아오는 것을 의미한다. Dynamic Linking 방식으로 컴파일된 ELF 바이너리는 공유 라이브러리 내에 위치한 함수의 주소를 동적으로 알아오기 위해 GOT(Global Offset Table)를 이용한다. Dynamic Link 방식은 공유 라이브러리를 하나의 메모리 공간에 매핑하고 여..
-
ELF Technique - ROPSystem hacking training/Knowledge 2018. 3. 5. 03:46
ROP 를 배우기 전에 선행되어야할 개념들이 존재한다. RTLRTL ChainingGOT Overwrite 위 내용을 선행한 후 ROP 를 이해할 수 있다. ROP 란? Return Oriented Programming의 약자로, 우리말로 하면 반환 지향형 프로그래밍이다. 현재 수행중인 프로그램 코드 안에 존재하는 서브루틴이 리턴 명령어에 닿기 전에 기계 명령어 또는 기계 명령어 덩어리를 간접적으로 실행시키기 위해 콜 스택을 제어하는 기술이다. 실행되는 모든 명령어들이 원래 프로그램 안에 존재하는 실행 가능한 메모리 영역에서 추출한 것들이기 때문에, 이러한 기술은 사용자 제어 메모리 공간에서 명령어 수행을 방지하는 DEP/NX bit, ASLR들을 우회하는 코드 인젝션과 같은 기술들을 사용하지 않아도 우..
-
ELF Technique - GOT OverwriteSystem hacking training/Knowledge 2018. 2. 28. 03:51
GOT Overwrite란? Dynamic Link 방식으로 컴파일된 바이너리가 공유 라이브러리를 호출할 때 사용되는 PLT와 GOT를 이용하는 공격 기법이다. PLT는 GOT를 가리키고, GOT에는 함수의 실제 주소가 들어있다.이 GOT값을 원하는 함수의 실제 주소로 변조시킨다면, 원래의 함수가 아닌 변조한 함수가 호출될 것이다.이것이 바로 GOT Overwrite이다. GOT Overwrite는 간단하게 설명하면 printf("/bin/sh") -> system("/bin/sh") 처럼 특정 함수의 got 값을 변경하여 원래 수행하고자 했던 함수외에 다른 함수를 호출하는 것을 말한다. 이를 실습하기 위해 간단한 바이너리를 만들었다. [Got_Overwrite.c]#include int main() {..
-
ELF PLT & GOTSystem hacking training/Knowledge 2018. 2. 27. 02:29
ROP라는 기법을 익히기 위해서는 PLT 와 GOT라는 녀석들의 개념을 알고있어야 한다. PLT 란?Procedure Linkage Table의 약자로 외부 프로시저를 연결해주는 테이블이다.PLT를 통해 다른 라이브러리에 있는 프로시저를 호출해 사용할 수 있다. PLT는 일종의 실제 호출 코드를 담고 있는 테이블로써 이 내용 참조를 통해 _dl_runtime_resolve가 수행되고,실제 시스템 라이브러리 호출이 이뤄지게 된다. GOT 란?Global Offset Table의 약자로 PLT가 참조하는 테이블이다.프로시저들의 주소가 들어있다. GOT는 프로시저들의 주소를 가지고 있다.PLT가 어떤 외부 프로시저를 호출할때 이 GOT를 참조하여 해당 주소로 점프하게된다. ※뇌피셜 TipProcedure ==..
-
ELF Technique - RTL ChainingSystem hacking training/Knowledge 2018. 2. 22. 21:49
RTL Chaining 이란 RTL 기법을 응용하여 라이브러리의 함수의 호출을 연계하는 것입니다. RTL 기법에서는 하나의 함수만 호출하였다면, RTL Chaining에서는 여러 함수를 연계하여 호출하는 것을 말합니다. [Link] RTL(Return To libc) 이전의 RTL에서는 return address가 들어가는 곳에 AAAA(dummy(4))를 넣어줬었는데요. 바로 이 AAAA를 넣어줬던 위치에 pop ret 과 같은 명령어의 주소를 넣어 스택 포인터를 다음 함수로 위치시키는 기법이 RTL Chaining입니다. [실습]먼저 실습환경은 pwntool 사용을 위해우분투 64bit 환경에서 바이너리를 32bit로 컴파일 하였다. 먼저 취약한 바이너리부터 만들어줍니다. read()로 buf에 51..
-
ELF Technique - RTL(Return To Library)System hacking training/Knowledge 2018. 2. 16. 16:58
RTL이란? return to library 의 약자이고 linux에서는 return to libc라고 불리기도 한다.(linux에서 library가 libc) 이 기법을 이용하면 프로그램에 system()가 없어도 라이브러리의 system()를 호출하여 사용이 가능하다. 이 기법을 익히기 전에 먼저 알고가야할 것들이 있다. 바로 plt와 got이다. plt 란?procedure linkage table의 약자로, 사용자가 만든 함수는 plt를 참조할 필요가 없지만 외부 라이브러리에서 가져다 쓸 경우 plt를 참조하게 된다.예를 들어 우리가 바이너리에서 만든 함수들 (main(), func() 등)은 plt를 참조할 필요가 없다.plt는 어떤 함수들이 나열되어있는 테이블이라고 생각을 하고 넘어간다. go..