본문 바로가기

Got

(6)
[ROP_32bit] ropasaurusrex 본 문제는 2013년도 pCTF의 문제이다. 해당 문제는 간단한 풀이만 작성되어 있으며, 해당 기법에 대해 공부하고 싶다면 아래 링크를 참고하기 바란다. 2022.07.10 - [Dreamhack/Wargame] - [Wargame] basic_rop_x86 1. 바이너리 파일 2. 풀이 (1) 보호 기법을 확인한다. 32bit 프로그램으로, NX와 ASLR이 적용되어 있음을 알 수 있다. (2) 바이너리를 실행해보면 입력받은 후, WIN이라는 문자열을 출력하고 종료된다. 아래 사진은 임의로 dasfsd를 입력한 결과이다. (3) IDA를 이용하여, 디컴파일한다. sub_80483F4 함수에서 buf에 입력값을 받아온다. buf의 크기가 136byte인데, 256byte만큼 입력받아오기 때문에 BOF취약..
[Lecture] RELRO (RELocation Read-Only) 1. lazy binding 함수가 처음 호출될 때, 함수의 주소를 구하고 GOT 테이블에 업데이트하는 것을 의미한다. 이는 바이너리가 실행 중에 GOT테이블을 업데이트할 수 있는 쓰기 권한이 있어야 가능하다. 2. ELF의 데이터 세그먼트 프로세스 초기화 및 종료와 관련된 .init_array, .fini_array가 존재한다. .init_array, .fini_array는 프로세스의 시작과 종료에 실행할 함수들의 주소를 저장하고 있다. 이에 해당 위치에 공격자가 임의로 값을 쓸 수 있다면, 프로세스의 실행 흐름을 조작할 수 있는 것이다. 이러한 문제점을 해결하고자, 프로세스의 데이터 세그먼트를 보호하는 "RELRO (RELocation Read-Only)"를 사용한다. 3. RELRO 쓰기 권한이 불..
[ROP_64bit] codegate2018 Qual BaskinRobbins31 1. 바이너리 파일 2. 바이너리 분석 본 글은 ghidra 툴을 이용하여, 분석하였다. ( 아래는 main에 대한 코드만 넣어두었다. 좀 더 자세한 사항은 디컴파일하여 확인해 보는 것을 추천한다. ) 해당 바이너리는 베스킨라빈스31게임과 비슷한 것으로, 횟수 31에서 입력한 값만큼 차감하면서 0이 되면 loss하는 게임이다. 단, 입력값은 1~3중에 입력해야 하는 조건이 존재한다. your_turn() : 사용자가 입력한 값을 필터링하는 함수이다. my_turn() : 컴퓨터가 입력하는 값을 의미하는 함수이다. - 남은 기회가 4일 경우, 컴퓨터가 이기게 된다. - 남은 기회가 0미만 3이상일 경우, 남은 기회에서 -1 된다. - 남은 기회가 1~3일 경우, 컴퓨터가 이기게 된다. undefined8 ..
[Wargame] rop 해당 문제는 강의에 기반한 문제로, 자세한 풀이는 아래 주소를 참고하세요. 2022.07.02 - [Dreamhack/Lecture & Practice] - [Practice] ROP - GOT Overwrite 1. 실습 코드 // Name: rop.c // Compile: gcc -o rop rop.c -fno-PIE -no-pie #include #include int main() { char buf[0x30]; setvbuf(stdin, 0, _IONBF, 0); setvbuf(stdout, 0, _IONBF, 0); // Leak canary puts("[1] Leak Canary"); printf("Buf: "); read(0, buf, 0x100); printf("Buf: %s\n", buf..
[Practice] ROP - GOT Overwrite Ⅰ. ROP(Return Oriented Programming) 정의 리턴 가젯을 사용하여, 복잡한 실행 흐름을 구현하는 기법이다. 공격자는 이를 이용하여, 문제 상황에 맞춰 return to library, return to dl-resolve, GOT overwrite 등의 페이로드를 구성할 수 있다. ROP 페이로드는 리턴 가젯으로 구성되는데, RET단위로 여러 코드가 연쇄적으로 실행되는 모습에서 "ROP Chain"이라고도 부른다. Ⅱ. 실습 1. 실습 코드 // Name: rop.c // Compile: gcc -o rop rop.c -fno-PIE -no-pie #include #include int main() { char buf[0x30]; setvbuf(stdin, 0, _IONBF, 0..
PLT & GOT 1. 라이브러리 정의 자주 사용하는 함수들의 정의를 묶어서, 하나의 라이브러리 파일로 만들고 이를 프로그램이 공유해서 사용할 수 있도록 지원하는 것이다. 같은 함수를 정의해야 하는 일이 줄어들음으로써, 코드 개발의 효율이 높아진다는 장점이 있다. 2. C언어의 라이브러리 C의 표준 라이브러리는 libc이며, 우분투에 기본적으로 탑재되어있다. (실행환경에서는 /lib/x86_64-linux-gnu/libc-2.27.so에 존재한다.) 프로그램에서 공통으로 사용하는 함수 중 C언어의 대표적인 것은 printf, scanf, strlen, memcpy, malloc 등의 함수가 존재한다. 라이브러리는 크게 동적 라이브러리와 정적 라이브러리로 구분된다. 3. 표준 라이브러리의 경로를 확인 명령어 $ ld --v..