목록Windows/WinPwn (9)
cgy12306
Windows Internal 윈도우 운영체제에서 각 프로세스의 context는 access token을 갖고 있습니다. 이 Access toekn은 id값과 프로세스에 대한 자격을 갖고 있습니다. ntdll.dll : 커널모드로 전환하고, 시스템 서비스 디스패쳐를 호출하게 하는 아키텍쳐 별 지시사항을 담고 있는데 이 지시사항은 일부 파라미터를 검증한 후 ntoskrnl.exe 내부의 실제 코드를 포함하는 실제 커널 모드 시스템 서비스를 호출합니다. 커널은 ntoskrnl.exe의 기능 집합으로 구성 되어 있습니다. ntoskrnl.exe는 스레드, 스케줄링 및 동기화 서비스 등 low-level의 기능을 지원합니다. 또한 커널 코드는 주로 C로 작성되어 있습니다. 커널 오브젝트(EPROCESS)는 커널..
cr4 레지스터 : 프로세서에서 지원하는 각종 확장 기능을 제어하는 레지스터입니다. 페이지 크기 확장 또는 메모리 영역 확장 기능을 활성화 시킵니다. 이 cr4 레지스터의 20번째 bit는 SMEP에 해당합니다. SMEP(Supervisor Mode Execution Protection)은 ring 0(높은 권한)에서 ring 3(낮은 권한)의 코드 실행을 방지하기 위한 보호 기법입니다. 이 bit를 해제를 하게 되면 SMEP이 해제되어 virtualalloc으로 할당한 메모리에 쉘 코드를 삽입하고, rip를 조작하여 할당된 메모리를 가리켜 쉘 코드를 실행시키면 정상적으로 쉘 코드가 실행되는 것을 확인할 수 있습니다. cr4 &=0x6fffff; * intel i3, i5, i7에서 된다고는 하지만 현재..
Windbg에서 windbg를 설치합니다. VirtualKD redux에서 최신버전의 virtualkd redux를 설치합니다. 설치 후 windows 아키텍쳐에 맞는 폴더를 복사해서 VM windows에 넣어줍니다. vminstall을 실행시킵니다. 경고 메시지 창이 뜹니다. OK 버튼을 눌러줍니다. 재시작을 하겠냐고 물어보니다. Yes를 눌러줍니다. 여기서 켜지기 전에 host에서 vmmon을 실행시켜줍니다. guest os를 재부팅을 하게 되면 부트 매니저 화면이 뜨게 됩니다. 여기서 f8을 눌러서 Disable Signature Enforcement Manually를 선택해줍니다. Disable Driver Signature Enforcement(드라이버 서명 적용 안함)을 선택해줍니다. 화면이 ..
Stack Cookies / GS protection '/GS switch'는 스택 기반 오버플로우 공격을 차단하기 위해 함수의 시작과 끝부분에 약간의 코드를 추가하는 컴파일 옵션이다. 애플리케이션이 시작되면, 전역 마스터 쿠키(부호 없는 정수 형식의 4byte)가 계산되고 로드된 모듈의 .data 섹션에 저장된다. 함수 시작 부분에, 전역 마스터 쿠키가 저장된 EBP와 EIP 바로 전 스택에 복사된다. buffer | cookie | ebp | eip 함수의 끝 부분에 쿠키는 다시 전역 마스터 쿠키 값과 비교해서 다르면 스택 오염이 발생된것으로 판단하여 프로그램은 비정상 종료 된다. 코드에 라인이 추가되는 것으로 인한 퍼포먼스 감소 영향을 최소화하기 위해, 컴파일러는 _alloca를 사용해 스택에 메모..
공격코드 제작을 위해 기본적으로 갖춰야 할 도구들 windbg / ollydbg / immunity debugger 메타스플로잇 pydbg perl, python과 같은 스크립팅 도구 1. Byakugan : pattern_offset and searchOpcode byakugan.dll과 injectsu.dll 파일을 windbg 폴더에 넣는다. 그리고 detoured.dll을 C:\windows\system32 폴더 안에 저장한다. byakugan.dll로 할 수 있는 작업은 아래와 같다 justsu : 메모리 내의 버퍼를 추적하는 툴 세트로, 충돌 발생 시 제어 가능한 항목과 유효한 리턴 주소를 찾아내는 도구 pattern offset mushishi : 안티 디버깅 탐지 및 안티 디버깅 우회 기법..
메타스플로잇 Exploit 모듈 구조 헤더와 의존성 코드 해당 exploit 모듈에 대한 간단한 설명 require 'msf/core' 클래스 정의 includes 'def' 정의 : initialize / check(optionale) / exploit simple web server 2.2-rc2 버전을 사용할 것 이다. 해당 프로그램은 웹서버의 역할들 도와주는 애플리케이션이다. A를 3000 보내보자. from pwn import * r = remote('192.168.126.187', 80) payload = 'A' * 3000 header = 'GET /index.html HTTP/1.0\r\n' header += 'Connection:' + payload + '\r\n\r\n' r.send(h..
예외 핸들러 예외 핸들러(Exception Handler)는 애플리케이션의 예외 발생에 대처하는 목적을 가진 애플리케이션 내부 코드 조각들을 의미한다. try{ 일반 상황 } catch{ 예외 상황 } 윈도우에서 보여주는 메시지(오류 팝업창)는 예외 핸들러에 의해 발생된다. 애플리케이션이 catch 코드로 이동하기 위해, 예외 핸들러 지시 포인터가 스택에 저장된다. 각각 코드 블럭은 고유의 스택 프레임을 가지게 되고, 예외 핸들러 지시 포인터는 이 스택 프레임에 포함된다. 프레임 기반 예외 핸들러에 대한 정보는 스택의 exception_registration 구조체 안에 저장된다. 이 구조체(SEH 레코드)는 8byte로 구성되어 있다. 메인 데이터 블록의 최상위 부분에 SEH 체인을 가리키는 포인터가 ..
JMP or CALL 공격자는 쉘코드의 주소를 가진 레지스터를 기본적으로 사용하며, 그 주소를 EIP에 넣어 공격을 하게 된다. 그렇기 때문에 공격자는 애플리케이션이 실행될 때 로딩되는 DLL들 중 하나의 레지스터로 점프하거나 CALL 하는 기계어를 찾아야 한다. 또한 특정 메모리 주소로 EIP를 덮어쓰는 대신 특정 레지스터로 점프하는 주소를 EIP에 주입해야 한다. 그리고 이 주소에는 NULL 값을 포함해서는 안된다. from pwn import * payload = 'A' * (25000+1067) payload += p32(0x7c8369f0) payload += 'A' * 4 payload += "\xdb\xc0\x31\xc9\xbf\x7c\x16\x70\xcc\xd9\x74\x24\xf4\xb1..