기본 콘텐츠로 건너뛰기

6월, 2017의 게시물 표시

Metasploit 기초

Metasploit은 콘솔, 커맨드라인, 그래픽을 지원하는 다수의 인터페이스를 제공한다. 함께 제공되는 유틸리티는 Metasploit 프레임워크의 내장 기능에 직접 접근할 수 있다. 1-1 MSFconsole 가장 많이 사용되고 거의 모든 기능을 쓸 수 있다. Figure 1 Kali Linux  위치 Figure 2 MSFconsole  실행   화면 1-2 MSFcli MSFconsole은 매우 다른 프레임워크 접근 방식을 사용한다. MSFcli는 다른 콘솔 도구와 같이 스크립트 수행과 명령 해석 기능에 중점을 둠. 프레임워크의 고유한 인터프리터를 사용하지 않고 커맨드라인에서 직접 수행된다. exploit과 보조 모듈을 실행시킬 수 있으므로 새로운 exploit을 개발하거나 모듈을 테스트할 때 유용하다. 위치는 MSFconsole과 같은 위치에 위치하고 있다. 다음은 MSFcli 실행화면이다. Figure 3 MSFcli  실행   화면 1-3 MSFcli를 이용한 bind_tcp 공격 MSFcli를 이용하여 bind_tcp를 이용하여 공격을 수행한다. 다음의 실습 환경에서 공격을 수행했다. Kali Linux 1.10 ver (공격자) Window XP pro SP2 (공격 대상) 공격을 수행하는데 있어 XP의 방화벽이 꺼져있는 상태로 공격을 수행했다. 실제로 방화벽이 꺼진 상태의 취약한 시스템은 많이 있다고 책에서는 설명한다. 공격에 이용되는 모듈은 ms_08_067_netapi 모듈이다. 모듈을 사용하는 방법을 모른다면 O 옵션을 이용하여 모듈 사용법을 조회 할 수 있다. Figure 4 ms_08_067_netapi  모듈의   사용법 이 모듈은 3가지 옵션으로 RHOST, RPORT, SMPIPE를 제공하며 P를 덧붙여 페이로드를 확인할 수 있다. Figure 5 ms_08_067_netapi  페이로드   설명 사진

슬로리스 공격(Slowloris Attack)

[ 형태 ]   -  정상적인  HTTP GET  요청을 해서 정보를 보면  “….”  네개의 마크가 찍힘 - Slowloris  공격헤더 정보 보시면   ”..”  이렇게 두개로 마킹되는 것을 볼수 있음 (Get Method  사용 ) ->  즉 ,  헤더를 종료하지 않고 보내는 것 ( 소켓을 열어둔체 닫히지 않게 됨 ) ->  계속 일정 간격으로 소켓이 닫히지 않게 유지시켜  Client connection  수치를 최대치로 채우는 공격 [ 정의 ] -  웹 서버와 다수의 커넥션 연결 후 각 커넥션 별로 비정상  HTTP  헤더 ( 완료되지 않는 헤더 ) 를 전송함으로써   웹 서버 단의 커넥션 자원을 고갈 시키는 공격 [ 방어 ]   -  윈도우 시스템은 소켓 커넥션이  130 개로 제한이 되어 있어 실제로 이 공격이 무효화됨 -  리눅스의  Apache  서버는 이 부분에 문제가 있으며 상위버전 재설치를 통해서만 해결가능 -  다단계 방어책 수립 * L7  스위치 캐싱 시스템을 이용한 차단  :  캐싱 장비에서  Request timeout 을 이용하여 차단가능 * Content-length  크기에 대한 임계치 설정  :  일정 크기 이상의  Content-length  값을 요청하는  IP  차단 *  연결  Timeout  설정  :  일정 시간 이상 연속된 데이터를 보내지 않는 접속자에 대해 차단 *  동시 연결에 대한 임계치 설정  :  다수의 커넥션을 동시에 연결하지 못하도록 차단

쉘코드 만들기 강좌

1. 쉘코드 프로그래밍 하기 void  main ( ) {         execve ( "/bin/sh" , NULL , NULL ) ; } // compile : gcc -o mkshell mkshell.c -static 단순히 리눅스 쉘을 실행시켜주는 프로그램인데, 우리에게 필요한건 저 쉘을 실행시켜주는 기계어 루틴입니다. 그리고 컴파일할때 반드시 -static 옵션을 주고 컴파일하세요!! 컴파일한후에, gdb 명령어로 실행시켜줍니다. 그리고 gdb의 disas 명령어로 execve() 루틴을 분석해보겠습니다. 2.쉘코드 분석하기 execve 함수는 위와같은 어셈블리 코드로 이루어져있군요. 분석을 해보도록 하겠습니다. 0x0804e723   < execve + 3 >:   mov     0x10 ( % ebp ) ,% edx  // 세 번째 파라미터 0x0804e726   < execve + 6 >:   push    % ebx 0x0804e727   < execve + 7 >:   mov     0xc ( % ebp ) ,% ecx   // 두 번째 파라미터 0x0804e72a   < execve + 10 >:  mov     0x8 ( % ebp ) ,% ebx   //문자열의 주소, 첫번째파라미터 0x0804e72d   < execve + 13 >:  mov    $ 0xb ,% eax 0x0804e732   < execve + 18 >:   int     $ 0x80 그러니깐.. 3개의 파라미터("/bin/bash", NULL,NULL)을 인자로 주고, eax 레지스터에 0xb를 넣은다음에, 인터럽트 명령어 int 0x80을 실행시켜주면 execve() 함수가 실행되는거였군요!!  그럼 어셈블리코드를 뽑아서 다시 컴파일