2011. 10. 6. 18:35
출처 : 오픈소스 툴킷을 이용한 실전해킹 절대 내공 _ Johnny Long

msfconsole interface


- 가장 강력한 인터페이스인 msfconsole은 프레임워크 환경에 대한 세밀한 제어와 공격 모듈에 대한 옵션 설정, 그리고 공격 실행을 위한 대화형 커맨드 라인을 제공한다.



msfconsole 명령
[도움말] help
help명령을 이용해 도움말 메뉴를 참조할 수 있다.


[인터페이스 종료] exit, quit
msf > exit
msf > quit


[reload]
msfconsole 인터페이스를 실행 중에 공격 또는 페이로드가 업데이트 되는 경우에는 reload명령으로 해당 업데이트를 수행할 수 있다.
_.command..: 이상하게, 나는,, 내 4.0 버전에서는 reload명령이 Unknown command : reload라고 뜬다.. 왜일까??

[version]
msfconsole 인터페이스의 버전을 알려준다.



[cd 명령]
msfconsole이 정의되지 않은 명령을 실행하고자 할 때 사용한다. 이는 콘솔을 종료하지 않고 nmap이나 Nitko와 같은 다른 툴을 실행할 수 있으므로 침투 테스트 과정에 매우 유용하다. ls와 같은 명령은 msfconsole에서는 구현되지 않았다. 우리의 공격에서는 명령이 Cygwin환경으로 전달되어 처리된다.



MSF 환경
위 msfconsole인터페이스는 인터페이스 자체에 대한 설정, 공격 옵션 설정, 페이로드 옵션 설정을 위해 이를 이용하며 공격 모듈과 프레임워크 엔진 간에 정보를 전달할 때도 이를 이용한다.
환경 변수는 전역(global) 환경 변수와 임시(temporary) 환경 변수로 나뉜다.
setg 명령과 unsetg명령은 전역 환경 변수를 설정할 때 사용한다.
공격 모듈이 로드될 때는 임시 환경 변수 또한 함께 로드된다.
전역 환경 변수와 임시 환경 변수간의 중복으로 충돌이 발생될 때는 임시 환경 변수의 값이 이용된다.

[setg] 전역 환경 변수의 값을 설정, 전역 환경변수들의 내용을 출력
ex )
 msf > setg RHOST 192.168.1.1
 RHOST -> 192.168.1.1

 msf > setg
 AlternateExit : 2
 DebugLevel : 0
 Encoder : Msf::Encoder::PexFnstenvMov
 Logging : 0
 Nop: Msf::Nop::Pex
 RHOST : 192.168.1.1
 RandomNops: 1

      command : ->나의 경우는 setg해 놓은 것이 아무것도 없기에, No entries in data store. 이라는 명령어가 떳다.

[unsetg] 명렁어의 경우 전역 환경 변수의 값을 해제해 준다.
 ex)
  msf > unsetg RHOST
 
  msf > setg
  AlternateExit : 2
  DebugLevel : 0
  Encoder : Msf::Encoder::PexFnstenvMov
  Logging : 0
  Nop: Msf::Nop::Pex
  RandomNops: 1


[save]명령은 모든 전역, 임시 환경 변수를 /.msf/config에 저장하는데, 인터페이스가 실행될 때마다 이 저장된 환경 변수들은 다시 로드된다.


   메타스플로이트 프레임워크 환경 변수
일반적으로 사용자 정의 옵션은 대문자를 이용하여 고급 옵션인 경우에는 대소문자를 섞어 사용한다.

프레임워크 옵션은 대소문자를 섞어 사용하며 내부 변수는 밑줄('_')로 시작한다.



   [ General ]

   EnablePython 
   -InlineEgg 라이브러리를 이용해 파이썬으로 작성한 외부 페이로드를 사용할 것인지를 설정하는 변수다. 모듈의 로딩이 지연되는 것을 방지하기 위한 이 변수의 디폴트 값은 Disable이지만, InlineEgg 라이브러리를 이용한 페이로드를 사용하려면 이 변수 값을 Enable시켜야 한다.

   DebugLevel
   - 디버그 메시지의 설명 정보 수준을 설정하는 변수다. 0(디폴트 값)으로 설정하면 아무런 디버그 메시지도 출력하지 않는다. 가장 높은 수준(가장 자세히 디버그 메시지 출력)은 5이다.

   Logging
   - 모든 실행 동작과 성공적인 공격 세션들에 대해 로그를 남길 것인지를 결정하는 변수다. 실행 동작에 대한 로그는 공격 모듀내에서 exploit()이나 check()함수를 실행시키기 위한 모든 시도에대한 로그다. 세션에 대한 로그는 성공적인 공격 세션에서 각 명령이 실행되고 응답된 정확한 시간을 포함한다. 세션 로그의 내용은 msflogdump 명령으로 볼 수 있다.

  LogDir
  - 세션 로그가 저장되는 디렉토리 경로를 설정한다. 디폴트 값은 ~/.msf의 하위 디렉토리인 logs다.

  AlternateExit
  - 펄 인터프리터의 버그에 의해 프레임워크가 종료될 때 세그먼트 폴트(Segmentation fault)가 발생되는 것을 방지하기 위해 사용된다. 이 변수값을 2로 설정하면 종료시에 세그먼트 폴트 메시지가 발생하지 않는다.



[ Sockets ]

  UdpSourcelp
  - 모든 UDP 요청이 사용하는 Source IP 주소를 설정한다.(spoof).
  
  ForceSSL
  - 모든 TCP 연결이 SSL을 이용하도록 강제한다.
 
  ConnectTimeout
  - 소켓 연결 타임아웃(timeout)값을 설정한다.

  RecvTimeout
  - Recv(-l)에 대한 타임아웃 값을 설정한다.

  RecvTimeoutLoop
  - 초기 데이터 이후의 Recv(-l) 루프(loop)에 대한 타임아웃값을 설정한다.

  Proxies
  - TCP 소켓에 대한 여러 가지 프록시 모드를 설정한다. 프록시 문자열은 TYPE:HOST:PORT:<extra fields>의 형태로 작성되야 한다. 각 프록시 설정은 '.'로 구분되며 설정된 순서대로 사용된다.




[ Encoders ]

 Encoder
  - 인코더(Encoder)를 선택할 때 사용된다.(전체경로).
 
 EncoderDontFallThought 
  - 설정된 인코더 모듈이 실패를 계속 하지 않도록 한다.





[ Nops ]
 
   Nop
   - 특정한 NOP 모듈을 선택할 때 사용된다.(전체 경로).
 
  NopDontFallThrough
  - 설정된 NOP 모듈이 실패를 계속하지 않게 한다.

  RandomNops
  - 가능하면 x86 NOP sled를 무작위 추출한다.





 [ Socket Ninja ]
 
 NinjaHost
 - socketNinja 콘솔의 주소

 NinjaPort
 - socketNinja 콘솔의 포트

 NinjaDontKill
 - socketNinja 접속이 이루어진 후에 공격을 종료하지 않는다.(multi-own).





[ 내부 변수(Internal Variables) ]

다음 변수들은 사용자가 설정하거나 모듈 내에서 사용하면 안 된다.

  _Exploits
    로드된 공격의 모듈의 해시를 저장하는 데 사용된다.

  _Payloads
    로드된 페이로드의 해시를 저장하는 데 사용된다.

  _Nops
    로드된 NOP의 해시를 저장하는 데 사용된다.

  _Encoders
    로드된 인코더의 해시를 저장하는 데 사용된다.

  _Exploit
    현재 선택된 공격 모듈을 저장하는 데 사용된다.

  _Payload
    현재 선택된 페이로드를 저장하는 데 사용된다.

  _PayloadName
    현재 선택된 페이로드의 이름

  _BrowserSocket
    브라우저로 귀환하는 소켓에 대한 추적을 위해 msfwef인터페이스에서 사용된다. //현재 지원 안함

   _Console
     UI간의 콘솔 클래스를 재정의하는데 사용된다.


show 명령은 exploits, payloads, encoders, NOPs 중에서 하나의 인자를 이용한다. msfweb 인터페이스에서는 디폴트 인코더와 NOP 생성기를 콤보 박스를 이용해 변경할 수 있다. msfconsole 인터페이스에서도 이를 변경할 수 있지만, 이 경우에는 커맨드 라인을 통해 변경해야 한다.

디폴트 NOP 생성기를 Opty2 알고리즘을 이용하는 NOP 생성기로 바꾸려면 먼저 현재 설정된 NOP 생성기를 setg 명령을 통해 확인해야 한다. 다음에는 show 명령으로 사용 가능한 NOP 생성기 리스트를 출력한다. 마지막으로
setg Nop Msf::Nop::Opty2 명령어를 이용해 디폴트 NOP 생성기를 변경한다.

msf > setg Nops Msf::Nop::Opty2
Nops -> Msf::Nop::Opty2
msf >
Posted by Triany