LAB 11(Unsafe Unlink)

Hitcon Training 2021. 7. 25. 18:56

Unsafe Unlink 공격이 실행되기 위한 조건 free 시키려는 청크의 이전청크의 사이즈와 free 시키려는 현 청크의 prev_size가 같아야한다. change_item 함수로 청크의 size와 fd를 조작 가능하다. 우선 small bin사이즈 크기 3개 할당. 그 후, Unsafe Unlink의 조건을 맞춰주기 위해 첫번째로 할당한 chunk에 fake chunk를 만들어준다. Fake chunk의 구조는 다음과 같다 prev_size = 0 | size = 0 fd = 원하는 주소(전역변수) - 24 | bk = 원하는 주소(전역변수) - 16 데이터 다음 청크(2번째) prev_size = fake chunk의 사이즈 | 다음 청크 size = 첫번째 chunk의 사이즈 - 1 paylo..

Article Thumbnail
LAB 14(Unsorted bin Attack)

Hitcon Training 2021. 7. 25. 18:53

Create heap void create_heap(){ int i ; char buf[8]; size_t size = 0; for(i = 0 ; i < 10 ; i++){ if(!heaparray[i]){ printf("Size of Heap : "); read(0,buf,8); size = atoi(buf); heaparray[i] = (char *)malloc(size); if(!heaparray[i]){ puts("Allocate Error"); exit(2); } printf("Content of heap:"); read_input(heaparray[i],size); puts("SuccessFul"); break ; } } } atoi = char to int. 입력받은 힙의 사이즈를 정수로 변..

Article Thumbnail
LAB 12(Fastbin attack)

Hitcon Training 2021. 7. 25. 18:47

크기는 전부 16으로 주고, 이름은 AAAA~CCCC, color는 aaaa~cccc 총 3개의 HEAP 할당 index 0을 free index 1을 free 1의 fd가 index 0 index 1의 fd가 index 0을 가리킨다. index1 fd → index 0 다시 index 0을 free index 0 → index 1 → index 0 이때 힙을 3번 할당한다면, 동일한 주소를 2번 반환받을 수 있다. fastbin size의 chunk가 free되고 fastbin에 들어간 뒤, 해당 free된 chunk의 fd의 값의 조작이 가능하다면 malloc의 결과로 원하는 주소를 리턴받을 수 있다 출처: https://dokydoky.tistory.com/460 [#dokydoky] 하지만 in..

Article Thumbnail
LAB 6

카테고리 없음 2021. 7. 25. 18:43

Mitigation Code Stack pivot? 간단한 gadget을 이용하거나 EAX, RAX의 값을 변경(gadger)해 stack 또는 코드의 흐름을 변경하는 기술 gadget을 이용하여 특정 공간에 Fake Stack을 구성해 놓고 Chaining을 하는 기법 특정 영역에 값을 쓸 수 있거나 값이 있는 경우 SFP를 족쳐서 스택을 옮기고 해당 부분의 코드를 실행하는 기법 leave_ret을 이용한 stack pivoting을 하기 위한 전제 조건 페이로드가 저장되어 있는 영역이 존재할 경우 ret까지만 overflow가 발생 페이로드가 저장되어 있는 영역이 없는 경우 입력함수 + leave_ret을 넣을 수 있을 만큼 overflow 발생 일반적으로 stack pivoting을 사용하는 경우 ..

Article Thumbnail
LAB 5

Hitcon Training 2021. 7. 25. 18:41

Mitigation Code #include int main(){ char buf[20]; puts("ROP is easy is'nt it ?"); printf("Your input :"); fflush(stdout); read(0,buf,100); } Exploit 방법 Statically linked로 되어있음. Static link 방식의 경우 파일 생성 시 라이브러리의 내용을 포함시켜 실행파일을 생성한다. 실행파일 내부에 모든 코드가 포함되기 때문에 라이브러리의 연동이 필요없으며 필요한 라이브러리들이 내부에 있기 때문에 관리가 필요없다. 하지만 그만큼 파일 용량이 커지며 동일한 라이브러리를 사용하게 되더라도 해당 라이브러리를 사용하는 모든 프로그램들이 라이브러리내용을 메모리에 패밍시켜야한다는 단점..

Article Thumbnail
LAB 5 - 미완성

Hitcon Training 2021. 7. 25. 18:38

Mitigation Code RTL 관련 문제이다. RTL이란 Return-To-Library의 약자로, NX bit가 걸려 있을때(메모리나 스택에 쉘코드를 올려도 실행이 되지 않음) NX bit을 우회하기 위해 고안된 방법이다. 이 방법은 libc내에 있는 system함수나 execve함수등을 이용하여 직접적으로 쉘을 실행시킬 수 있다. 이를 위해서는 Gadget이 필요함. 중간의 strtol 함수는 long strtol(const char *restrict str, char **endptr, int base); 의 형태이고, char * str = 정수로 변환할 문자열, char **endptr은 숫자로 변경하지 못하는 문자열의 시작 위치, int base는 문자열이 가지고 있는 숫자의 진수 (2~3..

Article Thumbnail
LAB 3

Hitcon Training 2021. 7. 25. 18:37

Mitigation 소스코드 보호기법이 전부 걸려있지 않으니, 프로그램을 실행해도 메모리의 주소는 변함이 없을것이다. 따라서 전역변수 name에 쉘코드를 넣어두고 bof를 통해서 ret에 name의 주소를 주면 쉘코드가 실행될 것이다. Exploit from pwn import * #context.log_level = 'debug' p = process('./ret2sc') e = ELF('./ret2sc') name = 0x804a060 shellcode = "\x90"*5+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80" p.sendlineafter('Name:', shellcode..

Article Thumbnail
Lab 1

Hitcon Training 2021. 7. 25. 18:36

get_flag() 함수 안에 key와 cipher의 배열이 있고, if문을 통해 password와 magic의 값이 일치하면 cipher의 길이만큼 for문을 돌면서 cipher와 key의 배열 요소를 하나하나씩 xor연산하여 flag을 보여준다. /dev/urandom은 유닉스 계열 운영 체제에서 차단 방식의 유사난수 발생기의 역할을 수행하는 특수 파일이다. 그래서 난수 발생된 값과 입력한 값이 같아야 하는데, 실제적으로 입력한 값과 난수 값이 같은 경우는 매우 극악이다. 따라서 이번 문제는 password와 magic을 서로 같게 해서 푸는 방법이 아닌 파이썬을 이용하여 직접 xor연산을 해 푸는 방식으로 변경하였다. import os key = "Do_you_know_why_my_teammate_..

Article Thumbnail
2016 Codegate watermelon

Pwnable 2021. 7. 25. 18:34

이부분은 뭐 딱히 없고 입력 받은 값에 따라서 알맞은 메뉴 출력 함수 main부분 PrintMenu에서 나온 반환 값을 가지고 알맞은 함수 호출 -1을 입력하면 히든 함수를 호출하고, 0~4까지는 정상적인 함수 호출 음악의 개수가 100개가 되면 더이상 추가를 하지 못한다. 이 함수에서는 딱히 취약점이 보이지 않는다. read함수에서도 0x15만큼의 적당한 값을 주어줌 리스트 보기 이 함수는 저장된 플레이리스트의 번호, 음악, 작곡가를 출력해주는데 printf로 출력을 해주기 때문에 카나리 릭이 가능. 그 이외에는 딱히 취약점 부분 없음 리스트 수정 가장 마지막의 read에서 bof 취약점이 발생 공격 시나리오 총 100개의 리스트를 만든다 리스트 수정 함수를 통해 카나리까지 값을 수정하고 리스트를 보는..

Article Thumbnail
SROP

Technique 2021. 7. 25. 18:30

ROP의 변형 sigreturn 함수 이용 sigreturn() 시스템 함수는 Signal을 처리하는 프로세스가 Kernel Mode에서 User Mode 돌아 올때 stack을 복원하기 위해 사용되는 함수 restore_sigcontext() 함수는 COPY_SEG(), COPY() 함수 등 을 이용하여 stack에 저장된 값을 각 레지스터에 복사 즉, ROP와 같이 값을 레지스터에 저장할 수 있는 Gadget이 없어도 sigreturn() 함수를 이용해 각 레지스터에 원하는 값을 저장 가능