[Exploit] Return Oriented Programming (ROP chain)
·
Hacking/Pwnable
Return Gadgetret로 끝나는 어셈블리 조각원하는 명령어 + ret으로 이루어진 가젯들이다가젯(gadgets) : 해당 프로그램이 사용하는 메모리에 이미 있는 기계 명령어  ROP chain리턴 가젯을 사용하여 복잡한 실행 흐름을 구현하는데, 이를 통해 ret2libc, ret2dl-reslove, GOT overwiret 등 payload를 구성할 수 있다.원하는 가젯들을 조합하여 원하는 흐름으로 이어지게 하기 때문에, 한번에 실행 흐름을 제어할 수 없을 때 주로 사용한다.따라서 보통은 ret2libc 등과 조합하여, NX를 bypass 하기 위해 많이 사용된다 * 보통은 pie가 걸려있지 않아야 주소가 code, data segment의 주소가 변경되지 않기에 해당 보호기법이 없어야 사용하기..
[Exploit] Return to Library
·
Hacking/Pwnable
Library자주 사용하는 소스코드를 미리 작성하여 프로그래머가 원할 때 빠르게 사용할 수 있게 가공된 형태컴파일 시간 단축소스 코드를 쉽게 사용 가능소스 코드의 일부를 보호 및 비공개 가능PLT & GOTPLT (procedure linkage table) : 외부 라이브러리에서 함수가 plt에 매핑되어 있다.GOT (golbal offset table) : 함수의 주소를 담고 있는 테이블로 plt가 got를 참조한다.PLT와 GOT에 대한 자세한 설명 : https://m-in-zu.tistory.com/77 Static Link vs Dynamic LinkCompile | 컴파일컴파일은 인간이 이해할 수 있는 언어로 작성된 소스코드를 CPU가 이해할 수 있는 언어로 변환하는 작업즉, 바이너리 형태로..
[Mitigation] ASLR
·
Hacking/Pwnable
Definition | 정의Address Space Layout Randomization바이너리가 실행될 때마다 스택, 힙, 공유 라이브러리 등을 임의의 주소에 할당하는 기법 커널에서 지원하는 보호기법으로, 운영체제마다 ASLR이 구현되어 있는 방식이 다르다리눅스를 기반으로 설명할 예정ASLR 확인하기명령어cat /proc/sys/kernel/randomize_va_space0 : No ASLR1 : Conservative Randomization - Stack, Library, vdso등 2 : Conservative Randomization + brk : brk로 할당한 영역까지checksec리눅스의 경우, checksec로 확인할 수 있음대부분의 보호 기법은 checksec로 확인 가능하다 (win..
[Mitigation] NX
·
Hacking/Pwnable
Definition | 정의No-eXecute의 약자로, 실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리하는 보호기법 코드 영역에 쓰기 권한이 있으면 공격자가 코드르 수정하여 원하는 코드가 실행되게 할 수 있음스택, 데이터1 영역에 실행권한이 있으면 스택에 쉘 코드를 넣어 코드가 실행될 수 있음이러한 상황을 막기 위해 NX가 적용됨 보호기법들마다, 적용되는 단계가 다르다NX bit의 경우 CPU에서 지원해줌NX 확인하기gdb의 vmmappwndbg> vmmapLEGEND: STACK | HEAP | CODE | DATA | RWX | RODATA Start End Perm Size Offset File 0x40000..
[Mitigation] Stack Canary
·
Hacking/Pwnable
Definition | 정의스택 버퍼와 반환 주소 사이에 임의의 값을 삽입하여 함수의 에필로그에서 해당 값의 변조를 확인하는 보호기법만약, 스택 카나리의 값이 변조되었다면 프로세스는 강제 종료됨 스택 버퍼오버플로우로 반환 주소를 덮으면서, 스택 카나리의 값을 덮는 것을 피할 수 없음→ 에필로그에서 변조가 확인되며 해커가 실행 흐름을 가져올 수 없음 카나리를 잘못 덮어쓰면 stack smashing detected라는 경고와 함께 종료된다 카나리 정적 분석스택 카나리를 만드는 과정이 프롤로그에, 변조를 확인하는 과정이 에필로그에 추가됨프롤로그mov rax,QWORD PTR fs:0x28mov QWORD PTR [rbp-0x8],raxxor eax,eaxlea rax,[rbp-0x10]..
gdb를 pwntools와 디버깅하기
·
Hacking/Pwnable
pwntools의 입력 값을 해당 프로세스 (혹은 서버)에 준 채로 디버깅을 하고 싶을 때 사용한다작성한 payload가 이상해서 사용해보려고 한다 gdb (process 이름) -p (pwntools로 작성한 코드의 pid) 이런식으로 작성해도 됨 나는 안됨 gdb attach   payload를 보내기 전에 gdb.attech(process 변수 이름)코드를 추가해준다  현재 오류를 살펴보면zombie 프로세스를 연결했다는 점이 가장 중요하다 즉, 해당 프로세스가 gdb랑 연결된 후에 그냥 종료되었기 때문이라는 것그래서 pause() 명령어를 추가해주었다 gdb.attach(p)pause() 이렇게 하면이렇게 하면 디버거가 정상적으로 붙어 payload를 확인할 수 있다. 디버거 무한로딩이상하게 c를..
[Memory Corruption] Stack Buffer Overflow
·
Hacking/Pwnable
Stack Buffer Overflow 스택에 위치한 버퍼에 버퍼의 크기보다 많은 데이터가 입력되어 발생하는 버그  *stack overflow : 스택 영역이 너무 많이 확장되면서 발생하는 버그  Buffer (버퍼)데이터가 목적지로 이동되기 전에 보관되는 임시 저장소 데이터가 처리되는 속도가 다른 두 장치 > 버퍼 : 완충작용을 해줌버퍼가 가득 찰 때까지 유실되는 데이터 없이 통신 가능속도가 다른 두 장치에서 안정적으로 목적지에 도돨하도록 함→ 데이터가 저장될 수 있는 모든 단위를 의미 ex) 스택 지역 변수 : 스택 버퍼 / 힙 지역 변수 : 힙 버퍼 *버퍼링 : 송신 측의 전송 속도가 느림 → 수신 측의 버퍼가 채워질 때까지 대기 Buffer Overflow (버퍼 오버플로우)버퍼가 넘치는 것을 ..
[Exploit] ShellCode(2) - execve shell code
·
Hacking/Pwnable
shell : 운영체제에 명령을 내리기 위해 사용되는 사용자 인터페이스kernel : 운영체제의 핵심 기능을 하는 프로그램  shell 획득 → 시스템 제어 → 시스템 해킹 성공execve shell code임의의 프로그램을 실행하는 shell code → 서버의 shell을 획득할 수 있음 execve("/bin/sh", null, null)syscallraxarg0 (rdi)arg1 (rsi)arg2 (rdx)execve0x3bconst char *filenameconst char *const *argvconst char *const *envp rax : 0x3brdi : "/bin/sh"rsi : NULLrdx : NULL* NULL : xor register register;Name: execve..
[Exploit] ShellCode(1) - orw shell code
·
Hacking/Pwnable
Exploit : 해킹 분야에서 상대 시스템을 공격하는 것 ShellCode 익스플로잇을 위해 제작된 어셈블리 코드 조각목적 ) shell을 획득하기 위함* 어셈블리어 ↔ 기계어 : 일대일 대응 ▶ 원하는 모든 명령을 CPU에 내릴 수 있음orw shell code 파일을 열고, 읽은 뒤 화면에 출력해주는 shell codechar buf[0x30];int fd = open("/tmp/flag", RD_ONLY, NULL);read(fd, buf, 0x30); write(1, buf, 0x30);>/tmp/flag를 읽는 shell code를 c언어 형식의 의사코드로 표현한 것 syscallraxarg0 (rdi)arg1 (rsi)arg2 (rdx)read0x00unsigned int fdchar* bu..