목록분류 전체보기 (40)
#dokydoky
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 라고 표시되..
0x0. Introduction 0x1. Vulnerable code 0x2. How to trigger 0x3. Exploit > Populate LookAside List of Paged pool > Shellcode(Privilege Escalation) > Full Exploit code 0x0. Introduction Hi, This is dokydoky. I wrote about "Uninitialize Heap Variable", an assignment for Windows Kernel Exploitation (by Ashfaq Ansari). I would like to thank Ashfaq Ansari for your help. I used many of the source codes..
0x0. Introduction 0x1. Vulnerable code 0x2. How to trigger 0x3. Exploit > Populate LookAside List of Paged pool > Shellcode(Privilege Escalation) > Full Exploit code 0x0. Introduction 안녕하세요. dokydoky입니다. Windows Kernel Exploitation(by Ashfaq Ansari)의 과제였던 "Uninitialize Heap Variable"에 대해 정리해봤습니다. 도움을 주신 Ashfaq Ansari에게 감사의 말씀을 전합니다. 그리고 HackSysExtremeVulnerableDriver의 Pool Overflow, UAF 익스플로잇 코드..
안녕하세요. dokydoky입니다.Windows Kernel에서 pool을 공략하기 위해서는 pool에 대한 이해가 필요합니다.Windows7 32bit를 기준으로 Kernel pool, ListHeads, Lookaside List에 대해서 설명해보았습니다. 0x1. Kernel Pool 시스템 초기화때, 메모리 관리자가 시스템 노드의 갯수에 따라 동적인 사이즈의 메모리 pool을 만듭니다. 각 pool은 pool descriptor라는 구조체에 의해 정의되며, pool descriptor는 pool의 사용을 추적하고, 메모리 타입과 같은 pool 속성을 정의합니다. [pool descriptor structure] 0: kd> dt nt!_POOL_DESCRIPTOR +0x000 PoolType : ..
verifier는 windows Kernel에서 special pool을 만들어주는 기능을 제공합니다.special pool을 만들면 crash가 났을 때, 더 정확하게 분석할 수 있습니다.UAF, double free의 crash가 났을 때, verifier on/off 결과를 비교해 보겠습니다. [verifier on일 경우] - corruption이 발생할 때 바로 exception 발생 후 정지.(off일 경우 바로 안멈출때도 있음) - "!analyze -v" 결과에서 원인을 정확히 말해줌. - stacktrace에 corruption의 원인이되는 드라이버도 함께 표시. [verifier on - UAF-1]*************************************************..
"mongodb 빠르게 훑기 1 mongodb란" http://dokydoky.tistory.com/432위 링크와 이어지는 글입니다. 1. Replication (복제) Replication은 가용성을 높여준다. 다른 DB서버에 여러 복제본을 만들어놓음으로써 싱글서버에서의 데이터 손실을 방지해준다. 또한, hardware failure나 service interruption에 대해서도 복구해준다. (그림 출처 : http://docs.mongodb.org) Replica set은 mongod 데몬 인스턴스들의 그룹으로 Primary와 Secondary가 있다. Primary는 오직 하나만 존재하며 Client로부터 모든 쓰기 작업을 받는다.(쓰기작업은 Primary만 가능). 읽기 작업은 디폴트로 pr..
0. 들어가며 안녕하세요. 김영성입니다. 이 글은 제가 공부하면서 정리한 글입니다. 부족하지만 mongodb가 뭔지, nodejs에서는 어떻게 사용하는지에 대해 빠르게 훑어보기에 적절할 것 같습니다. mongodb의 활용도, 장단점, 깊은 지식에 관해서는 잘 모르는 관계로 다루지 않습니다. mongodb가 대충뭔지 이해하고 mongodb의 활용에 대해 궁금하다면 아래의 문서를 읽어보는것도 괜찮을 것 같습니다. Hadoop과 MongoDB를 이용한 로그분석시스템 (http://helloworld.naver.com/helloworld/1016)things i wish i knew about mongodb a year ago (http://snmaynard.com/2012/10/17/things-i-wish-..
2013.09.28 KUCIS 서경강 세미나에서 '악성코드 분석방법' 이라는 주제로 발표했던 발표자료입니다.
- 분석대상 : DarkSeoul - 작성자 : 김영성 먼저, 패킹여부를 확인하기 위해 PEiD로 확인 Section Name을 보고 UPX로 압축되어 있다는 것을 확인. UPX Unpacker를 이용해 Unpack Unpacked 된 후의 PEiD로의 확인한 모습 이제부터 Ollydbg를 이용해 정적분석 WinMain에 진입 후, memset( addr, 0x00, 0x103 ) 으로 0x103크기의 배열을 0으로 초기화 한 후, LoadLibraryA("Kernel32.dll") 호출 이름 LoadLibrary (LoadLibraryA는 LoadLibrary의 ASCII 버전) 기능 명시된 모듈을 호출한 프로세스 주소공간에 로드한다. 명시된 모듈이 다른 모듈들을 로드할 수도 있다. 원형 HMODULE..
응용1. 문자열을 반대로 하는 함수와 괄호 검사하는 함수 pop 연산을 사용할 때 리턴값을 StackNode*로 받고 꼭! 메모리 해제해줘야하는것에 주의..! 코딩전에 의사코드로 알고리즘 생각해보는것도 좋을것 같소..
배열로 구현한 스택 연결리스트로 구현한 스택 스택을 구현할 때, 팝/피크 연산의 리턴형을 왜 포인터(StackNode*)로 반환하는지 이해가 안되서 StackNode로 리턴하는 함수로 변형해서 만들어봣다. 물론 동작에는 이상이 없었으나, 예제에서 팝/피크의 연산에 대한 예외처리를 할 수 없다는 단점이 있다. 그래서 아~~~~리턴형을 포인터로하면 NULL값을 반환하는 경우에 예외처리하면되니까 이렇게 구현하는구나!!라고 생각함
5. 두 개의 다항식 A와 B에 대해서 다항식의 뺄셈 A-B를 구하는 함수 polySub()를 구현해 보세요. LinkedList* polySub(LinkedList* pListA, LinkedList* pListB) { LinkedList* pReturn = NULL; ListNode* pNodeA = NULL; ListNode* pNodeB = NULL; if( pListA != NULL && pListB != NULL ) { pReturn = createLinkedList(); if(pReturn == NULL) { printf("메모리 할당 오류 polyAdd()\n"); return NULL; } pNodeA = pListA->headerNode.pLink; pNodeB = pListB->hea..