목록System Hacking (12)
#dokydoky
Referencehttps://heap-exploitation.dhavalkapil.com/attacks/house_of_lore.htmlhttps://github.com/shellphish/how2heap/blob/master/house_of_lore.csmallbinAbout smallbin총 62개의 small binfree될 때 앞,뒤 chunk가 free되었다면 병합(coalesce)삽입은 HEAD, 제거는 TAIL (FIFO)32bitsize : 0x10, 0x18, 0x20 ...... , 0x1F8(504) (8x+8, 1fd = bin; if (av != &main_arena) victim->size |= NON_MAIN_ARENA; check_malloced_chunk (av, vict..
ReferenceDouble freehttps://heap-exploitation.dhavalkapil.com/attacks/double_free.htmlhttps://github.com/shellphish/how2heap/blob/master/fastbin_dup.cForging chunkshttps://heap-exploitation.dhavalkapil.com/attacks/forging_chunks.htmlhttps://github.com/shellphish/how2heap/blob/master/fastbin_dup_into_stack.c (double free + forging chunks)House of spirithttps://heap-exploitation.dhavalkapil.com/at..
ReferenceIt is a simple version of dhavalkapil's work https://heap-exploitation.dhavalkapil.com/diving_into_glibc_heap/core_functions.htmlglibc 2.23 code http://repo.or.cz/glibc.git/commit/ab30899d880f9741a409cbc0d7a28399bdac21bfMallocMalloc pseudo-code//step 1if) size == fastbin range 'return chunk' = chunk at the end of the the fastbin list if) return chunk == null move on to 'smallbin case' e..
ghostparty.cpp 소스를 보면서 실제 문제가 될만한 곳들을 먼 훑어본 후, 익스플로잇 해봅니다.전체 소스코드는 여기서 확인.https://github.com/dokydoky/writeup/blob/master/pwnerable.tw/ghostparty/ghostparty.cppVulerability case 1Uninitialized variable, UAF, memory leakclass Alan : public Ghost { public : Alan():lightsaber(NULL){ type = "Alan" ; }; Alan(int ghostage,string ghostname,string ghostmsg){ type = "Alan"; age = ghostage ; name = new ch..
0. Introghostparty binary기준으로 C++ string, vector 분석 내용을 정리합니다. c++ reversing에 익숙하지 않으신 분은 Reversing C++ programs with IDA pro and Hex-rays 을 먼저 읽어보시는걸 추천합니다. reversing하면서 정의한 구조체는 맨 아래에 적어두겠습니다.c++코드와 IDA에서 decompile된 코드를 비교하면서 정리하겠습니다. (테스트 환경은 64bit Ubuntu 16.04)1. stringstring은 dynamic char 배열입니다. 표현되는 방식이 여러개 있지만, 여기서는 ghostparty 바이너리에서 사용된 방법을 기준으로 설명합니다. string의 member는 아래와 같습니다. 주의해야 할 것은..
0x01. Intro안녕하세요. dokydoky 입니다.이전 포스팅에서는 NX+ASLR 환경에서 익스플로잇을 해봤습니다. 이번 포스팅에서는 Stack Canaray를 추가하여 익스플로잇 해보겠습니다.이번엔 nginx2 바이너리로 진행합니다. nginx1은 Stack Canary가 적용되어 있지 않고, nginx2는 적용되어 있습니다. Stack Canary란 RET, SFP(Stack Frame pointer)가 변조되는 것을 감지하기 위해, SFP앞에 stack cookie를 저장해놓는 기법입니다. 컴파일 옵션은 이곳을 참조하시기 바랍니다.이하 존칭어를 생략합니다. 0x02. Exploit checksec으로 확인해보면 nginx2에 Stack Canary가 추가적으로 적용된 것을 확인 할 수 있다. ..
0x01. Intro 안녕하세요. dokydoky입니다. 이전 포스팅에서는 NX만 적용되어 있는 환경에서 어떻게 익스플로잇 하는지 알아봤습니다. 이번 포스팅에서는 ASLR이 추가적으로 적용되어 있는 환경에서 어떻게 익스플로잇 하는지 알아보겠습니다. 이전 포스팅에서는 libc-2.19.so에서 가젯을 구성했지만, ASLR이 적용되면 libc-2.19.so의 메모리 주소가 달라지기 때문에 이전의 방식으로는 익스플로잇 할 수 없습니다. (ASLR이 적용되면 Stack, VDSO(Virtual Dynamic Shared Object), 공유메모리 영역, Data 세그먼트의 주소가 랜덤화됩니다.)그렇다면 어떻게 가젯을 구성할까요?nginx 1.4.0 버전에서는 PIE가 적용되어 있지 않습니다. 이를 이용해 봅시다..
0x01. Intro안녕하세요. dokydoky입니다.이전 포스팅에서는 환경을 구성하고 CVE-2013-2028 취약점이 발생되는 코드를 살펴봤습니다.이번 포스팅에서는 어떻게 익스플로잇을 하는지 알아보겠습니다. 바이너리 파일은 nginx1을 사용하시면 됩니다.mitigation중 NX, ASLR, Stack Canary를 순차적으로 적용해서 우회해보려고 합니다.우선 이번 포스팅에서는 NX만 걸려 있는 환경입니다. NX가 걸려있으면 Heap, Stack 영역에 실행권한이 없어 쉘코드를 바로 실행할 수 없습니다. 본문에서 사용할 도구들은 아래와 같습니다.mitigation 확인 : checksecoffset 찾기 : pattern.pyROP gadget 확인 : rp-ln-x64이하 본문에서는 존칭어를 생략..
0x01. Intro안녕하세요. dokydoky입니다. Nginx 1.3.9/1.4.0에서 unsigned int와 signed int의 잘못된 Type Conversion으로 stack buffer overflow가 발생될 수 있는 취약점이 있습니다. 2013년 5월에 발표된 취약점(CVE-2013-2028)이지만, 취약점을 공부하는데 좋은 예라고 생각되어 정리해봤습니다. 우선 왜 취약점이 발생하는지 코드를 통해 살펴본 후, Ubuntu x64 환경에 3가지 mitigation(NX, ASLR, STACK CANARY)을 하나씩 추가하면서 어떻게 익스플로잇을 하는지 알아보겠습니다. * Environment Github에 Vagrant로 작업환경을 만들어둔 감사한 분이 있어서, 해당 환경을 이용했습니다...
context에서 architecture, os를 지정한 후 아래와 같이 쉘코드를 생성할 수 있다.shellcraft.bindsh은 standalone 데몬을 remote exploit하기 위한 쉘코드.shellcraft.sh은 local exploit이나 xinetd로 관리되는 바이너리를 exploit하기 위한 쉘코드(stanalone, xinetd가 이해되지 않는다면 참고 : http://dokydoky.tistory.com/446) In [57]: from pwn import * In [58]: context(arch='amd64', os='linux') In [59]: print "".join(['\\x{:02X}'.format(ord(i)) for i in asm(shellcraft.bindsh..
0x1. 들어가며안녕하세요. dokydoky입니다. remote에서 exploit 할 때, shell을 얻는 방법에 대해서 정리해보겠습니다. 이하 존칭어는 생략하겠습니다.네트워크 프로그램을 구현하는 방법에는 두 가지가 있다. - 표준 입출력을 사용해 프로그램을 구현한 후, Inetd 혹은 Xinetd 데몬을 이용하여 네트워크로 연결. - Standalone 모드 : socket과 같은 독립적인 네트워크 프로토콜을 사용하여 구현하여 실행.각 방법에 따라 어떻게 원격에서 쉘을 얻을 수 있는지 예를 통해 알아보겠다.예제 코드에서는 원격에서 shellcode를 삽입하는 대신, 서버 코드에 미리 shellcode의 기능을 하는 동일한 코드를 구현해놓았다.exploit할 때는 서버에서 shellcode 라고 표시되..
ms visual studio 6.0에서 간단한 bof 코드를 컴파일해보고 분석해보자. #include h4ck(void){ int i, *p; p=&i; p+=2; *p+=13; } main(void){ h4ck(); printf("H4cking\n"); printf("Cr4cking\n"); } 우선 알아야 할 것이. 1. 메모리구조는 Text, Data, Heap, Stack 영역으로 나뉜다. 2. Stack영역은 다른영역과는 달리 높은주소->낮은주소로 변수가 쌓인다.(변수 내부에서는 낮은주소->높은주소) 3. 함수를 호출하면 우선 스택에 ret(retrun 주소), SFP(Stack Frame Pointer), 매개변수, 지역변수 순서대로 쌓인다. 이 때, Stack BOF는 ret주소를 의도적으..