전체 글 171

Return to Library(Bypass NX & ASLR)

문제 정보 Exploit Tech: Return to Library에서 실습하는 문제입니다. 풀이 문제 파일인 rtl, rtl.c을 실습 환경에 다운로드 받은 후 rtl.c 코드를 확인해보았다. 소스 코드를 분석한 결과 buf의 크기가 0x30인 반면, 첫 번째 입력과 두 번째 입력에서 모두 버퍼 오버플로우가 존재한다. 또한 /bin/sh와 system@plt가 보이며 이는 컴파일 시 -no-pie로 컴파일 하였기 때문에 주소가 고정되어 있다. 따라서 system(”/bin/sh”)와 같은 쉘을 실행할 수 있다고 알 수 있다. checksec툴을 이용해 PIE가 진짜 비활성화 되어 있는지 확인했다. 익스플로잇을 설계해보면 먼저 카나리를 우회하고 리턴 가젯을 이용해 rdi의 값을 /bin/sh의 주소로 설..

ssp_001(Stack Canary)

ssp_001(Stack Canary) 문제 정보 이 문제는 작동하고 있는 서비스(ssp_001)의 바이너리와 소스코드가 주어집니다. 프로그램의 취약점을 찾고 SSP 방어 기법을 우회하여 익스플로잇해 셸을 획득한 후, “flag” 파일을 읽으세요. “flag” 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다. 플래그의 형식은 DH{…} 입니다. Environment Ubuntu 16.04 Arch: i386-32-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x8048000) 풀이 먼저 Environment에서 환경 정보를 확인해보면 i386인 32비트 리틀 엔디언 방식을 사용했고 어떤 보호 기법..

Return to Shellcode(Stack Canary)

문제 정보 Exploit Tech: Return to Shellcode에서 실습하는 문제입니다. 풀이 문제 파일인 r2s 와 r2s.c 파일을 다운받아서 r2s.c 소스 코드를 먼저 살펴본 결과 buf의 크기는 0x50의 크기인데 첫 번째 입력에 read 함수에 0x100만큼의 입력을 받고 두 번째 입력에 개행문자가 나오기 전에 입력을 받는 gets 함수를 사용하고 있기 때문에 스택 버퍼오버플로우 취약점을 확인할 수 있었다. 다음으로 소스 코드에서init() 함수로 setvbuf로 입력과 출력이 즉시 처리되도록 처리하였는데 인터넷으로 찾아본 결과 이를 통해 CTF나 exploit 개발 시에 버퍼링이 원인이 되는 예상치 못한 상황을 최소화하기 위해 넣은 것이라고 한다. 다음으로는 컴파일 시 -zexecst..

basic_exploitation_001(Stack Buffer Overflow)

문제 정보 이 문제는 서버에서 작동하고 있는 서비스(basic_exploitation_001)의 바이너리와 소스 코드가 주어집니다. 프로그램의 취약점을 찾고 익스플로잇해 “flag” 파일을 읽으세요. “flag” 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다. 플래그의 형식은 DH{…} 입니다. Environment Ubuntu 16.04 Arch: i386-32-little RELRO: No RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8048000) 풀이 먼저 Environment 부분을 확인해보면 리눅스 32비트 아키텍처에 리틀 엔디언 방식인 것을 확인할 수 있고 따로 보호기법도 적용되지 않은 것을 알 수 있다. 문제 ..

basic_exploitation_000(Stack Buffer Overflow)

문제 정보 이 문제는 서버에서 작동하고 있는 서비스(basic_exploitation_000)의 바이너리와 소스 코드가 주어집니다. 프로그램의 취약점을 찾고 익스플로잇해 셸을 획득한 후, “flag” 파일을 읽으세요. “flag” 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다. 플래그의 형식은 DH{…} 입니다. Environment Ubuntu 16.04 Arch: i386-32-little RELRO: No RELRO Stack: No canary found NX: NX disabled PIE: No PIE (0x8048000) RWX: Has RWX segments 풀이 먼저 Environment 부분에서 Arch 부분을 확인했을 때 i386-32-little 라고 되어 있고 이..

Return Address Overwrite(Stack Buffer Overflow)

문제 정보 Exploit Tech: Return Address Overwrite에서 실습하는 문제입니다. 풀이 먼저 문제 파일을 VMWare의 Ubuntu 18.04에 다운받아 확인해 본 결과 소스 코드 안에 쉘을 실행하는 코드가 있다. 해당 rao.c 파일에서 취약점을 분석해본 결과 scanf 함수에서 입력 문자의 길이를 지정하고 있지 않기 때문에 버퍼오버플로우 취약점이 있다고 유추할 수 있다. 스택 버퍼 오버플로우 문제이기 때문에 main 함수의 반환 주소를 get_shell() 함수의 반환 주소로 오버플로우를 통해서 변경한 후 드림핵에서 제공한 접속 정보로 익스플로잇을 해볼 것이다. rao 파일과 rao.c 파일을 받았고 rao파일은 실행하면 Input 화면이 나오고 return 0이 되어서 종료가..

shell_basic(Shellcode)

문제 정보 입력한 셸코드를 실행하는 프로그램입니다.main 함수가 아닌 다른 함수들은 execve, execveat 시스템 콜을 사용하지 못하도록 하며, 풀이와 관련이 없는 함수입니다. flag 위치와 이름 은 /home/shell_basic/flag_name_is_loooooong입니다.감 잡기 어려우신 분들은 아래 코드를 가지고 먼저 연습해보세요! 플래그의 형식은 DH{…} 입니다. 참고 $ cat write.asm section .text global _start _start: ;/* write(fd=1, buf='hello', n=48) */ ;/* push 'hello\\x00' */ mov rax, 0x0a6f6c6c6568 push rax mov rsi, rsp push 1 pop rdi p..

Error & Time based SQL Injection

애플리케이션이 어떻게 동작하는지에 따라서 SQL Injection 공격 형태가 달라진다. 예를 들어, 게시판 서비스에서 해당 취약점이 발생하면 게시물의 제목, 본문을 이용해 데이터베이스의 정보를 획득할 수 있다. 이는 SQL 쿼리가 실행되는 결과를 공격자가 직접 눈으로 확인할 수 있다. 이와 달리 쿼리 결과를 애플리케이션의 기능에서 출력하지 않는 경우도 있는데, 이러한 상황에서 공격을 수행하는 Error based SQL Injection과 Time based SQL Injection이 파생되었다. 이들은 취약점 발생 형태는 같으나 공격 성공 여부를 어떻게 판단하느냐에 따라 명칭이 구분된다. Error based SQL InjectionError based SQL Injection은 임의의 에러를 발생시..

Web Hacking/Study 2023.07.01

ExploitTech: Blind SQL Injection Advanced

기초 과정에서 Blind SQL Injection에 대해서 간략하게 알아보았다. 해당 공격 기법은 임의 데이터를 알아내기 위한 일련의 방법으로 수많은 쿼리를 전송한다. 실제로 애플리케이션을 공격할 때 수많은 쿼리를 전송하게 되면 방화벽에 의해 접속 IP가 차단될 수 있다. 이 뿐만 아니라 알아내려는 데이터의 길이가 길면 길수록 실행해야할 쿼리 또한 늘어나며 그만큼 공격에 들이는 시간이 길어질 수밖에 없다. 이번 코스에서는 Blind SQL Inejction을 통해 데이터베이스의 내용을 효율적으로 알아내기 위한 방법에 대해서 소개하고 방법을 알아보기에 앞서 간략하게 알고리즘에 대해서 설명하고 공격 쿼리를 작성해보도록 할 것이다. Binary Search 이진 탐색 (Binary Search)은 이미 정렬된..

Web Hacking/Study 2023.07.01

Background: SQL Features

[WHA] Background: SQL Features UNION UNION은 다수의 SELECT 구문의 결과를 결합하는 절이다. 해당 절을 통해 다른 테이블에 접근하거나 원하는 쿼리 결과를 생성해 애플리케이션에서 처리하는 타 데이터를 조작할 수 있다. 이는 애플리케이션이 데이터베이스의 쿼리의 실행 결과를 출력하는 경우 유용하게 사용할 수 있는 절이다. 다음은 UNION 절의 사용 예시이다. username 과 password 컬럼에 각각 “Dreamhack”, “DreamHack PW”가 일치하는 데이터를 조회한 것을 알 수 있다. mysql> SELECT * FROM UserTable UNION SELECT "DreamHack", "DreamHack PW"; /* +-----------+-------..

Web Hacking/Study 2023.07.01