본문 바로가기

Security/System Hacking

엑티브엑스 컨트롤을 이용한 후킹 프로그램 4. 후킹 구현 앞에서 만든 폼뷰(FormView)에 후킹을 해줄 기능을 구현해 준다. // ChatFormView.cpp : 구현파일입니다. // #include "stdafx.h" #include "GlobalHooking.h" #include "ChatFormView.h" #include #include "KeyHook.h" // CChatFormView IMPLEMENT_DYNCREATE(CChatFormView, CFormView) CChatFormView::CChatFormView() : CFormView(CChatFormView::IDD) , list(_T("")) { IsStart = false; SockStart(); } CChatFormView::~CChatFormView() { } void CChat.. 더보기
엑티브엑스 컨트롤을 이용한 후킹 프로그램 3. 후킹 구현 앞에서 만든 폼뷰(FormView)에 후킹을 해줄 기능을 구현해 준다. 시간 관계상 설명은 나중에 #pragma once #include #include #include "TrayIcon.h" #include "afxwin.h" #pragma comment(lib, "ws2_32") #define WM_HOOKED WM_USER+1 #define WM_HOOKEDM WM_USER+2 #define WM_ICON_NOTIFY WM_USER+10 using namespace std; // CChatFormView 폼뷰입니다. class CChatFormView : public CFormView { DECLARE_DYNCREATE(CChatFormView) WCHAR Mes2[256]; SOCKET s; BO.. 더보기
엑티브엑스 컨트롤을 이용한 후킹 프로그램 2. 폼뷰 만들기 우선 엑티브엑스 틀을 만들어줄 폼뷰를 만들어 준다. 새 프로젝트에서 MFC ActiveX 컨트롤 을 선택 후 마침 선택 리소스에서 Dialog 추가 후 다이얼로그에서 그림과 같이 클래스 추가해준다 후킹 시작 버튼 : IDB_START 리스트박스 : IDL_LIST . MFC 클래스 마법사에서 클래스 이름을 GlobalHookingView 로선택해주고 기본클래스를 CFormView로 선택해 준다. GlobalHookingView 클래스에서 Create함수를 오버라이딩 해준다. GlobalHookingCtrl 클래스에서 WM_CREATE 윈도우 메시지를 생성해준다. int CChatFormCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (COleControl::On.. 더보기
엑티브엑스 컨트롤을 이용한 후킹 프로그램 1. DLL만들기 엑티브엑스 컨트롤을 이용한 후킹 프로그램 1. DLL만들기 먼저 키보드와 마우스를 후킹해주는 DLL파일을 만들어 준다. 새 프로젝트에서 Win32 콘솔 응용프로그램 선택 후 응용프로그램 종료 DLL 선택 KeyHook.cpp와 KeyHook.h 파일 생성 KeyHook.cpp #include #define WM_HOOKED WM_USER+1 #define WM_HOOKEDM WM_USER+2 #pragma data_seg(".kbdata") HINSTANCE hModule=NULL; HHOOK hKeyHook = NULL; HHOOK hMouseHook = NULL; HWND MyhWnd=NULL; #pragma data_seg() #pragma comment (linker, "/SECTION:.kbda.. 더보기
No.3 Format 스트링 (1) Format 스트링기법 포맷 스트링은 발신자 즉, 보내는 사람을 속여서 받는 사람으로 하여금 받는 파일의 신뢰를 가게 하는 방법입니다. 예를 들어 봅시다. abc.c #include main() { char *buffer = "heeman"; printf ("%s\n", buffer); } 위에서 %s 와 같은 문자열이 바로 포맷 스트링입니다. 이러한 포맷 스트링 문자를 이용하여 작성하면 취약점이 발생되지 않지만. 포맷 스트링 문자를 이용하지않고 printf와 같은 함수를 이용하면 문제가 발생됩니다. abcd.c #include main() { char *buffer = " heeman\n"; printf(buffer); } 위와 같이 짜게되면 보안상 매우 위험하게 됩니다. 위의 예제를 조금 변형.. 더보기
No.2 Buffer OverFlow Attack (1) Buffer OverFlow Attack 버퍼 오버플로우에 대해 알아 보겠습니다. => 프로그래머가 버퍼 오버플로우에 취약한 함수를 쓰면 매우 간단히 취약점이 발견됩니다. 예를 들어봅시다. abc.c => abc라는 이름으로 c로 코딩된 파일입니다. int main (int argc, char *argv[1]) { ----------------> 1번 char buffer[10]; ----------------> 2번 strcpy (buffer, argv[1]); ---------------> 3번 printf ("%s\n", &buffer); ----------------> 4번 } 1번 : argc는 실행되는 프로그램의 인수 갯수입니다. *argv[]는 포인터 배열로서 인자로 입력되는 값에 번.. 더보기
No.1 Process OR SetUID process 권한과 SetUID에 대해 알아보아요. (1)SetUID 란? SetUID란 유닉스라 리눅스 계열에서 권한이 rwsr-xr-x 등의 식으로 되있는 것입니다. 즉 , root유저의 실행권한이 x가 아닌 s로 설정 되있는 것을 말합니다. 이때 이 SetUID 파일을 실행하면 그것이 일반 유저든 root 권한의 유저든 파일 소유자의 권한을 갖습니다. 즉 해당파일이 root 이면 그 파일은 누가 실행하든 파일이 실행되는 process 실행시간동안 파일 소유자인 root권한이 되는 것입니다. 즉 SetUID 일때 위의 그림 처럼 이해하자 즉 , test 라는 파일의 소유자가 root이고 이것이 SetUID 파일일 경우에 실행을하면 일반유저든 어떤 유저든 그 process가 올라와 있는 동안에는 ro.. 더보기