본문 바로가기

system

VUPlayer 2.49 Exploit( + Windows ROP for Bypassing DEP) OS : Windows XP Service Pack 3 Target : VUPlayer 2.49 VUPlayer 2.49 는 특정 Byte 이상 크기를 가진 .m3u 파일을 로드할 때, BOF 취약점이 발생한다. DEP(Data Execution Prevention) 방어 기법으로 인해 단순히 RET 주소를 조작해서는 Exploit 에 성공할 수 없다. 이를 우회하기 위해 메모리에 실행 권한을 부여하여 Shellcode 를 실행하는 방법을 이용해 Exploit 하도록 한다. OS 에 따라 사용이 불가능한 함수들이 존재한다.. 참고바람. Exploit 의 편리성을 위한 Immunity Debugger 의 mona.py 기능들 [*] mona.py command # !mona mod # 방어 기법 사용 여부.. 더보기
arm in qemu Qemu 에서 ARM debian 실행 # apt-get install qemu # wget https://people.debian.org/~aurel32/qemu/armhf/debian_wheezy_armhf_standard.qcow2 # wget https://people.debian.org/~aurel32/qemu/armhf/initrd.img-3.2.0-4-vexpress # wget https://people.debian.org/~aurel32/qemu/armhf/vmlinuz-3.2.0-4-vexpress * CUI 환경 + 인터넷 사용 # qemu-system-arm -M vexpress-a9 \ -kernel vmlinuz-3.2.0-4-vexpress \ -initrd initrd.img.. 더보기
2017년 KUCIS 영남권 세미나 2017년 KUCIS 영남권 세미나에서 제가 발표했던 "Heap Exploitation Techniques" 발표자료 입니다. 더보기
[how2heap translation] house_of_einherjar.c # 환경은 ubuntu 16.04 64bit 에서 진행했습니다. # House of Einherjar 는 malloc() 에 의해 반환 된 포인터를 제어하기 위해 null byte 로 off-by-one 오버플로우를 사용한다. # 이 기술은 Poison Null Byte 보다 더 강력한 원초적인 기술이지만, 추가적으로 heap leak 이 필요하다. 포인터 변수 a, b, c, d 선언한다. 그리고 우리는 'a' 에 0x38 bytes 만큼 할당한다. 우리는 'a' 에 overflow 를 원하기 때문에, 0x38 을 반올림 한 후의 'a' 의 실제 크기가 필요하다. a : 0x603420 real_a_size : 0x38 우리는 우리가 원하는 어느 곳이든 fake chunk 를 만든다. 이 글에서 우리는.. 더보기
[how2heap translation] overlapping_chunk.c 테스트 환경은 ubuntu 14.04 32bit 환경에서 진행했습니다. 우선 heap 에 3 chunks 를 할당하고, memset 을 통해 각각의 chunk 를 초기화한다. p1 : 0x0804b008 p2 : 0x0804b108 p3 : 0x0804b208 p2 를 free 한다. p2 는 이제 동일한 크기의 새로운 malloc 할당을 대비해 unsorted bin 에 들어가게 된다. 이제 free 된 chunk 의 크기를 overwrite 할 수 있는 overflow 를 시뮬레이션 하자. 교육용 프로그램에서 size 의 마지막 3bit 는 중요하지 않지만 힙의 안정성을 유지하는 것이 좋다. 이 안정성을 유지하기 위해, 우리는 prev_inuse bit 를 설정함으로써 p1 chunk 가 free c.. 더보기
[how2heap translation] house_of_lore.c House of Lore - Malloc Maleficarum 의 확장된 공격 이 PoC 는 glibc 의 smallbin corruption 에 대해서도 다룬다. 이것은 glibc malloc 에서 동작하는 체크를 우회하기 위한 업그레이드 버전이다. ubuntu 14.04.4 - 32bit - glibc-2.23 환경에서 테스트 되었다. 가장 먼저 stack_buffer_1 과 stack_buffer_2 의 주소 값들을 초기화한다. 그리고, victim chunk 를 100byte 크기만큼 할당한다. victim : 0x804c008 victim_chunk 포인터 변수에 victim - 2 의 주소를 넣는다. stack_buffer_1 : 0xbffff6c0 stack_buffer_2 : 0xbffff.. 더보기
[how2heap translation] poison_null_byte.c 다른 how2heap 의 내용보다 길기에 끊어서 설명하도록 하겠다.. poison null byte 2.0 에 온 거 환영한다@@ 이거는 ubuntu 14.04 64bit 에서 진행했고~ 이 기술은 malloc 영역에 널바이트 off-by-one 이 있을 때 사용 가능하다. 0x100, 0x200, 0x100 만큼 malloc 해서 각각 a, b, c 변수에 반환된 주소 값 들어간다. a : 0x603420 b : 0x603530 c : 0x603740 real_a_size : 0x108 b_size_ptr : 0x211 malloc_usable_size() 같은 경우 chunk 크기에서 다음 chunk 의 prev_size 까지 포함한 크기라고 함. free 된 chunk 의 경우 이 값이 0 이지만,.. 더보기
Disabling Memory Protection on Linux 해당 옵션이나 명령들은 Ubuntu 에서 사용했슴다 # gcc -z execstack -o test test.c // 컴파일 시 nx 해체 # sysctl-w kernel.exec-shield=0 // nx 해체 # sysctl-w kernel.exec-shield=1 // nx 설정 # gcc -fno-stack-protector -o test test.c // ssp 해체 # gcc -mpreferred-stack-boundary=2 // dummy 값 고정 # sysctl -w kernel.randomize_va_space=0 // aslr 해체 # sysctl -w kernel.randomize_va_space=1 // stack aslr 설정 # sysctl -w kernel.randomize_.. 더보기
[how2heap translation] house_of_force.c 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 /* 이 POC 는 ASLR 활성화 된 상태에서도 작동한다. GOT 엔트리를 overwrite 하기 때문에 기술을 정확하게 적용하기 위해서 RELRO 를 비활성화해야 한다. RELRO 가 활성화 된 경우 Malloc Des Maleficar.. 더보기
[how2heap translation] house_of_spirit.c 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #include #include int main() { printf("This file demonstrates the house of spirit attack.\n"); printf("Calling malloc() once so that it sets up its memory.\n"); malloc(1); printf("We will now overwrite a pointer to point to a fake 'fastbin' region.\n"); unsigned long long *a; unsigned long long fake_c.. 더보기