본문 바로가기

전체 글

(1196)
Python plugin engine architecture (키콤) 목적 1. 동적 모듈 로딩 사용 빌드 후 실행 파일로 존재하는 프로그램의 경우, 내부에서 참조하는 모듈이 수정되면 메인 소스도 다시 컴파일 해서 반영해야 함 파일이 큰 경우 재빌드 시간 오래 걸림 동적 로딩으로 구현 시 외부 파일 수정하면 런타임에 가져오므로 재빌드 필요 없음.' imp 라이브러리 활용 2. 플러그인 구조 필요 만약 특정 모듈을 동적으로 로딩해서 사용하는 경우 특정 모듈에게 TC가 존재한다면, 모듈 기능이 수정된 후 새로 추가된 TC 뿐만 아니라 기존 TC에 대해서도 전부 테스트 진행 필수 일부 기능이 수정되어도 전체 소스에 영향을 미칠 수 있기 때문. 예를 들어 악성코드 검색하는 모듈이 검색하는 윈도우 파일 대상 검색 알고리즘을 하나 더 추가한다면 윈도우 파일 뿐만아니라 리눅스, 맥 등..
백신 배포본 만들기 (pyinstaller) pip install pyinstaller 배포 파일이 있는 곳에서 pyinstaller [파일명].py 실행 완료 후 dist 폴더에 존재. build 배치 파일 생성 build.bat pyinstaller [파일명].py 위 명령어를 저장 anti_virus.exe 실행 시 exit 관련 오류 발생한다면 sys.exit(0)으로 모듈 참조를 정확히 쓰면 됨. 모듈을 분리해서 import를 한 경우, exe 파일을 만들면서 모두 불러와서 한 파일에 내장함으로 같은 위치에 없어도 정상 동작함. exe 에 내장된 모듈 외에 외부 모듈을 사용하는 방법 import imp 필요 try: m = 'scan_mod' # 로딩할 모듈 명 f, filename, desc = imp.find_module(m, ['']..
kali linux tools whois ip로 dns 명 추출 dig dns명으로 ip 추출 dnsmap dns명으로 ip 관련 상세 내용 추출 smtp-user-enum 공격 대상의 사용자 계정에 관한 정보 (존재 유무 등) ettercap 두 호스트 사이에서 중간자 공격 수행 arpspoof (dsniff 설치하면 깔림) arp 테이블 위조하여 spoofing nmap port 스캐닝 objdump 정적 파일 디버깅 gdb 프로세스 디버깅 가능 snmpwalk 게이트웨이 내부 네트워크에서 다른 호스트의 민감정보 확인가능 medusa 인증 크랙 도구 (브루트포스 기반 대입 인증 시도) tcpdump 네트워크 트래픽 정보 수집 (와이어샤크 같이 필터링 가능) arachni 웹 취약점 스캐너 snmp (simple network ma..
kali msfvenom 보호되어 있는 글입니다.
kali msfconsole kali linux 에서 바로 실행가능. msfconsole search [탐색 대상] ex) tomcat에 대한 exploit을 해보고 싶으면 search tomcat 각 모듈과 설명이 나와있음 tomcat manage 해킹을 시도해보고 싶다면? 위와 같은 모듈명을 사용하면됨 use auxiliary/scanner/http/tomcat_mgr_login options 커맨드를 통해 지정해야 하는 옵션 확인 rhosts => 대상 호스트 주소 , lhosts => 공격자 호스트 주소 set 커맨드로 옵션들 값 지정 exploit 커맨드로 공격 시작
hacking tools ollydbg 실행파일을 소스차원으로 변환 .exe 파일 open 마우스 우클릭 Search for All Intermodular calls (API만 보여줌) GetDlgItemText API로 입력받음 : 찾아서 breakpoint 입력창에서 값 입력하고 submit 하면 GetDlgItemText에서 걸림 Step Over (F8) 클릭해서 내리다보면 자신이 입력한 입력값과 비교하는 대상 발견 password 탐색 완료! Intermodular calls 대신 referenced strings로 찾으면 심어놓은 문자열 확인 가능. 프로그램이 실행되면 메모리에 올라가는 문자열은 보이지 않으므로 api 방식 활용 cheat-engine 게임 등 프로세스 실행 cheat-engine에서 process 찾..
memory architecture & stack frame 하나의 프로세스가 실행될 때 메인 메모리에서 하나의 세그먼트는 위와 같은 구조 Stack 지역변수, 리턴 값 , 매개변수 등 저장하는 영역 Heap malloc , new 등 동적인 메모리를 할당할 때 위치하는 영역 Data 전역변수 , 정적변수 , 배열 (문자열) , 구조체 등이 저장 (초기화 된 변수가 저장) BSS 전역변수 , 정적변수 , 배열 (문자열) , 구조체 등이 저장 (초기화되지 않은 변수가 저장) Text (Code) 함수는 명령어로 볼 수 있는데 이 함수에 대한 기계어 코드가 들어감 Stack Frame #include int sum(int a, int b) { return a + b; } int main(void) { int c = sum(1,2); return c; } 1. 메인 함..
register & system call 레지스터는 명령을 수행하기 위해 필요한 데이터를 담는 저장소 x64 레지스터는 r, x32 레지스터는 e로 시작하는 포맷 데이터 레지스터 rax : 시스템 콜의 실질적인 번호를 가르킴 / 함수의 실행 결과가 담김 rbx (베이스 레지스터) : 메모리 주소를 지정할 때 사용 rcx (카운터 레지스터) : 반복문 카운트 값을 지정할 떄 사용 rdx (데이터 레지스터) : 큰 범위의 값을 연산할 떄 , rax와 함께 많이 사용 포인터 레지스터 rsi : 메모리 값을 이동하거나 비교할 때, 출발지 주소 지정 rdi : 메모리 값을 이동하거나 비교할 때, 목적지 주소 지정 rbp : 스택의 시작점 rsp : 스택의 꼭대기 (명령이 삽입 삭제되면서 값이 변함) 기타 함수의 매개변수 : r8 ~ r15 rax의 값을..
[systemhacking] ELF 동적 디버깅 보호되어 있는 글입니다.
[systemhacking] logical bugs race condition #include #include #include #include #include int len; void giveshell() { system("/bin/sh"); } void * t_function() { int i = 0; while (i "); scanf("..
[systemhacking] Uninitialized value #include class S { int c; public: int f(int i) const { return i + c; } }; int f() { S s; return s.f(10); } int main(void) { int val = f(); std::cout 0){ this->mem = new char[mem_size]; } } char *mem; int mem_size; }; int main(void){ S s(-1); std::cout
[systemhacking] Buffer overflow c++ string은 cin의 입력사이즈에 맞게 메모리 할당 -> 버퍼오버플로우 발생 x #include #include #include void f(const std::vector &src) { std::vector dest(5); std::copy(src.begin(), src.end(), dest.begin()); } int main(void){ int size = 0;; std::vector v; std::cin >> size; v.resize(size); v.assign(size, 0x41414141); f(v); } 5 size보다 큰 src size가 입력되면 버퍼 오버플로우 발생. #include #include #include void f(const std::vector &src) { std::..