Security/System Exploit
Empire
Empire
2018.11.03도커로 설치하면 `` (Empire) >`` 이게 계속 출력되면서 안된다. 그래서 그냥 native 설치해야함.python2가 기본 파이썬인 상태에서 설치해야 함. 사용법은 다음을 참고. Listener는 meterpreter말고 http로 해야 제대로 동작함. meterpreter로 하면 포트 리스닝도 안하고 생성되는 stager 코드도 문법에 안맞아서 에러난다.https://null-byte.wonderhowto.com/how-to/use-powershell-empire-getting-started-with-post-exploitation-windows-hosts-0178664/ https://null-byte.wonderhowto.com/how-to/use-powershell-empire-gener..
realloc fake size
realloc fake size
2017.11.04```cint main(){ char *a = malloc(0x8); char *b = malloc(0x8); char *c = malloc(0x40); char *topguard = malloc(0x8); // modify b.size *(b-0x4) = 0x59; realloc(b, 0x8); return 0;}``` trigger & overlapchunk `` a``에서 off-by-one overflow가 발생해 `` b.size``를 수정할 수 있는 상황이라면 이를 이용해 chunk overlap할 수 있으며, 이는 `` b`` chunk의 overflow, libc_base leak으로 연계할 수 있다.```bashgdb-peda$ x/32wx 0x565580000x56558000: 0x00..
Return to VDSO using ELF Auxiliary Vectors leck
Return to VDSO using ELF Auxiliary Vectors leck
2017.09.02http://v0ids3curity.blogspot.kr/2014/12/return-to-vdso-using-elf-auxiliary.html2016/11/21 - [System/etc] - Memory Layout, Segment / Stack layout Linux Stack Layout with Auxiliary Vectors```c0x7fffffffe0e8: 0x00007ffff7a36f45 ( main's ret )0x7fffffffe0f0: 0x0000000000000000 ( argc )0x7fffffffe0f8: 0x00007fffffffe1c8 ( **argv ) .................... 0x7fffffffe1c0: 0x0000000000000000 ( argc )0x7fff..
SROP
SROP
2017.08.17분명 돼야 하는데 안된다면 `` i r``로 레지스터 모두가 정상인 상태로 설정되어 있는지 확인해본다. Sigreturn`` int`` instruction을 실행하면, kernel mode로 진입하면서 user mode context를 kernel stack에 push해놓는다.signal을 감지하는 것은 kernel mode에서 수행된다. kernel은 수신된 signal이 있는지 확인하고 nonblocked pending signal이 있으면 ``c do_signal()``를 호출한다.여기서 signal을 처리하게 되는데, 이 때 signal handler가 등록되어 있는 경우, signal handler를 실행하기 위해 user mode로 나가야한다. 일단 kernel mode에서 벗어나면 kern..
The House of Einherjar
The House of Einherjar
2017.08.16The House of Einherjarhttps://github.com/umbum/pwn/blob/master/how2heap/house_of_einherjar.c off-by-one(null) + Force 응용( huge consolidate ) + unlink check 회피.fake chunk까지 consolidate 하고 다시 ``c malloc()``하면 fake chunk가 반환되는 식. off-by-one(null)```cvictim->size's LSB = 0x00```Poison null byte와 같은 off-by-one overflow를 이용해 size LSB를 ``c 0x00``으로 만들지만, 차이가 있다.Poision null byte``c free(victim)`` 이후 of..
The House of Force
The House of Force
2017.08.15The House of Forcehttps://github.com/shellphish/how2heap/blob/master/house_of_force.c 존내 큰 chunk를 할당해버린다! top chunk size를 ``c -1``로 만들어 ``c mmap()`` 호출을 방지하고,target addr이 있는 곳 까지의 차 만큼의 커다란 chunk를 할당하면그 다음 ``c malloc()`` 때 target 위치에 chunk를 할당 및 반환하게 된다.```c*top_ptr = -1;difference = (target_addr - 2*sizeof(void*)) - top_ptr;malloc(difference); // target 직전 까지 할당target = malloc(); // return chun..
[UNDEAD] The House of Mind
[UNDEAD] The House of Mind
2017.08.15The House of Mindhttp://phrack.org/issues/66/10.htmlhttps://gbmaster.wordpress.com/2015/06/15/x86-exploitation-101-house-of-mind-undead-and-loving-it/ unlink와 반대로, chunk가 free되면서 bins와 link하는 과정에서 발생하는 쓰기를 이용하는 방식이다.[free] unsorted bin link```cbck = unsorted_chunks(av); // == &av->bins[0]fwd = bck->fd;if (__glibc_unlikely (fwd->bk != bck)) // DEAD{ errstr = "free(): corrupted unsorted chunks"; g..
unsorted bin attack
unsorted bin attack
2017.08.15https://github.com/shellphish/how2heap/blob/master/unsorted_bin_attack.c unsorted bin에 있는 chunk가 할당될 때, 역시 unsorted bin에서 chunk를 제거하기 위해 unlink가 일어난다.단, 여기서는 unlink macro를 사용하지 않고 처리한다. [malloc] unsorted bin size check [malloc] unsorted bin unlink```cfor (;; ){ int iters = 0; while ((victim = unsorted_chunks (av)->bk) != unsorted_chunks (av)) { bck = victim->bk; if (__builtin_expect (chunksize_n..
[UNDEAD] unlink
[UNDEAD] unlink
2017.08.15unlink`` unlink``는 consolidate가 발생할 때 연결되어 있던 bins list에서 chunk를 제거하기 위해 호출된다.`` PREV_INUSE``를 체크해 호출하기 때문에 fastbin chunk에 `` PREV_INUSE`` unset한다고 해서 회피할 수 있는 것이 아니다. glibc 2.25's unlink macro```c#define unlink(AV, P, BK, FD) { if (__builtin_expect (chunksize(P) != prev_size (next_chunk(P)), 0)) malloc_printerr (check_action, "corrupted size vs. prev_size", P, AV); FD= P->fd; BK= P->bk; if (__b..
The House of Lore
The House of Lore
2017.08.15The House of Lorefree'd small/fast chunk의 bk를 `` fake_chunk`` addr로 overwrite. https://github.com/umbum/pwn/blob/master/how2heap/house_of_lore_fast.chttps://github.com/umbum/pwn/blob/master/how2heap/house_of_lore_small.c fastbin도 결국 large request가 들어오면 smallbin으로 옮겨지기 때문에 이 경우 small과 똑같이 동작한다.``c mov_to_small=malloc(large)``를 호출하지 않으면 차이가 발생한다. ( limitation #2 ) smallbins bk check & unlink```c e..
fastbin attack / fastbin_dup
fastbin attack / fastbin_dup
2017.08.15fastbin attackfree'd fast chunk의 fd를 `` fake_chunk`` addr로 overwrite.다음 ``c malloc(fast)`` 때 overwrited fast chunk가 반환되면서 fastbin에 `` fake_chunk`` addr이 추가되므로, 그 다음 반환 chunk는 `` fake_chunk``. ```cfake_chunk[1] = FAST; // bypass check hptr = malloc(FAST);victim = malloc(FAST);free(victim);strcpy(hptr, argv[1]); // vulnerability ( overflow, uaf, overlap, fastbin_dup... ) victim = malloc(FAST); // ..
The House of Spirit
The House of Spirit
2017.08.15The House of Spiritstack overflow로 stack에 있는 포인터 변수 hptr을 `` fake_chunk`` addr로 overwrite.이후 ``c free(hptr)``하면 fastbin에는 ``c fake_chunk`` addr이 추가되므로, 그 다음 반환 chunk는 `` fake_chunk`` ```c/* set fake_chunk */fake_chunk[1] = arbitrary_size;/* set next chunk size */... void *hptr = malloc(SIZE);char buf[4];strcpy(buf, argv[1]); // stack overflow free(hptr) // fake chunk is added in fastbinfake = ma..