[Dreamhack] file-download-1 File Download 취약점이 존재하는 웹 서비스입니다. flag.py를 다운로드 받으면 플래그를 획득할 수 있습니다. # 접속 - Home Navigation Bar에 Home과 Upload My Memo가 링크로 걸려있음을 확인할 수 있음 메모를 추가할 경우 Home에서 바로 확인이 가능한 형태이며 해당 메모를 클릭하면 내용을 볼 수 있음 - upload 파일의 이름과 내용을 작성하여 메모를 추가할 수 있는 페이지 - read upload했던 메모를 확인할 수 있음 url을 확인했을 시 get parameter로 파일 이름을 이용하고 있음 # 코드 확인 - app.py 파일을 upload하는 부분에서는 find 함수를 통해 ".."을 필터링하고 있..
basic_rop_x86 이 문제는 서버에서 작동하고 있는 서비스(basic_rop_x86)의 바이너리와 소스 코드가 주어집니다. Return Oriented Programming 공격 기법을 통해 셸을 획득한 후, “flag” 파일을 읽으세요. “flag” 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다. 플래그의 형식은 DH{…} 입니다. # 문제 분석 - 소스 코드 main 함수에서 read 함수와 write 함수를 사용함 initialize 함수에서 puts 함수를 사용함 → 인자를 하나만 필요로 하기 때문에 이를 활용하여 페이로드를 작성하면 좋을 것 데이터를 읽어들일 수 있는 함수는 read 함수이며, 이를 통해 system 함수의 주소를 구하게 된다면 이미 ROP 페이로드가 ..
basic_rop_x64 이 문제는 서버에서 작동하고 있는 서비스(basic_rop_x64)의 바이너리와 소스 코드가 주어집니다. Return Oriented Programming 공격 기법을 통해 셸을 획득한 후, “flag” 파일을 읽으세요. “flag” 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다. 플래그의 형식은 DH{…} 입니다. # 문제 분석 - 소스 코드 main 함수에서 read 함수와 write 함수를 사용함 둘 중 하나의 GOT를 읽어 libc.so.6가 매핑된 영역의 주소를 구하고, 이를 통해 system 함수의 주소를 얻을 수 있을 것 데이터를 읽어들일 수 있는 함수는 read 함수이며 이를 통해 system 함수의 주소를 구하게 된다면 이미 ROP 페이로드가 ..
out_of_bound 이 문제는 서버에서 작동하고 있는 서비스(out_of_bound)의 바이너리와 소스 코드가 주어집니다. 프로그램의 취약점을 찾고 익스플로잇해 셸을 획득하세요. “flag” 파일을 읽어 워게임 사이트에 인증하면 점수를 획득할 수 있습니다. 플래그의 형식은 DH{…} 입니다. # 문제 분석 - 소스 코드 command에 접근하는 idx에 대한 검증이 없으므로 oob 가능 system 함수는 const char * 인수가 필요하므로 name 배열에서 0번째 인덱스부터 3번째 인덱스까지 "cat flag" 문자열을 저장하고 있는 곳의 주소를 저장한다면 해당 주소를 따라가 system("cat flag")가 출력될 것임 따라서 name[4] 위치부터 "cat flag" 문자열을 저장하고 그..
rop Exploit Tech: Return Oriented Programming에서 실습하는 문제입니다. # 문제 분석 - ROP (Return Oriented Programming) 리턴 가젯을 사용하여 복잡한 실행 흐름을 구현하는 기법 ROP 페이로드는 리턴 가젯으로 구성되며, ret 단위로 여러 코드가 연쇄적으로 실행되는 모습에서 ROP Chain이라고도 불림 - 소스코드 저번 문제와 달리 system 함수를 호출하지 않아 PLT에 등록되지 않으며 "/bin/sh" 문자열도 데이터 섹션에 기록되지 않음 따라서 system 함수를 익스플로잇에 사용하기 위해서는 함수의 주소를 직접 구해야하고 "/bin/sh" 문자열을 사용할 다른 방법을 고민해보아야 함 // Name: rop.c // Compile:..
ssp_001 이 문제는 작동하고 있는 서비스(ssp_001)의 바이너리와 소스코드가 주어집니다. 프로그램의 취약점을 찾고 SSP 방어 기법을 우회하여 익스플로잇해 셸을 획득한 후, “flag” 파일을 읽으세요. “flag” 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다. 플래그의 형식은 DH{…} 입니다. # 문제 분석 - checksec 확인 32bit 환경 canary 존재 NX enabled 이므로 스택 내 실행 권한 X - 소스코드 옵션 선택 F: box 배열에 내용을 입력할 수 있으며 이때 bof는 발생하지 않음 P: box 배열 내의 원소를 index로 접근할 수 있으며 이때 index에 대한 검증 과정이 없기 때문에 oob read 가능 E: name 배열에 내용을 입력..
Return to Library Exploit Tech: Return to Library에서 실습하는 문제입니다. # Review Return Address Overwrite: 반환 주소를 악성 함수의 주소로 덮어서 셸 획득 Stack Canary: 스택 프레임의 반환 주소 전에 랜덤한 카나리를 주입하여 반호나 주소를 덮기 어렵게 함 Return to Shellcode: 카나리를 우회하고, 셸 코드를 주입한 버퍼의 주소로 반환 주소를 덮어서 셸 획득 ASLR: 임의 버퍼의 주소를 알기 어렵게 함 NX: 각 세그먼트에 불필요한 실행권한을 제거함으로써 공격자가 임의 버퍼에 주입한 코드를 실행하기 어렵게 함 # 문제 분석 - Return to Library NX로 인해 공격자가 버퍼에 주입한 셸 코드를 실행하..
Return to Shellcode Exploit Tech: Return to Shellcode에서 실습하는 문제입니다. # 문제 분석 - Return to Shellcode 반환 주소를 shellcode가 저장된 곳으로 우회하여 프로그램의 실행 흐름을 조작하는 것 해당 문제는 카나리를 우회하고, 쉘 코드와 Return Address Overwrite를 이용하여 쉘을 획득할 수 있음 - Checksec 카나리가 적용되어 있음 - 소스코드 buf의 주소 및 rbp와 buf 사이의 주소 차이를 알려줌 스택 버퍼인 buf에 총 두 번의 입력을 받음 → 두 입력 모두에서 오버플로우 발생 // Name: r2s.c // Compile: gcc -o r2s r2s.c -zexecstack #include #incl..
Return Address Overwrite Exploit Tech: Return Address Overwrite에서 실습하는 문제입니다. # 문제 분석 - Return Address Overwrite 오버플로우 발생 시 반환 주소(Return Address)를 조작하여 실행흐름을 바꾸는 기법 - checksec - 함수 목록 get_shell 함수를 이용하면 쉘을 획득할 수 있을 것임 - main 함수 scanf는 길이 검증을 하지 않기 때문에 buffer의 크기를 넘어 스택 영역을 덮어 쓸 수 있을 것임 %s는 문자열을 입력받을 때 사용하는 것으로, 입력의 길이를 제한하지 않으며, 공백인 문자로 띄어쓰기, 탭, 개행 문자 등이 들어올 때까지 계속 입력을 받는다는 특징이 있음 정확히 n개의 문자만 입력..
basic_exploitation_001 이 문제는 서버에서 작동하고 있는 서비스(basic_exploitation_001)의 바이너리와 소스 코드가 주어집니다. 프로그램의 취약점을 찾고 익스플로잇해 “flag” 파일을 읽으세요. “flag” 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다. 플래그의 형식은 DH{…} 입니다. # 문제 분석 - checksec 확인 canary가 없어 ret address 조작하여 프로그램의 실행흐름 변조 가능 - 함수 목록 확인 read_flag를 통해 플래그를 획득할 수 있을 것 같음 - main 함수 buffer의 크기가 0x80이므로 dummy(0x80) + ebp(0x4) + ret(0x4) 로 페이로드를 구성하면 프로그램의 흐름을 조작할 수 ..