본문 바로가기

Security

(80)
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::..