목록전체 글 (285)
tmxklab

1. 문제확인 nc ctf.j0n9hyun.xyz 3013 1) 접속 입력 값을 받고 출력해준 뒤 프로그램이 종료함 2) IDA를 통해 확인 main함수와 /bin/sh을 실행시켜주는 spawn_shell함수가 존재 2-1) IDA(Pseudocode)확인 - main() 3) $checksec를 통해 elf파일에 걸린 메모리 보호기법 확인 2. 접근방법 1) getenv()확인 - getenv()에서 인자 값으로 name변수를 받게 되는데 이 때, bof수행이 가능하다. - 참고로 getenv()는 환경변수 값을 읽어오는 함수이다. 2) 결론 getenv()를 통해 bof를 수행하여 ret값을 spawn_shell()주소로 바꾸면 될 것 같다. 3. 풀이 1) spawn_shell() 주소 확인 spa..

1. 문제확인 nc ctf.j0n9hyun.xyz 3012 1) 접속 시의 내용과 저자를 입력 값으로 받으면 나의 점수를 출력해주고 다시 무한 루프를 도는 프로그램 2) IDA를 통해 확인 2-1) IDA(Pseudocode)확인 - main() get_poem(), get_author(), rate_poem()가 실행되고 점수를 저장하는 dword_6024E0의 값이 1,000,000점을 만족하면 무한 루프를 종료하고 reward()를 실행 2-2) IDA(Pseudocode)확인 - get_author() gets()를 통해 입력 값(시의 저자)을 받고 종료 2-3) IDA(Pseudocode)확인 - get_poem() gets()를 통해 입력 값(시의 내용)을 받아 result변수에 저장 2-4)..

1. 문제확인 nc ctf.j0n9hyun.xyz 3011 1) 접속 입력을받고 출력한 뒤 프로그램이 종료됨 2) IDA를 통해 확인 총 4개의 함수를 볼 수 있음 2-1) IDA(Pseudocode)확인 - main() 2-2) IDA(Pseudocode)확인 - vuln() - fgets()를 통해 s변수에 32bytes까지 입력받음 - 다시 s변수에 저장된 값을 input값에 저장 - replace()를 통해 "I"문자열이 저장된 v7과 사용자의 입력 값이 저장된 input과 v4를 인자로 받음 - replace()의 리턴 값으로 v4를 반환하고 input값에 복사해주는 듯 싶다 - 이후에 v1에 input값을 저장하고 strcpy()를 통해 다시 s변수에 v1의 값을 복사시킨 뒤 s변수를 출력 2..

1. 문제확인 nc ctf.j0n9hyun.xyz 3010 1) 접속 1번 : Binary Boss에 대한 메모리 보호기법 등 정보를 얻을 수 있다. 2번 : 3가지 방법을 통해 돈을 얻을 수 있는 메뉴 3~4번 : 돈을 모아 System Armor와 Shell Sword를 구입할 수 있는 메뉴 5번 : 사용자의 입력을 받을 수 있는 메뉴 2) IDA(Pseudocode)확인 - main() 3) $checksec를 통해 elf파일에 걸린 메모리 보호기법 확인 NX가 걸린 것을 보아 제목에서 처럼 라이브러리에 있는 실행권한을 이용하여 RTL공격을 하면 될 것 같다. 2. 접근방법 1) 결론 read함수를 통해 bof를 일으켜 RTL공격을 실행 이 때, RTL공격에 사용할 system함수와 "/bin/sh..

1. 문제확인 nc ctf.j0n9hyun.xyz 3009 1) 접속 숫자를 입력하면 "do_system+1094"를 포함한 문자열이 출력되면서 종료 2) IDA(Pseudocode)확인 - main() fgets()를 통해 입력 받아 30번째 줄 else문에 들어가면 gets()를 통해 bof를 수행할 수 있음 3) $checksec를 통해 elf파일에 걸린 메모리 보호기법 확인 2. 접근방법 먼저, 30번째 줄 gets()가 bof를 수행할 수 있으므로 fgets()를 통해 입력받아 else문안의 if문이 실행되도록 하자 else문의 if문이 실행되기 위해서는 if문 조건을 만족시켜야 하므로 디버깅을 통해 v10에 어떤 값과 비교하는지 알아보자 ( if(v10==(v6*v5)

1. RTL(Return To Libc) 사용자가 작성한 코드에 없는 함수를 호출하고자 메모리에 이미 적재된 공유 라이브러리의 원하는 함수를 사용할 수 있는 기법이다. 또한, 리눅스의 메모리 보호 기법 중 NX bit나 DEP를 우회하여 공격이 가능하다. 1) DEP(Data Execution Prevention) - 데이터 영역에서 코드가 실행되는 것을 막는 기법 - 공격자가 Heap 또는 Stack영역에 쉘 코드를 저장해서 실행하기 위해서 해당 영역에 실행권한이 있어야 한다. 따라서, DEP가 적용된 경우 실행권한이 없어 쉘 코드가 실행되지 않고 프로그램에 대한 예외처리 후 종료 2) NX bit(Never eXecute Bit) - 메모리에서 데이터 영역을 실행하는 것을 방지해주는 CPU기능 - N..
1. 어셈블리어란? 기계어와 일대일 대응되는 컴퓨터 프로그래밍 저급언어 기계어는 CPU가 직접 해독하고 실행할 수 있는 비트 단위로 쓰여 사람이 이해하기에는 어렵기에 어셈블리어를 통해 기계어를 사람이 쉽게 이해할 수 있도록 표현을 바꿔놓은 것 이다. ex) 기계어 어셈블리어 55 PUSH EBP 8B EC MOV EBP, ESP 2. 어셈블리어 문법 1) Windows(Intel 문법) - 오퍼렌드 위치 : mov dest, src - 메모리 오퍼랜드 : mov eax, [ebx] 2) Linux(AT&T 문법) - 오퍼랜드 위치 : mov src, dest - 메모리 오퍼랜드 : mov (%ebx), %eax 3. 어셈블리어 명령어 종류 1) 데이터 타입 * 부호 없는 정수 BYTE 1byte WORD..

1. 계수 및 기수 정렬 개념 1) 계수 정렬 각 원소를 사이에 비교하지 않는 정렬이며 안정성(stable)을 가짐 임시작업에 사용되는 메모리를 필요로 함 (각 숫자를 counting하여 누적시킬 배열과 정렬된 배열) 정렬할 배열의 원소와 숫자를 counting하여 누적시킨 후 그 값들을 정렬된 배열의 인덱스로 사용 2) 기수 정렬 자리 수를 비교해서 정렬하는 방식 가장 낮은 자리 수부터 비교하여 정렬 수행 (비교 연산을 하지 않음) 기수정렬이 올바르게 동작되기 위해 각 자리에 사용될 정렬 알고리즘이 안정적이어야 함 2. 계수 및 기수 정렬 예제 1) 계수 정렬 2) 기수 정렬 3. 계수 및 기수 정렬 특성 1) 계수 정렬 ① 장점 $n$이 $k$보다 클 경우 $O(n)$의 시간 복잡도를 가짐 평균적인 ..

1. 힙 정렬 개념 자료구조인 힙(Heap)의 사용하여 정렬을 수행하며 여기서는 최대 힙을 사용 입력 자료들을 최대 힙으로 구성(Build-Max-Heap : 정렬되지 않은 입력 자료들로부터 최대 힙을 만듦) 최대 힙을 구성하는 과정에서 힙 특성을 유지하는 역할이 포함되어야함(Max-Heapify : 힙 특성 유지) 구성된 최대 힙에서 Root부터 차례대로 힙에서 꺼내어 저장(Heap-Sort : 배열을 내부 정렬함) ※ 힙(Heap) 추가 개념 힙(Heap) : 완전 이진 트리이며 최대 힙과 최소 힙이 존재 완전 이진 트리(Complete binary tree) : 각각의 노드가 최대 두 개의 자식 노드를 가지며 자식 노드를 추가할 때 왼쪽부터 차례대로 채우는 트리 노드의 높이 : 해당 노드에서 리프에..

1. 합병 정렬 개념 존 폰 노이만(John von Neumann)이 개발한 정렬 알고리즘 비교 기반 정렬이며 분할 정복을 통해 정렬을 수행함 일반적인 방법으로 구현할 때 안정 정렬에 속함 임시로 저장할 리스트나 배열이 필요로 함 입력 자료들을 원소가 하나가 될 때까지 분할한 후, 합치는 과정에서 비교하여 정렬 수행 * 합병 정렬은 다음과 같은 분할 정복을 통해 정렬을 수행함 ① 분할 : 정렬할 $n$개 원소의 배열을 $n/2$개씩 부분 수열 두 개로 분할 ② 정복 : 합병 정렬을 이용하여 두 부분 배열을 재귀적으로 정렬 ③ 결합 : 정렬된 두 개의 부분 배열을 병합하여 정렬된 배열 하나로 만듦 2. 합병 정렬 예제 3. 합병 정렬 특성 1) 장점 안정적인 정렬 알고리즘 자료구조를 리스트로 구성하면 링크..