일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- web hacking
- Hacking
- CTF
- SQLINJECTION
- Samba
- 스캔
- 메타스플로잇
- 해킹
- 권한상승
- SQL Injection
- 취약점
- Kioptrix
- Los
- 취약점분석
- 모의해킹
- 침투테스트
- Metasploit
- load of sqlinjection
- smb
- 해킹툴
- 칼리리눅스
- root권한
- 해킹도구
- 취약점 스캔
- 내부침투
- 스캐닝
- 암호해독
- 포트스캔
- sql
- 시스템 해킹
- Today
- Total
목록System/System Theory Information (10)
감자 텃밭
블로그 이전중입니다. 아래 링크에서 확인 가능합니다. 😁https://g2hsec.github.io/system-vuln/%EB%B0%94%EC%9D%B8%EB%93%9C-%EC%89%98-Bind-Shell-%EB%A6%AC%EB%B2%84%EC%8A%A4-%EC%89%98-Reverse-Shell/ 보통 쉘을 획득할떄는 두 가지 방법을 사용한다.대표적으로 바인드 쉘과, 리버스 쉘이라는것을 사용한다.1. 바인드 쉘[Bind Shell] - 바인드 쉘의 경우, 서버에서 포트가 열려있고 클라이언트에서 접속하여 쉘을 얻는 방식이다.일반적으로 가장 많이 사용되는 방식이며, 아래와 같이 사용된다.nc(netcat)을 통해 서버를 열어준다-l : listen모드로 port를 열어준다.-v : verbosity를..
우리가 주로 익스플로잇을 하기위해 "leak"한다. 라는말을 들어봤을 것이다. 우선 Memort-leak 즉 leak라 부르는 행위는 메모리의 주소값을 유출시키는 행위이다. 특정한 메모리의 주소를 유출시킬 수 있으며, 인접한 영역의 메모리도 유출시킬 수 있다. 특정 주소의 실제 메모리주소를 알아내어 원하고자 하는 함수의 주소를 얻기위해 사용되며 보통 실제 주소를 얻었을 경우 해당 주소의 offset을 빼서 libc_base 주소를 구해 해당 libc_base 주소에 원하는 함수의 offset주소를 더해 원하고자 하는 함수의 실제 주소를 얻게 된다. 두 가지의 방법이 존재하며. 1. Buffer Overflow를 이용하여, 변수들 사이의 값을 NULL값을 덮어씌워 인접 메모리를 유출시키는 방법 2. Ret..
Gadget의 본래의 개념은 프로그램 상에서 코드 조각을 지칭하였으며, 프로그램 내에 존재하는 명령어 조각 이다. 기존 프로그램에 존재하지만 libc파일에도 존재한다. 포너블(시스템 해킹)에서 주로 바이너리해킹에서 가젯을 사용하는경우 ret로 끝나는 연속된 명령어들을 의미하기도 한다. 주로 pop pop pop ret; 형식이며 여기서 pop은 호출된 함수에서 인자를 정리해주는 용도이다. 즉 read(0, buf, 64) 형식의 read()함수를 호출 했을시 인자값이 0, buf, 64 로 3개이므로 3개의 인자를 정리하기위해 pop pop pop를 쓰는것이다 그 후 ret;로 원하는 함수를 다시 한번 호출 할 수 있다. 하는 함수의 인자가 3개 일 경우 : "pop; pop; pop; ret" 호출 하..
libc-Database란 보통 시스템해킹(포너블)을 할때 사용하는 유틸리티 프로그램이며, glibc 라이브러리 버전별로 원하는 함수의 주소(offset)를 저장하고 있는 데이터베이스이다. 주로 포너블을 할경우 제공되는 바이너리파일에는 ASLR 메모리 보호기법이 적용되어있다. 이 경우 함수의 주소값을 찾기 힘들며, 변경되는 주소의 오차 범위도 크다. 이럴 경우 libc-Database 를 사용하면 편리하게 주소값을 찾을 수 있다. 보통 리눅스자체에 립시 파일이 존재하지만 해당 리눅스 버전별로 립시파일에 있는 주소는 모두 다르다. 아래 사진을 보면 확인이 가능하듯 특정 바이너리파일을 실행시키면 linker되어 있는 libc파일은 base주소를 정해둔다. 마지막 1.5바이트는 000으로 맞추고 나머지 값들을..
메모리의 원하는 특정 값을 저장할 경우 2가지 방식의 저장 방식을 사용하게 된다. 1. 빅 엔디안(big endian) 2. 리틀 엔디안(little endian) 위의 두 가지 방법을 이용해서 저장하게 된다. 빅 엔디안 방식은 낮은 주소에 데이터의 높은 바이트부터 저장하는 방식이며, 보통 사용자 관점에서 숫자를 사용하는 선형 방식과 같은 방식이다. 즉 메모리에 저장된 순서 그대로 읽을 수 있으며, 이해하기가 쉽다. 리틀 엔디안 방식은 낮은 주소에 데이터의 낮은 바이트 부터 저장하는 방식이며, 빅 에디안 방식의 반대로 거꾸로 읽어 들인다 대부분 x86아키텍처에서 리틀 에디안 방식을 사용하며 이를 인텔포맷이라 부른다. 위 사진과 같이 0xfd806729 라는 값을 메모리에 저장시키기 위해서 빅 엔디안 방식..
시스템 해킹(포너블)을 하다보면 PLT, GOT 어디선가 들어봤고, plt, got 라고 불리우는것들을 막 호출하고 변조하고 할겁니다. 이번에는 이러한 plt와 got가 뭔지에 대해 알아보도록 하겠습니다. 보통 함수가 실행되면 plt 주소로 찾아가고 plt에는 got의 주소가 담겨져 있어 got를 참조하고 got에는 함수의 실제주소가 담겨져있다고들 설명한다 그럼 대체 왜 plt는 got를 참조하는거지? 바로쓰면 안되는건지 왜이렇게 왔다갔다 하는지 알아보도록 하겠습니다. 우선 PLT와 GOT의 의미부터 알아보도록 하겠습니다. PLT : 외부 프로시저를 연결해주는 테이블. GOT : PLT가 참조하는 테이블. 프로시저들의 주소가 들어있음. 여기서 프로시저란 무엇인가?? 프로시저 : 매개변수는 존재하지만 반환..
함수의 프롤로그가 있다면 에필로그도 있기 마련이죠 이번엔 함수 에필로그에 대해 다뤄보도록 하겠습니다. 우선 프롤로그 과정에서는 push ebp mov ebp, esp 과정을 통해 이루어집니다. 에필로그 과정에서는 2가지로 나뉘어 진행되게 됩니다. 우선 코드를 보시게 되면, 마지막에 leave ret 로 구성 되어 있는대 저 두개의 과정을 거치게 되는것이 에필로그입니다 우선 leave 부터 살펴보도록 하겠습니다. "leave" mov esp, ebp pop ebp leave는 위와 같은 구조로 되어있습니다. mov를 통해 esp와 ebp의 위치를 같게 만들어 스택 상태를 정리해준다고 보시면 됩니다. 즉 스택에 존재하던 지역변수들을 정리해주는 과정입니다. 그 후 pop ebp를 통해 스택에 가장 위에 있던 ..
영화나 웹툰등 시작할떄 플롤로그와 에필로그가 있듯 함수도 실행이 되면 플로로그 과정과 에필로그 라고 불리는 과정이 존재한다 이번에는 프롤로그 과정에 대해 알아보도록 하겠다. 우선 플롤로그는 실행되에 해당 함수의 Stack Frame이 생성되면 가장 먼저 실행되는 순서의 명령어들이다. 우선 해당 함수가 호출되면 Stack Frame가 생성되고, 스택에는 RET와 SFP가 쌓이게 되고 그 후 메모리 어딘가에 존재하는 ebp와 esp가 스택에 쌓이며, 해당 스택의 크기를 지정하게된다. 아래 사진을 이해를 도와보자. 사진과 같이 스택에는 함수 인자 | RET | SFP | 지역함수, 변수 등으로 쌓이게되며 프롤로그 과정을 거치게 된다. 위 사진과 같이 제일처음 PUSH ebp를 한다 즉 스택에 베이스가되는 eb..