[Webhacking.kr] 14번
2021. 5. 13. 17:34
Wargame/Webhacking.kr
Java Script 문제 입력을 하고 버튼을 클릭하면 input_pwd 의 파라미터 값으로 전달된다. input_pwd의 값이 ul 변수 값과 동일할 경우 사이트를 이동시킨다. ul 값은 다음과 같다.
[HITCON training] lab 12 secretgarden
2021. 5. 11. 22:12
Wargame/etc
1. 문제 main 함수 add() 함수 - 0x28만큼 malloc() 할당한 후 변수 s에 반환된 포인터 저장 - 입력받은 size 만큼 malloc() 할당 후 변수 buf에 반환된 포인터 저장 - (DWORD)s에 1을 저장하고, (QWORD)s+1에 buf 값을 저장하고 (char*)s +16에 문자열을 저장한다.(color) - &flowerlist(전역변수) + size(HIDWORD)에 s 값을 저장하고 flowercount(전역변수) 값을 증가시킨다. struct flower{ int vaild ; char *name ; char color[24] ; }; 사실 flower 구조체를 위해 처음에 0x28만큼 malloc() 할당한 것이다. flower->valid 에 1을 넣은 것 flo..
[Heap exploitation] Fastbin dup
2021. 5. 11. 21:48
Hacking/Pwnable
Double Free Double Free는 해제된 힙 청크를 다시 해제할 때 발생하는 버그이다. 힙을 해제하면 bin이라는 연결 리스트에 추가되고, 이는 힙을 재할당할 때 참조된다. 해당 버그가 발생하면 연결 리스트에 중복된 힙 주소를 추가하기 때문에 두 개의 객체가 동일한 메모리를 사용할 수 있다. // gcc -o dfb2 dfb2.c #include int main() { char *ptr = malloc(32); // 0x602010 char *ptr2 = malloc(32); // 0x602040 free(ptr); free(ptr2); free(ptr); return 0; } Double Free를 발생시키는 코드이다. 모두 free 한 이후에 fastbin[1] 의 모습은 다음과 같다. p..
[Heap exploitation] Use After Free
2021. 5. 11. 20:45
Hacking/Pwnable
Use After Free 줄여서 UAF 라고 부른다. UAF 는 메모리 영역을 free 한 후에 재사용하게 될 경우를 말한다. #include #include int main(void) { int* heap1; int* heap2; int* heap3; heap1 = (int*)malloc(256); heap2 = (int*)malloc(256); printf("heap1 : %p\n",heap1); printf("heap2 : %p\n",heap2); *heap2 = 1234; printf("heap2 number : %d\n",*heap2); free(heap2); printf("free heap2\n"); heap3 = (int*)malloc(256); printf("new heap : %p\n"..
[Pwnable.kr] UAF
2021. 5. 8. 23:00
Wargame/Pwnable.kr
1. 문제 보면 Human 클래스와 Man, Woman 클래스가 상속 관계인 것 같다. 먼저 Human 형 m, w 객체가 초기화된다. 1번 : 각 객체의 introduce() 함수가 실행된다. 2번 : char 형 객체가 생성된다. argv[1] 으로 받은 크기만큼 메모리를 할당해서 data 변수가 가르키도록 한다. 그리고 argv[2] 로 입력받은 파일을 열어서 len byte 만큼 데이터를 읽고 읽은 데이터를 data 에 저장한다. 3번 : m, w 객체가 free 가 된다. -> 본 문제는 uaf 문제로 malloc 으로 할당한 뒤 free 후 재사용하는 방식이다. (uaf : malloc -> free -> malloc) 초기화된 m, w 객체를 3을 입력하여 free 해주고, 다시 2를 입력하..
[HackCTF] UAF
2021. 5. 8. 18:19
Wargame/HackCTF
1. 문제 canary, nx 가 켜져있다. 메뉴 화면이 나오고, 1~4번까지 선택지가 주어진다. 각 선택지에 따라 다른 함수들이 실행된다. main 함수 v3에 저장된 값에 따라 각 함수들이 실행된다. add_note() 함수 먼저 notelist 배열 값이 비어있는지 확인한다. notelist 란 전역에 선언된 배열로써 최대 5개의 노트까지 추가할 수 있다. add_note() 에서는 총 두 번 malloc()이 호출된다. - print_note_content 라는 함수 포인터 저장을 위해 - 실제 데이터를 저장하기 위해 0x804c008 : 함수 포인터가 저장되어 있다. 0x804c018 : 입력한 데이터가 저장되어 있다. del_note() 함수 add_note() 를 하면 notelist 의 배..
[HackCTF] Beginner_Heap
2021. 5. 8. 16:20
Wargame/HackCTF
1. 문제 입력을 두 번 받고 끝낸다. 총 네 번 malloc 을 할당한다. 1. v3에 16 공간 할당 2. v3+1에 8 공간 할당 3. v4에 16 공간 할당 4. v4+1에 8 공간 할당 5. s라는 변수에 최대 0x1000의 크기의 값을 입력받고 v3+1에 저장 6. s라는 변수에 최대 0x1000의 크기의 값을 입력받고 v4+1에 저장 이 부분에서 strcpy 시 overflow 가 두 번 발생한다. sub_400826 함수를 실행시키는 것이 목적일 것이다. 2. 문제 해결 과정 1 (v3이 가르키는 힙영역) malloc(8) 할당한 주소가 담김 malloc(8) 실제 주소 2 (v4가 가르키는 힙영역) malloc(8) 할당한 주소가 담김 v4+1에 입력을 받으니 v4+1이 가르키는 0x60..