본문 바로가기

전체 글

(113)
[드림핵 System Hacking Fundamental] Stage 1,2 →3월 14부터 시작해서 4월 2일까지 드림핵 System Hacking 로드맵을 통해 Stage1, 2, 3, 5를 학습했다. (Stage 4보다 5가 진입장벽이 낮아 5를 먼저 진행했다. 4는 이후에 공부할 예정이다.) 여기까지 공부한 내용을 간략하게 정리하려고 한다. Stage1. System Hacking Introduction Stage1은 정말 소개하는 내용으로 별 내용은 없었다. 기본적인 코드를 이해할 수 있는 수준만 되면 해당 로드맵을 따라갈 수 있다고 하면서 C와 python 코드를 제시했다. 제시된 코드를 각각 풀어보고 넘어갔다. Stage2. Background - Computer Science Stage2 는 컴퓨터 사이언스 배경지식을 다루었는데, 지나고 보니 이 부분 내용이 분량이..
[VolgaCTF 2024-pwn] Warm of Pon 보호되어 있는 글입니다.
[드림핵 워게임] basic_exploitation_001 먼저 문제 파일을 다운로드한다. basic_exploitation_001.c를 열어본다. main() 함수부터 보면, 27행에 0x80 크기의 char 배열 buf가 선언되어 있다. 29행에서 gets()함수로 입력받은 값을 buf에 저장한다. gets()함수는 입력값의 크기를 검증하지 않으므로 여기에 stack buffer overflow 취약점이 존재한다. 22행에는 read_flag()함수가 존재하는데 flag파일을 읽어오는 시스템 명령어를 실행한다. 이제 gdb를 이용해 바이너리를 분석해보자. 에서 [ebp-0x80]의 주소를 eax가 가리키게 하고 있다. buf를 eax가 가리키게 한 것으로 해석할 수 있다. 이 상태에서 main 함수의 스택 프레임을 그려보면 다음과 같다. 공격 시나리오는 아래..
[드림핵 워게임] basic_exploitation_000 먼저 주어진 문제파일을 다운로드한다. basic_exploitation_000.c를 열어봤다. main 함수부터 살펴보면, 24행에서 0x80크기의 char 배열 buf 변수를 선언한다. 26행은 그냥 timeout을 걸어놓은 것으로, 취약점과는 관련이 없는 것 같다. 28행의 printf() 는 buf의 주소를 출력해준다. 29행의 scanf()가 취약점과 직접적으로 관련된 부분으로 보인다. buf 변수에 141바이트 만큼 값을 입력하는데 buf의 크기인 0x80(십진수로 128)보다 크므로 overflow가 발생할 수 있다. gdb를 이용해 바이너리를 분석해보자. 에서 scanf() 함수를 호출하기 전 스택 프레임 상태를 확인해보면, 에서 [ebp-0x80]의 주소를 eax가 가리키게 한다. scan..
[드림핵 워게임] Return Address Overwrite 먼저 문제를 다운로드했다. rao.c부터 살펴본다. main 함수부터 보면 char 배열 변수 buf를 0x28만큼의 크기로 선언한다. 그리고 25행에서 scanf()를 이용해 buf에 사용자 입력값을 저장하는데 scanf()에 입력값을 "%s"로만 받으면 입력값 길이를 검증하지 않기 때문에 stack buffer overflow가 발생할 수 있다. 다음으로 get_shell()함수가 눈에 띠는데, execve()함수를 이용해 "/bin/sh"를 실행한다. 즉 get_shell()를 실행하면 shell을 획득할 수 있다. 여기까지 봤을 때 공격 시나리오를 다음과 같이 짤 수 있다. stack buffer overflow 취약점을 이용해서 return address를 get_shell()함수로 overwr..
[UTCTF 2024-misc] CCV 문제 이름인 CCV는 Card Code Verification의 약자인 것 같다. 맞다면 이 문제는 신용카드의 유효성을 검증하는 문제일 것이다. Ubuntu 22.04 환경에서 문제에서 주어진대로 nc를 실행하여 서버에 접속해보았다. PAN, 날짜(MMYY), CSC, CVV를 출력해준다. 해당 신용카드 정보가 유효하면 1을 입력하고 유효하지 않으면 0을 입력하면 된다. 그리고 내가 어떤 값을 입력했는지 스스로 기억하고 있어야 한다. 우선 아무렇게 0과 1을 입력해서 어떻게 결과를 확인해봤다. 여러 번 돌려봤고 위와 같이 결과가 나왔다. 이제 정말 본격적으로 접근해본다. 우선 생소한 용어인 PAN, CSC, CVV을 검색해봤다. PAN은 Primary Account Number의 약자로, 신용카드 앞면에..
[Bomb Lab] Phase3 https://studyforall.tistory.com/98 [Bomb Lab]Bomb Lab이란? Bomb Lab은 컴퓨터 사이언스로 유명한 카네기 멜론 대학교에서 만든 실습 프로그램이다. 이 프로그램을 통해 디버거 사용법을 익히고 바이너리 분석을 연습해볼 수 있다. 폭탄을 터뜨리지 않고 안 studyforall.tistory.com 실습 환경에 대해서는 위의 게시물 하단에 적어놓았다. phase2에 이어 이제 phase3를 시작해본다. disassemble phase_3 명령어를 입력하여 phase_3 함수를 처음부터 끝까지 어셈블리 코드로 출력해보았다. 첫인상: 이번에도 많은 비교(cmp)와 분기(jmp)가 보인다. 그런데 분기가 거의 다 unconditional jump 즉, 해당 줄에 도달하기..
[Bomb Lab] Phase2 https://studyforall.tistory.com/98 [Bomb Lab]Bomb Lab이란? Bomb Lab은 컴퓨터 사이언스로 유명한 카네기 멜론 대학교에서 만든 실습 프로그램이다. 이 프로그램을 통해 디버거 사용법을 익히고 바이너리 분석을 연습해볼 수 있다. 폭탄을 터뜨리지 않고 안 studyforall.tistory.com 실습 환경에 대해서는 위의 게시물 하단에 적어놓았다. phase1에 이어 이제 phase2를 시작해본다. disassemble phase_2 명령어를 입력하여 phase_2 함수를 처음부터 끝까지 어셈블리 코드로 출력해보았다. 첫인상은 비교(cmp)와 분기(je, jmp)가 많다는 것이다. 안전지대를 확인해보자. 까지 도달하면 을 실행할 가능성이 없어지므로 안전지대라고 ..