분류 전체보기 289

Nmap 스캐너

스캐너의 대장 nmap에 대해 알아보자. nmap을 위한 책이 따로 있을 정도로 활용 범위가 높은 도구이다. 실무에서도 당연히 활용도 높게 사용되어지고 있다. 이놈의 많은 기능들을 여기에 다 쓸 수 없기에.. 자주 사용되는 기능, 명령어들을 알아보자. 윈도우 환경은 따로 다운 받아야 하지만, https://nmap.org/ 리눅스 환경은 기존에 설치돼있는 OS가 많다. nmap 치고 그냥 옵션 달아서 쓰면된다. 아래는 nmap에서 자주 사용되는 스캔 타입이다. TCP나 half-open은 알거고.. * FIN, X-MAS, NULL 스캔 방화벽으로 필터돼있을 때 사용. 3가지 전부다 똑같은 반응이 옴. 포트 열려있으면 응답 없음 포트 닫혀있으면 RST 수신 * Ping 스캔 말 그대로 ping ( ICM..

메타스플로잇을 활용한 수동적 정보 수집

* 수동적 정보 수집 이란? - 수동적이고 간접적인 수집 방법으로, 피해자 시스템에 직접 접근하지 않은 상태에서 정보를 얻는 행위를 말한다. 네트워크 영역, 관리자 정보, 대상 시스템 정보 (OS, 웹서버) 등을 알 수 있다. Yeti 혹은 whois 같은 일부 도구는 대상에 영향을 미치지 않고 정보 수집이 가능하다. 여기에 대한 내용은 너무 방대하므로.. 개념 도입 위주로 포스팅한다. * OSINT(Open Source Intelligence : 오픈 소스 정보) - 대상에 대한 정보 검색, 조회, 수집이 가능한 공개된 정보를 수집하는 저장 공간이다. * Whois 룩업 whois [url] 을 입력하면 그 웹사이트의 도메인 서버 이름과 그 외 각각의 정보 수집이 가능하다. 큰 기관의 경우 DNS를 사..

메타스플로잇을 이용한 Exploit 테스트 (MS08-067_NetAPI)

1. MS08-067_NetAPI 발생 원인 - 마이크로소프트 윈도우 서버 서비스들은 파일 이나 프린트 서비스의 공유를 지원한다. 이 서비스에서 원격 실행 코드에 취약하다는 것이 발견 되었다. 예를 들어, 서버 서비스 구성 요소에 특수한 경로로 조작된 RPC 요청으로 인해 스택 메모리에 손상을 준다. netapi32.dll의 NetprPathCanonicalize() 영향을 받는다. netapi32.dll 파일에서 비롯된 취약점이라 이름도 MS08-067_NetAPI 이다. 2. 테스트 환경 - 공격자: 192.168.117.129 (OS: Backtrack5 R3) - 피해자: 192.168.117.130 (OS: Windows XP SP2) 3. 테스트 과정 및 결과 a. msfconsole을 실행하..

메타스플로잇(Metasploit ) 개요

메타스플로잇 기본 용어 * Exploit: 공격자나 침투 테스터들이 시스템, 응용프로그램 또는 서비스에 있는 결함을 이용하는 거을 의미한다. 시스템을 공격해 개발자가 결코 의도하지 않은 특정한 결과를 도출하기 위한 방법으로 exploit을 사용한다. 일반적인 exploit은 버퍼오버플로우, 웹 어플리케이션 취약점 그리고 설정상의 오류를 포함한다. * payload: 시스템 상에서 실행되길 원하는 코드이자, framework에 의해 선택 되고 처리되는 코드이다. 예를 들어, 리버스 쉘은 공격 대상의 시스템으로부터 공격자에게 윈도우 명령 프롬프트 연결을 생성해주고, bind shell은 공격 대상의 열린 포트에 공격자가 연결할 수 있는 명령창을 bind해주는 페이로드이다. 페이로드는 공격 대상의 운영체제 상..

리눅스 환경의 스레드(Threads)

우리가 흔히 다중 작업을 떠올려본다면 fork를 이용하여 여러개의 프로세스를 생성하여 각각 작업을 하는 것을 떠올릴 것이다. 근데 프로세스를 새로 생성한다는 것은 생각보다 무거운 작업이다. 그래서 스레드라는 것이 나온다. 스레드는 하나의 프로세스가 여러개의 작업을 동시에 할 수 있도록 해주는 것이다. 이렇게 하나의 프로세스에 여러개의 스레드를 둔다면, 프로세스가 동시에 여러가지 작업을 할 수 있게 된다. (시간을 쪼개어 CPU 점유를 분할하는 것임) 아파치 웹서버를 예를 들어보자. 위 처럼 웹서버 같은 데서는 스레드를 이용하여 여러 명의 사용자와 세션을 맺어 다중 처리 서버를 구현할 수 있다. 스레드는 다른 영역은 공유하지만, 스택영역은 별개로 쓴다. ​그리하여 fork 보다 훨씬 효율적이다. 스레드간에..

리눅스 환경의 시그널(signal)

시그널에 대해 알아보자. 이미 여러번 시그널에 대한 얘기를 했지만 이번에 이게 뭔지 제대로 알아 보자. 시그널은 소프트웨어(S/W) 인터럽트이다. 하드웨어 인터럽트도 있겠지? 그건 H/W 장치의 입출력에 대한 인터럽트이고, 시그널은 소프트웨어의 상황에 따른 인터럽트로, 비동기적인(asynchronous) 이벤트에 대한 핸들링을 하는 것이다. 예를 들어, 사용자가 프로그램을 멈추거나 종료시키면 발생하는 "메세지"정도로 보면 되겠다. (실제로 windows 환경에서는 signal 을 message 라고 표현함) 비동기적 이벤트란, 예측이 불가능 한 이벤트를 말한다. (동기적(synchronous) 이벤트는 scanf가 실행됐을 때 입력을 받아야 block이 풀리는 것 같이 예측 가능한 상황을 말함) 시그널의..

표준 입출력 라이브러리 (Standard I/O Library)

standard i/o 라이브러리 즉, #include 에 정의된 라이브러리 함수들에 대해 알아볼 것이다. 얘네들은 UNIX관련 표준은 아닌데.. 왜냐면 다른 OS에서도 이 친구들을 사용할 수 있기 때문이다. 표준 I/O 라이브러리 들이 대단한 이유는.. 역사를 좀 타고 올라가보면 Mike Lesk라는 사람이 처음에 Portable I/O 라이브러리를 만들었는데, 데니스 리치님께서 1975년경에 이것을 크게 뜯어고쳤는데 이게 지금까지도 별로 수정된 부분없이 계속해서 쓰이고 있다는 점이다. 쩐다.. 먼저 stdio를 공부하기 위해 스트림(stream)과 FILE 구조체에 대한 개념을 알아야 한다. 저번에 배운 File I/O 함수들, read, write, open 등의 함수들을 컨트롤하기 위해 파일 디스..

리눅스 프로세스 상호 관계

이전까지 프로세스를 어떻게 제어하는지에 대한 내용을 보았다. 이제 이 프로세스들이 서로 어떤 관계들이 성립하는지에 대한 내용을 볼 것이다. 먼저 UNIX 시스템에 사용자가 로그인하는 과정에 대한 얘기를 해볼까 한다. 터미널 로그인에 대한 내용을 보겠다. 먼저, init 프로세스가 터미널이 생성될 때마다 fork로 복사가 된다. 하나의 터미널당 한번 init을 하나씩 복사하는 것이다. 그리고 exec류 함수를 이용하여 fork로 생성된 자식 init 프로세스를 getty 라는 프로그램으로 변경한다. 지금 상태의 getty는 텅텅 비어있다. (getty는 터미널을 열고 초기환경 설정 및 시스템에 열린 터미널을 관리하는 프로그램이다.) 자 이제 getty가 실행이 되었다. 그다음은 getty가 다시 exec류..

리눅스 프로세스 생성, 실행 그리고 제어

프로세스 생성 자식 프로세스를 생성하는 fork 함수에 대해 알아보자. 보다시피 반환값을 2가지 가진다 (실패 제외) 자식프로세스 값, 부모 프로세스 값. 자식은 getppid() 함수를 이용해 부모 프로세스의 pid를 얼마든지 알아낼 수 있고, 부모는 하나뿐이지만 부모는 여러개의 자식프로세스를 가질 수 있고 별도의 자식pid를 알아낼 함수가 존재하지 않는다. 보통 자식프로세스가 생성되면 부모의 pid값에 +1한 값이 자식프로세스의 pid이다. fork가 자식프로세스를 생성하고 나서도 부모, 자식 프로세스 두가지 모두 정상적으로 실행된다. fork로 생성된 자식프로세스는 부모 프로세스의 복사본이다. 다만, 코드(텍스트) 세그먼트는 복사하지 않고 공유한다. 중요한 것은, 자식은 부모와 메모리 영역을 공유하..

리눅스 환경의 시간과 날짜

시간과 날짜에 대한 시스템콜들을 알아보겠다. time() 부터 보겠음 time 함수는 현재 시간값을 반환하는 함수이다. 근데 시간 계산이 좀 특이함. 리눅스의 기원? 시간이 1970년 1월 1일 00시 00분 00초 부터 시작해 저 시간 부터 초 단위로 계산하여 현재 시간을 구한다. 아 그럼 gettimeofday 함수는 뭐지? 좀더 상세하게 ms(밀리 세컨드) 단위로 계산하는 것이다. tp라는 timeval 구조체를 가르키는 포인터에 현재 시간을 저장한다. tzp는 NULL을 무조건 넣어야 한다는데.. 유닉스 규격에 그렇게 되어있단다. gettimeofday 함수같이 밀리 세컨 까지 표기하는 것은 몇몇 시스템에서 굉장히 효과적일 수 있다. 시간이 정말 중요한 그런 부분.. timeval 구조체는 아래와..

반응형