본문 바로가기

스터디/파이썬 해킹 프로그래밍

(27)
DLL 인젝션 DLL 인젝션 기술은 사용 목적의 선악에 구분 없이 오래 사용되어 왔다.여기저기 다양한 곳에서 DLL인젝션이 이용되는 것을 볼 수 있다. 마우스 커서를 화려하게 바꿔주는 윈도우 쉘 익스텐션에서 부터 광범위 하게 이용된다. 프로세스가 DLL을 메모리에 로드하게 만들기 위해 kernel32.dll 의 LoadLibrary() 를 이용한다. HMODULE LoadLibrary(LPCSTR lpFileName); lpFileName 파라미터는 단순히 로드하려는 DLL의 경로를 나타낸다. 그런데 로드하려는 DLL 경로 문자열의 포인터가 파라미터로 전달되는 LoadLibraryA를 원격 프로세스가 호출하게 만들어야 한다. 그렇게 하려면 먼저 LoadLibraryA의 주소를 구하고 로드할 DLL의 이름을 써 넣어야 ..
DLL과 코드 인젝션 리버싱이나 공격을 수행 시 원격 프로세스 안에서 코드를 로드하고 그것을 해당 프로세스 컨텍스트 내에서 실행시키는 것은 상당히 유용한 기술.DLL과 코드 인젝션을 통해 패스워드 해쉬를 스니핑하거나 공격 대상 시스템의 원격 데스크탑 제어권을 얻을 수 있다. DLL과 코드 인젝션 기술은 일반적인 개발자나 페이로드 개발자, 쉘 코드 제작자, 침투 테스터 모두가 사용하는 기술이다. DLL인젝션을 이용해 다른 프로세스 내에서 팝업 윈도우를 띄울 것이며, 특정 PID를 가진 프로세스를 종료시키게 된 쉘 코드를 테스트 하기 위해 코드 인젝션을 사용할 것이다.마지막으로는 완전히 파이썬만으로 코딩된 트로이 목마를 작성한다.일단 원격 쓰레드 생성부터 알아보자. 쓰레드를 생성하는데 사용되는 Win32 API가 kernel32..
Immunity 디버거를 이용한 하드 후킹 이 기술은 x86 어셈블리 코드로 작성된 후킹 코드를 사용하기 때문에 후킹 대상 프로세스에 많은 영향을 끼치지 않는다. 소프트 후킹의 경우에는 브레이크 포인트가 호출될 때 마다 프로세스가 많은 작업 (그리고 더 많은 명령들)을 처리해야 하며, 후킹 코드를 실행시킨 다음에는 자기 자신의 코드를 계속해서 실행시켜야 한다.반면 하드 후킹의 경우 특정한 코드 조각만으로 후킹 코드를 실행시키고 기존의 프로세스 코드 흐름으로 돌아온다.하드 후킹을 사용할 때의 장점은 소프트 후킹의 경우와는 달리 후킹 대상 프로세스가 에러로 인해 종료되는 일이 없다. Immunity 디버거에서는 FastLogHook 이라는 객체를 통해 복잡한 하드 후킹 설정 과정을 간단히 처리 할 수 있다. FastLogHook 객체는 원하는 값을 ..
PyDbg 를 이용한 소프트 후킹 소프트 후킹을 이용해 모질라 파이어 폭스가 데이터를 암호화 시키기 전 데이터를 스니핑 해보자. 파이어폭스는 통상적으로 SSL 암호화를 사용한다.어느 함수에 후킹을 할 지는 본인의 선택이지만, 여기서는 PR_Write 함수에 후킹을 설정한다. 이 함수가 호출되면 ESP+8을 통해 암호화 되기 전의 아스키 문자열에 대한 포인터를 얻을 수 있다. ESP 레지스터로부터 오프셋+8의 위치라는 것은 (오프셋이란 거리를 이야기 한다.)아스키 문자열이 PR_Write 함수에 두 번째 파라미터로 전달된다는 의미이다. --> 암호화 되기 전 아스키 문자열을 스니핑 하기 위해서는, 이 함수를 후킹한다.(수정) 이 함수를 후킹할 경우, 아스키 문자열을 스니핑 할 수 있다. 파이어폭스 웹 브라우저를 열고 https://www...
질문 정리 (2015-01-26) 1. 메모리에 직접 헥스값을 넣는 방법2. args 형태로 넣는 헥스값과 소스파일내에서 초기화한 헥스값의 길이차이.
질문 기록 EIP 제어권을 획득한 후에는 쉘 코드가 실행되게 만들어야 한다. 일반적으로 레지스터나 레지스터 값의 상대적인 오프셋이 쉘 코드의 주소를 가리킨다.
Memory Breakpoint 이론, 함수 정리 메모리 브레이크 포인트는,1. 브레이크 포인트를 설정할 메모리 영역의 베이스 주소와 페이지 크기를 구한다.2. 해당 메모리 영역 페이지의 접근 권한을 변경해 보호 페이지 (Guard Page) 로 설정한다.3. CPU가 보호 페이지에 접근하려 하면 GUARD_PAGE_EXCEPTION 가 발생.4. 이 예외를 처리하는 핸들러에서 페이지 속성을 원래대로 바꾸고 실행이 계속되도록 한다. 페이지의 크기를 계산하려면 먼저 운영체제에게 디폴트 페이지 크기를 질의해야 한다.이를 위해 GetSystemInfo() 함수를 이용해 SYSTEM_INFO 구조체 정보를 구한다.SYSTEM_INFO 구조체의 dwPageSize가 시스템의 페이지 크기 값을 나타낸다. 페이지의 접근 권한 정보를 구하고 변경하는 방법은 ,1. 메..
Hardware Breakpoint 까지 이론, 함수 정리 하드웨어 브레이크 포인트는 CPU 디버그 레지스터의 특정 비트 값을 이용한다.하드웨어 브레이크 포인트를 구현 할 때 가장 중요한 점은네 개의 디버그 레지스터 중에서 어느 레지스터가 사용중이고 어느 레지스터가 사용 가능한 상태인지 항상 알고 있어야 한다는 것이다.--> 항상 사용 가능한 디버그 레지스터를 이용해 하드웨어 브레이크 포인트를 설정하는지 확인 해야 함--> 사용 중인 레지스터를 사용할 경우 디버거가 엉킬 수 있음 1. 프로세스 내의 모든 쓰레드 리스트를 구한다.2. 각 쓰레드의 CPU 컨텍스트 레코드를 구한다.3. 구한 쓰레드의 모든 context 레코드의 디버그 레지스터 중 하나 (DR0 ~ DR3 중 사용 가능한 디버그 레지스터) 에 원하는 브레이크 포인트 주소 설정4. DR7 레지스터의 비..