목록Pwnable (21)
Iriton's log
blue-whaleDescription 보코가 여러분에게 도움을 요청합니다. "분명 플래그 파일이 있었는데요... 없어졌어요." Docker hub의 dreamhackofficial/blue-whale 레포지토리 (TAG:1) 에서 도커 이미지를 다운받을 수 있습니다.dreamhack.ioDescription보코가 여러분에게 도움을 요청합니다. "분명 플래그 파일이 있었는데요... 없어졌어요." Docker hub의 dreamhackofficial/blue-whale 레포지토리 (TAG:1) 에서 도커 이미지를 다운받을 수 있습니다. 도커 이미지를 분석하여 플래그를 획득하세요.주어진 Dockerfile은 이미지를 빌드할 때 사용한 파일로, 풀이자가 사용할 수 없습니다.플래그 형식은 DH{...} 입니다...
*본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다. Return Oriented Programming리턴 가젯을 사용하여 복잡한 실행 흐름을 구현하는 기법입니다. 공격자는 이를 이용해서 문제 상황에 맞춰 return to library, return to dl-resolve, GOT overwrite 등의 페이로드를 구성할 수 있다.스택 카나리, NX를 적용하여 컴파일한 바이너리를 ROP를 이용한 GOT Overwrite으로 익스플로잇 하는 실습(wargame: rop)를 진행한다.// Name: rop.c// Compile: gcc -o rop rop.c -fno-PIE -no-pie#include #include int main() { char b..
*본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다.Return to Library프로세스에 실행 권한이 있는 메모리 영역은 일반적으로 바이너리의 코드 영역과 바이너리가 참조하는 라이브러리의 코드 영역이다.여기서 공격자가 주목한 것은 다양한 함수가 구현된 라이브러리이다. 몇몇 라이브러리에는 공격에 유용한 함수들이 구현되어 있다. 예를 들어 리눅스에서 C언어로 작성된 프로그램이 참조하는 libc에는 system, execve 등 프로세스의 실행과 관련된 함수들이 구현되어 있다.이런 함수들로 NX를 우회하고 셸을 획득하는 공격을 Return to library라고 불린다.실습을 진행할 코드이다.// Name: rtl.c// Compile: gcc -o rtl..
*본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다.라이브러리프로그램들이 함수나, 변수를 공유해서 사용할 수 있게 한다.자주 사용되는 함수들의 정의를 묶어서 하나의 라이브러리 파일로 만들고, 이를 여러 프로그램이 공유해서 사용할 수 있도록 지원하고 있다.C의 표준 라이브러리인 libc는 우분투에 기본으로 탑재된 라이브러리 링크많은 프로그래밍 언어에서 컴파일의 마지막 단계로 알려져 있다.프로그램에서 어떤 라이브러리의 함수를 사용한다면 호출된 함수와 실제 라이브러리의 함수가 링크 과정에서 연결된다.리눅스에서 c 소스 코드는 전처리, 컴파일, 어셈블 과정을 거쳐 ELF 형식을 갖춘 오브젝트 파일로 번역된다.오브젝트 파일은 실행 가능한 형식을 갖추고 있지만, 라..
*본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다.NX(No-eXecute)실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리하는 보호 기법어떤 메모리 영역에 대해 쓰기 권한과 실행 권한이 함께 있으면 시스템이 취약해지기 쉽다.예를 들어, 코드 영역에 쓰기 권한이 있으면 공격자는 코드를 수정하여 원하는 코드가 실행되게 할 수 있고, 반대로 스택이나 데이터 영역에 실행 권한이 있으면 Return to Shellcode와 같은 공격을 시도할 수 있음.CPU가 NX를 지원하면 컴파일러 옵션을 통해 바이너리에 NX를 적용할 수 있으며, NX가 적용된 바이너리는 실행될 때 각 메모리 영역에 필요한 권한만을 부여받는다.checksec 명령어를 이용하..
Description: 이 문제는 작동하고 있는 서비스(ssp_001)의 바이너리와 소스코드가 주어집니다.프로그램의 취약점을 찾고 SSP 방어 기법을 우회하여 익스플로잇해 셸을 획득한 후, "flag" 파일을 읽으세요."flag" 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다. 취약점 분석#include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1);}void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); a..
*본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다.분석보호기법 탐지보호기법을 파악할 때 주로 사용하는 툴이 checksec다.pwntools를 설치할 때 같이 설치되어 ~/.local/bin/checksec에 위치한다.checksec을 사용하면 간단한 커맨드 하나로 바이너리에 적용된 보호기법들을 파악할 수 있다.만약 해당 커맨드를 사용했을 때 command not found 에러가 발생한다면, ~/.bashrc 파일의 마지막 줄에 다음 줄을 추가한다.export PATH="$HOME/.local/bin/:$PATH" 취약점 탐색1. buf의 주소이 예제에서는 실습의 편의를 위해 buf 의 주소 및 rbp 와 buf 사이의 주소 차이를 알려준다.print..
*본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다. Stack Canary함수의 프롤로그에서 스택 버퍼와 반환 주소 사이에 임의의 값을 삽입하고, 함수의 에필로그에서 해당 값의 변조를 확인하는 보호 기법이다.카나리 값의 변조가 확인되면 프로세스는 강제 종료된다.스택 버퍼 오버플로우로 반환 주소를 덮으려면 반드시 카나리를 먼저 덮어야 하므로 카나리 값을 모르는 공격자는 반환 주소를 덮을 때 카나리 값을 변조하게 된다.이 경우, 에필로그에서 변조가 확인되어 공격자는 실행 흐름을 획득하지 못합니다. Canary의 작동 원리정적 분석스택 버퍼 오버플로우가 발생하는 예제 코드// Name: canary.c#include int main() { char buf[..