System hacking training
-
LEVEL 04 goblin write-upSystem hacking training/Hackerschool LOB 2018. 3. 16. 01:32
[문제] extern 키워드로 외부변수를 불러와 0으로 초기화 해주는 것을 볼 수 있다.environ이라는 변수명만 봐도 환경변수를 초기화 해준다는 것을 알 수 있다. 따라서 exploit하기 위해서 자주쓰던 환경변수를 사용할 수 없다. 그렇기 때문에 스택에 쉘코드를 올려 실행을 해야한다.[시나리오] | char buffer[40] | SFP | RET | 스택은 위와 같이 쉘코드가 들어갈 충분한 크기를 가지고 있다.따라서 buffer에 19byte의 dummy(\x90)과 쉘코드 25byte를 넣어준다. gdb로 입력값이 들어가는 위치중 \x90에 해당하는 위치의 주소를 구하여 return address에 덮어주면 쉘을 띄울 수 있다. ※ gdb로 분석을 하기 위해 tmp 디렉토리를 만들어줬고, 그 안..
-
LEVEL 03 cobolt write-upSystem hacking training/Hackerschool LOB 2018. 3. 15. 21:13
[문제] 이번 문제도 간단한 bof 문제인걸 알 수 있다. buffer가 16byte인데 gets() 의 사용으로 인해서 bof 가 일어난다. gets() 는 문자열의 길이를 제한하지 않기 때문에 buffer에 입력을 받는다면 buffer의 영역을 넘어서 return address를 변조할 수 있다. 예상되는 스택은 이러하다. | char buffer[16] | SFP | RET | 버퍼가 작으니 쉘코드를 스택에 직접 올리는 방법은 제한된다. 따라서 환경변수에 쉘코드를 올리고, 쉘코드를 넣은 환경변수의 주소를 return address 로 변조하면 쉘을 띄울 수 있다. like this..
-
LEVEL 02 gremlin write-upSystem hacking training/Hackerschool LOB 2018. 3. 15. 18:53
[문제] buffer가 16byte이고, strcpy()로 인해서 Overflow가 발생할 수 있다. 스택의 모습은 이러하다. | char buffer | SFP | RET | 따라서 16byte + SFP 4byte 를 dummy 값으로 채워주고, return address 를 shellcode의 주소로 변조하면 된다. 이와 같이 shellcode 를 환경변수로 올려주고 페이로드를 이와같이 작성하여 익스하면 된다.
-
LEVEL 01 gate write-upSystem hacking training/Hackerschool LOB 2018. 3. 11. 17:52
LOB 첫 번째 문제를 풀었다. 문제풀이에 앞서 Redhat Linux 6.2는 기본적으로 bash의 버전이 1.14버전이다.이 버전에서는 0xff를 인식하지 못하는 버그가 있다고 한다.0xff 가 0x00과 같은 역할을 하게된다.따라서 중간에 0xff가 들어가게되면 strcpy()같은 문자열을 복사하는 함수에서 복사를 하는 도중 끊기게 된다.그렇지만 bash2는 이 버그를 고친 2.3버전이기 때문에 bash2를 사용하여야 Payload에 0xff를 넣을 수 있다. 이러한 점을 알고있어야한다. 따라서 /bin/bash 대신 /bin/bash2를 사용하여 문제를 풀이하였다. ID : gate / PW : gate 로 로그인을 하면 gremlin 이라는 바이너리와 gremlin.c 라는 c 파일이 존재한다...
-
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() {..