[Pwnable] RTL 실습
2021. 3. 7. 18:29
Hacking/Pwnable
Return To Libc(RTL)은 리턴 주소를 라이브러리 내에 존재하는 함수의 주소로 바꿔 NX bit를 우회하는 공격 기법이다. 리눅스 익스플로잇의 최종 목표는 셸 바이너리를 실행하는 것이다. libc.so.6 라이브러리에는 execve , execlp , execl , execvp , system , popen 등 프로그램을 실행할 수 있는 다양한 함수들이 존재한다. 이 중 system 함수를 이용해 "/bin/sh" 문자열의 주소를 system 함수의 인자로 넘겨준 후 호출하면 /bin/sh 바이너리가 실행된다. example1 예제에 NX bit가 추가된 example1_nx를 이용해 RTL을 실습해 보도록 하겠다. 취약점은 이전과 동일하지만 example1_nx에는 NX bit가 적용되어 스..
[Pwnable] NX bit
2021. 3. 7. 16:06
Hacking/Pwnable
앞에서는 프로그램의 취약점을 이용해 실행 흐름을 조작한 뒤 스택 영역에 저장된 셸코드를 실행하였다. 하지만 일반적인 프로그램에서의 스택 메모리는 코드를 실행하는 용도로 사용되는 것이 아니라, 일시적으로 데이터를 읽고 쓰는 데 사용되기 때문에 실행 권한이 있을 필요가 없다. 이러한 이유로 프로그램의 공격을 어렵게 하기 위해, 메모리에 쓰기 권한과 실행 권한을 동시에 부여하지 않는 No-eXecute bit(NX bit)가 등장하였다. //gcc -o example2_x example2.c -fno-stack-protector -z execstack -mpreferred-stack-boundary=2 -m32 //gcc -o example2_nx example2.c -fno-stack-protector -m..
[Pwnable] ELF 동적 분석
2021. 3. 1. 01:39
Hacking/Pwnable
ELF 동적 분석 바이너리를 분석할 때, 바이너리가 실행되며 변화하는 상태를 관찰하기 위해 동적 디버깅이 필요한 경우가 있다. 때문에 리눅스의 실행 파일인 ELF 파일을 동적으로 디버깅하는 방법에 대해 알아보도록 하겠다. 여기선 가장 유명한 ELF 디버거인 gdb(GNU Debugger)를 사용하여 ELF 바이너리를 동적 디버깅하는 방법에 대해 알아보겠다. gdb의 디스어셈블리 문법에는 AT&T와 intel 두 종류가 있다. 이 중 널리 쓰이는 디스어셈블리 문법은 intel 이다. gdb 기본 설정에서의 디스어셈블리 문법은 AT&T이기 때문에, 디버깅 실습을 하기 전에 gdb의 디스어셈블리 문법을 intel로 바꾸어 주어야 한다. .gdbinit는 gdb를 시작할 때 자동적으로 실행할 gdb 명령어들을 ..
[Pwnable] Dreamhack - Memory Corruption - C (I)
2021. 2. 28. 18:46
Hacking/Pwnable
Buffer Overflow C언어에서 버퍼란 지정된 크기의 메모리 공간이라는 뜻이다. 버퍼 오버플로우 취약점은 버퍼가 허용할 수 있는 양의 데이터보다 더 많은 값이 저장되어 버퍼가 넘치는 취약점을 뜻한다. 일반적으로 버퍼 오버플로우는 발생하는 위치에 따라 스택 버퍼 오버플로우, 힙 오버플로우와 같이 나눠서 부른다. 버퍼 오버플로우는 인접한 메모리를 오염시키는 취약점이기 때문에 어떤 메모리를 오염시킬 수 있는지에 따라 공격 방법이 달라지기 때문이다. 그중 스택 버퍼 오버플로우는 지역 변수가 할당되는 스택 메모리에서 오버플로우가 발생하는 경우이다. 스택 버퍼 오버플로우 // stack-1.c #include #include int main(void) { char buf[16]; gets(buf); prin..
[Pwnable] pwndbg 주요 사용법
2021. 2. 27. 12:55
Hacking/Pwnable
GDB GDB(GNU debugger)는 GNU 소프트웨어 시스템을 위한 표준 debugger이다. 실행 방법 gdb [프로그램명] 종료 방법 q (quit_ Ctrl + d 소스 보기 ( gdb 실행 시 소스 폴더에서 구동해야 가능함. ) l : main 함수를 기점으로 소스 출력 l 10 : 10행을 기준으로 출력 l func : func 함수의 소스를 출력 브레이크 포인트 ( 프로그램을 브레이크 포인트에 멈춰서 그 때의 상황을 파악하면서 확인할 때 사용 ) b func : func 함수의 시작 부분에 브레이크 포인트 설정 b 10 : 10행에 브레이크 포인트 설정 프로그램 실행, 종료 ( run kill ) r : 프로그램 수행( 재시작 ) k : 프로그램 수행 종료 역추적 하기 bt : 오류가 발..
[Pwnable] pwntools 주요 사용법 (feat. Dreamhack)
2021. 2. 27. 12:42
Hacking/Pwnable
pwntools는 Gallospled 팀이 개발한 파이썬 익스플로잇 프레임워크로, 익스플로잇을 할 때 유용한 여러 기능들을 제공해 준다. 다음과 같이 파이썬 인터프리터에서 pwn 모듈이 임포트되면 pwntools가 정상적으로 설치되었다는 것을 알 수 있다. remote remote는 원격 서비스에 접속하여 통신할 때 사용되는 클래스이다. p = remote("127.0.0.1", 5000) 위 코드는 127.0.0.1 주소에 열려있는 5000번 포트에 TCP 연결을 맺는다. 연결이 성공적으로 맺어지면 remote 객체를 리턴한다. process process는 로컬 프로세스를 실행하여 통신할 때 사용되는 클래스이다. p = process("/home/theori/binary") 위 코드는 로컬 파일시스템..