본문 바로가기

전체 글

(66)
NX-bit binary exploit · Buffer Overflow · 버퍼보다 긴 값을 프로그램의 흐름을 바꾼다. 이 내용은 아래 내용과 서로 연계됩니다. https://riemannk.tistory.com/22 BOF로 쉘따기 · Buffer Overflow · 버퍼보다 긴 값을 입력해서 쉘 코드를 입력받는다. · C언어 코드 #include void setup() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); setvbuf(stderr, 0, 2, 0); } int main.. riemannk.tistory.com 목표 1. 프로그램 분석 2. RTL 개념 설명 3. Exploit 코드 작성 4. 결과 확인 5. 시행착오 6. 참고 1. 프로그램 분석 더보기 1) 값을 입력 받는다. /..
rev-basic-1 (선택 과제) https://dreamhack.io/wargame/challenges/15/comments rev-basic-1 Reversing Basic Challenge #1 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출� dreamhack.io [문제] [문제 풀이] 정답 인증
BOF로 쉘따기 · Buffer Overflow · 버퍼보다 긴 값을 입력해서 쉘 코드를 입력받는다. · C언어 코드 #include void setup() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); setvbuf(stderr, 0, 2, 0); } int main(void) { setup(); char buf[0x100]; printf("What's your name? : "); gets(buf); // Buffer Overflow printf("Hello, "); printf(buf); // Format String Bug printf("!!!\n"); printf("Last greeting : "); // Buffer Overflow * gets(buf); ret..
Dreamhack 공부 내용 정리 및 문제풀이 (Reversing) 보호되어 있는 글입니다.
gdb를 활용한 간단한 바이너리 분석과 보고서 작성 1. Stack Frame 더보기 Stack Frame: Stack을 관리하는 일종의 기법 어떻게 관리하는가? Stack Frame은 프링글스 칩처럼 값을 위에서 아래로 집어넣고, 나중에 넣은 순서대로 빼내는 LILO(Last Input Last Outpu)방식을 사용한다. 그래서 다른 함수로 들어갈때는 그자리에 백업할 복귀주소를 넣어준뒤, 모든 함수가 다 끝나면 그 부분의 Stack을 소멸시키고, 복귀주소로 넘어가준다. * Stack Frame 함수 프롤로그 push rbp (rbp를 백업) mov rbp, rsp (rbp를 rsp의 위치로 이동) * Stack Frame 함수 에필로그 leave : mov rsp, rbp (esp의 위치는 ebp로 이동) pop rbp (rbp값을 빼감) ret : ..
python과 pwntools 활용법 익히기 오늘의 과제: pwntools의 기능을 공부하고 코드를 작성하여 보고서 작성 목차 ● pwntools란 무엇인가? ● pwntools의 기초 사용법 더보기 ○ pwntools 설치 ○ pwntools 실행 ● 소스코드 ▶ pwntools란 무엇인가? 더보기 · exploit용으로 사용하냐, 다른 프로그램용으로 사용하냐에 따라 다름 · 역사적으론 exploit-writing DSL용도로 사용됨 · 아래 명령어로 간단히 실행 가능 >>> from pwn import * · 2.0버전부터는 두가지 목적이 있음 · 보통의 파이썬 모듈 구조를 가짐으로써, 다른 사용자도 친숙하고 빠르게 pwntools사용 · 더 많은 side-effects 발견 (주로 터미널이 raw-mode로 돌아갈때) · 이를 가능케하기 위해..
모두의 코드 C pointer 문제풀이 강좌1. ======================================= 문제 1 * 와 & 연산자의 역할이 무엇인지 말해보세요 (난이도 : 下) & : 참조 연산자 (주소값을 나타냄) 사용 방법: int a = 1; printf("%p\n", &a); 위의 코드를 실행 시키면 변수 a의 주소값이 나온다. (주소값은 실행 할때마다 바뀐다.) 출력값 1) 0x0F9387F2 출력값 2) 0x0F3957F2 * : 역참조 연산자 사용 방법: int a = 4; int *p; *p = &a; printf("%p\n", p); // *p == a (*P는 a의 주소값을 역참조 하므로 a의 값을 나타낸다.) 문제 2 int **a; 와 같은 이중 포인터(double-pointer) 에 대해 생각해 보세요 ..
Q & A Q & A