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 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