본문 바로가기

Pwnable

(44)
pwn | dart master write up checksec 으로 확인한 보호기법Partial RELRO 라 GOT Overwrite 가 가능NX 켜져있어서 셸코드 실행 XPIE가 켜져있어서 leak 필요 공격 방향일단 PIE가 켜져있으니까 바이너리와 libc의 베이스 주소를 따기 위해 leak해야됨  정적분석을 먼저 해보자__int64 __fastcall main(int a1, char **a2, char **a3){  void *v3; // rbx  void *v4; // rbx  __int64 v5; // rax  __int64 v6; // rax  __int64 v7; // rax  __int64 v8; // rax  __int64 v9; // rax  __int64 v10; // rax  unsigned int (__fastcall ***..
[DreamHack] basic_exploitation_003 Write-Up NX 보호 기법이 켜져있다. 쉘 코드가 실행되지 않다는 뜻이다. Partial RELRO이므로 GOT Overwrite 가 가능하다.#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); alarm(30);}void get_shell() { system("/bin/sh");}int main(int argc, char *argv[]) { char *heap..
[DreamHack] format string bug Write-Up 문서화 기반 : Exploit Tech: Format String Bug | Dreamhack  PIE가 활성화되어 있다.PIE로 인해 코드영역의 주소가 계속 바뀌니까 changeme의 주소도 계속 바뀐다.// Name: fsb_overwrite.c// Compile: gcc -o fsb_overwrite fsb_overwrite.c#include #include #include void get_string(char *buf, size_t size) { ssize_t i = read(0, buf, size); if (i == -1) { perror("read"); exit(1); } if (i 0 && buf[i - 1] == '\n') i--; buf[i] = 0; }}int..
[DreamHack] PIE, RELRO, Out of Bounds Keywords && Quiz Position Independent Executable (PIE) 상대 참조(Relative Addressing): 어떤 값을 기준으로 다른 주소를 지정하는 방식Position Independent Code (PIC): 어떤 주소에 매핑되어도 실행 가능한 코드. 절대 주소를 사용하지 않으며 일반적으로 rip를 기준으로 한 상대 주소를 사용함.Position Independent Executable (PIE): 어떤 주소에 매핑되어도 실행 가능한 실행 파일. PIE의 코드는 모두 PIC이다. 자체적으로 보호 기법은 아니지만 ASLR이 적용된 환경에서는 시스템을 더욱 안전하게 만드는 효과가 있음. 최신 gcc는 기본적으로 PIE 컴파일을 함.Partial Overwrite: 어떤 값을 일부분만 덮는 공격 ..
[DreamHack] Out of bound Write-Up ASLR이 적용되어 있고, 바이너리에는 NX와 Canary가 적용되어 있고, PIE는 적용 XASLR이 적용되어 있기 때문에 실행 시마다 스택, 라이브러리 등의 주소가 랜덤화NX가 적용되어 있기 때문에 임의의 위치에 셸코드를 집어넣은 후 그 주소의 코드를 바로 실행 XCanary가 적용되어 있기 때문에 스택 맨 위에 존재하는 SFP, RET과 그 뒷 주소 변경불가PIE가 적용되지 않기 때문에 해당 바이너리가 실행되는 메모리 주소가 랜덤화 X (=데이터 영역의 변수들은 항상 정해진 주소에 할당된다.) 문제 코드#include #include #include #include #include char name[16];char *command[10] = { "cat", "ls", "id", "p..
[Dreamhack] basic_exploitation_001 Write-Up Description이 문제는 서버에서 작동하고 있는 서비스(basic_exploitation_001)의 바이너리와 소스 코드가 주어집니다.프로그램의 취약점을 찾고 익스플로잇해 "flag" 파일을 읽으세요."flag" 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다.플래그의 형식은 DH{...} 입니다. #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_handle..
[DreamHack] Return Address Overwrite Write-Up // Name: rao.c// Compile: gcc -o rao rao.c -fno-stack-protector -no-pie#include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0);}void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL);}int main() { char buf[0x28]; init(); printf("Input: "); scanf("%s", buf); return 0;}buf 배열은 0x28 바이트 크기로 선언된 40바이트 크기의 버퍼인데, scanf 함수를 사용하여..
[DreamHack] shell_basic Write-Up Description입력한 셸코드를 실행하는 프로그램이 서비스로 등록되어 작동하고 있습니다.main 함수가 아닌 다른 함수들은 execve, execveat 시스템 콜을 사용하지 못하도록 하며, 풀이와 관련이 없는 함수입니다.flag 파일의 위치와 이름은 /home/shell_basic/flag_name_is_loooooong입니다.감 잡기 어려우신 분들은 아래 코드를 가지고 먼저 연습해보세요!플래그 형식은 DH{...} 입니다. DH{와 }도 모두 포함하여 인증해야 합니다.  문제에서는 execve, execveat를 사용하지 못하도록 했으며, flag를 읽어야 하므로 orw (Open Read Write)  셸코드를 사용하는 것으로 보인다.  // shell_basic.c// Compile: gcc ..