보안 스터디/시스템 해킹

0. 프롤로그https://dreamhack.io/wargame/challenges/353 Return to LibraryDescription Exploit Tech: Return to Library에서 실습하는 문제입니다.dreamhack.io  1. 사전 공부 및 작업2. 문제   3. 코드 분석  4. 스택 구조   5. 예상 공격 방법   6. 카나리 값 획득   7. system.의 plt 주소 확인8. 리턴 가젯   9. /bin/sh의 주소 찾기10. 실행 11. 에필로그시간 투자를 굉장히 많이함.
프롤로그 지금까지 내용들 정리해보면Return Address Overwrite : 반환 주소를 악성 함수의 주소로 덮어서 셸 획득Stack Canary : 스택 프레임의 반환 주소 전에 랜덤한 카나리를 주입하여 반환 주소를 덮기 어렵게 함Return to Shellcode : 카나리를 우회하고, 셸 코드를 주입한 버퍼의 주소로 반환 주소를 덮어서 셸 획득ASLR : 임의 버퍼의 주소를 알기 어렵게 함NX : 각 세그먼트의 불필요한 실행권한을 제거함으로써 공격자가 임의 버퍼에 주입한 코드를 실행하기 어렵게함 NX를 우회하기 위해 RTL(Return To Libaray)가 나옴  Return to LibraryNX로 인해 공격자가 버퍼에 주입된 셸 코드를 실행하기는 어려워졌으나, 반환 주소 덮는 것은 여전히..
라이브러리컴퓨터 시스템에서 , 프로그램들이 함수나 , 변수를 공유해서 사용할 수 있게 함.printf, scanf, strlen 등 C프로그래머들이 코드를 작성하면서 자주 사용하는 함수들의 정의를 묶어서 하나의 라이브러리 파일로 만들고, 이를 여러 프로그램들이 공유해서 사용할 수 있도록 지원함.-> 같은 함수를 반복적으로 정의해야하는 수고를 덜 수 있어서 코드 개발의 효율이 높아짐 각 언어에서는 범용적으로 많이 사용하는 함수들(printf...)은 표준 라이브러리로 제작되어있음.C의 표준 라이브러리인 libc는 우분투에 기본적으로 탑재됨./lib/x86-64-linux-gnu/libc.so.6에 위치.   링크컴파일 되는 과정전처리(.i) -> 컴파일(.s) -> 어셈블(.o) -> 링킹 즉 어셈블 까지..
프롤로그 화이트햇 하면서, 스택오버플로우랑 카나리 기법 공부하고, 따로 정리는 안 하였다. NX No-eXecute(NX) : 실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리하는 보호 기법. 메모리 영역에 대해 쓰기 권한과 실행 권한이 함께 있으면 시스템이 취약해 지기 쉽다. 그래서 CPU가 NX를 지원하면, 컴퍼알러 옵션을 통해 바이너리에 NX를 적용할 수 있고, NX가 적용된 바이너리는 실행될 때 각 메모리 영역에 필요한 권한만을 부여받는다. 어떤 보호 기법이 적용되었는지 확인하려면 checksec 파일 를 쓰면 보호 기법이 나온다 $ checksec ./nx [*] '/home/dreamhack/nx' Arch: amd64-64-little RELRO: Partial RELRO S..
프롤로그 되게 오랫동안 버려두었던...시스템 호출... 어려운 것도 있고...레지스터도 뒤지게 많고...이참에 한 번에 정리하고 제대로 해보자. 문제 https://dreamhack.io/wargame/challenges/410 shell_basic Description 입력한 셸코드를 실행하는 프로그램이 서비스로 등록되어 작동하고 있습니다. main 함수가 아닌 다른 함수들은 execve, execveat 시스템 콜을 사용하지 못하도록 하며, 풀이와 관련이 없는 dreamhack.io 사전 정보 syscall : 운영체제의 커널이 제공하는 서비스에 대한 프로그램의 요청을 말한다. open : 파일을 열거나 생성하기 위한 시스템 호출이다. 파일을 열 때 필요한 정보를 지정하고, 파일이 성공적으로 열리면 ..
프롤로그 다시 한 번 해보자.... 아직 아무것도 모르겠긴 한데 무지성으로 박으면 할 만 하겠지? execve 셸코드 내가 알고 있던 건, exec 함수군들은, 인자로 받은 프로그램을 자신이 현재 실행중인 메모리에 덮어쓰기 하여 실행시키는 것으로 알고 있다. 그래서 execve 셸코드를 한 번 해보자. execve("/bin/sh", null, null) 이걸 실행할려면, 환경변수도 Null, 넘겨줄 인자 배열도 Null이다. 고로, syscall 은 execve, arg1(rsi)= 0(null), arg2(rdx) = 0 으로한다 ;Name: execve.S mov rax, 0x68732f6e69622f push rax mov rdi, rsp ; rdi = "/bin/sh\x00" xor rsi, r..
용어 정리 익스플로잇 : 해킹 분야에서 상대 시스템을 공격하는 것. 상대 시스템에 침투하여 시스템을 악용하는 해킹 셸코드 : 익스플로잇을 위해 제작된 어셈블리 코드 조각. 셸(Shell) : 사용자가 운영체제와 상호작용할 수 있도록 하는 명령줄 인터페이스 파일 서술자 (fd) : 유닉스 계열의 운영체제에서 파일에 접근하는 소프트웨어에 제공하는 가상의 접근 제어자. 0번은 입력, 1번은 출력 orw 셸코드 작성 char buf[0x30]; int fd = open("/tmp/flag", RD_ONLY, NULL); read(fd, buf, 0x30); write(1, buf, 0x30); /tmp/flag 파일을 열고, 읽은 뒤 화면에 출력해주는 것을 어셈블리로 구현해보자. (1) int fd = open..
프롤로그 솔직히 가상머신에서 VI 편집기 열어가면서 하기 너무 귀찮을 거 같아서 Visual Stduio Code 에서 어떻게든 하고 싶어서 이것저것 찾아보았는데, wsl2 버전을 설치해보라는 피드백을 받아서 한 번 설치해보 1. wsl2 설치하기 https://webnautes.tistory.com/1847 WSL2를 설치하여 Ubuntu 22.04 사용하는 방법 Windows 11에 WSL2 ( Windows Subsystem for Linux )를 설치한 후, Ubuntu 22.04를 설치한 과정을 다루고 있습니다. Windows 10에서도 거의 동일하게 진행가능합니다. 2017. 12. 15 최초작성 2021. 05. 19 2021. 08. 01 2022. 11. 25 webnautes.tisto..
프롤로그 저번 글에서 WSL을 이용하여 VS코드에서 pwndbg를 사용하려고 하였다. 그러나 계속 gdb에서 메모리에 접근할 수 없다고 나오면서 원인을 파악할 수 없었다. 이를 해결하는 법을 위에 3대의 컴퓨터에서 다시 설치하고 우분투 재설치만 5번을 해봤는데 되지 않아서 가상머신을 이용하는 방식을 이용하기로 하였다. gdb에 대한 뜻은 아래 글에서 적었지만 별 내용은 없을 것이다. https://taesan-smj.tistory.com/11 [드림핵] Tools : gdb (시스템 해킹) gdb란? gdb(GNU debugger) : 리눅스의 대표적인 디버거로, 오픈소스로 개발되어 있어서 무료 설치 가능하다. 오래되었기에 다양한 플러그인이 개발되어있다. gdb 설치하기 1. VS코드실행 2. TERMI..
gdb란? gdb(GNU debugger) : 리눅스의 대표적인 디버거로, 오픈소스로 개발되어 있어서 무료 설치 가능하다. 오래되었기에 다양한 플러그인이 개발되어있다. gdb 설치하기 1. VS코드실행 2. TERMINAL을 우분투로 변경 3. 리눅스 업데이트 $sudo apt-get update 4. gdb 설치 git clone https://github.com/pwndbg/pwndbg cd pwndbg ./setup.sh 5. 설치 확인 $gdb gdb 실습 1. 파일 작성 2. 디버그 확인 entry? 리눅스는 실행파일의 형식으로 ELF(Executable and Linkable Format)를 규정한다. - 헤더 : 실행에 필요한 여러 정보 - 여러 섹션 : 컴파일된 기계어 코드, 프로그램 문자..
성밍쟁
'보안 스터디/시스템 해킹' 카테고리의 글 목록