Metasploit resource script와 ruby code로 커스터마이징 하기

예전부터 저는 Metasploit을 Custom 해서 사용하고 있었습니다. 그리고 올 초 msf의 업데이트로 파일 시스템의 구조가 바뀌면서 Custom 코드가 좀 꼬이게 되었습니다. 그래서 다시 Custom 과정을 거치던 중 재미있는 아이디어가 생각나서 포스팅 작성해봅니다.

바로 resource script 를 이용해서 어느정도 Custom 흉내를 내는 방법입니다. 물론 모든걸 할 순 없지만 귀찮았던 부분들을 rc 파일을 통해 쉽게 변형할 수 있습니다. 대체로 공격, 테스팅의 자동화를 위해 사용하는 resource script, 그리고 그 resource script 를 이용한 Custom 코드 적용에 대한 내용으로 이야기를 시작하겠습니다.

RC file

rc 파일을 사용하는 방법은 간단합니다. 수행할 명령행을 담은 파일을 하나 만들어주면 됩니다.

vim msfrc
set PROMPT NO
load wmap
clear
banner
workspace

순서대로 보면 PROMPT를 바꾸고 wmap을 로드한 후 banner 띄우고 workspace를 보여주도록 저장해뒀습니다.

또 다른 방법으로 rc 파일을 생성할 수 있는데.. 바로 msf의 makerc 명령을 이용하는 것입니다. makerc 명령은 최근 수행한 msf 내 명령을 기록하여 파일로 만들어줍니다. (사실 이건 오히려 rc의 원래 목적인 자동화 테스팅에서 많이 쓰는 부분이죠)

2.rc 라는 파일을 만들어보면

NO> makerc ./2.rc 
[*] Saving last 4 commands to ./2.rc ...

최근에 수행한 4개의 명령이 아래와 같이 저장됨을 알 수 있습니다.

set PROMPT NO
load wmap
clear
banner

자 그럼 이제 msf를 실행할 때 rc 파일이 불러와지도록 해볼까요?

Run MSF with RC

msfconsole은 여러 인자값을 받을 수 있습니다. 물론 많은 사용자들이 인자값을 안주고 그냥 console만 열지만.. 조금만 더 시간을 투자하신다면 더 편하고 빠르게 초기 세팅을 할 수 있습니다. 바로 -r 옵션을 이용하여 실행 시 load 할 rc 파일을 지정할 수 있습니다. (rc 자주 쓰시면 익숙한 옵션이죠)

./msfconsole -r [rc path]
[*] Processing ./1.rc for ERB directives.
resource (./1.rc)> set PROMPT NO
PROMPT => NO
resource (./1.rc)> clear
[*] exec: clear
[....]

위 같은 형태로 rc 파일로 인해 빠르게 환경 세팅이 가능합니다.

Ruby code in RC

제 대부분의 Custom 과정은 Ruby 코드를 직접 작성하는 것으로 이루어집니다. 운이 좋게도 msf 전반적으로 ruby를 지원하기 때문에 resource script 에서도 ruby 코드를 적용할 수 있습니다. html 처럼 <ruby> 태그를 통해 ruby 코드 작성이 가능합니다. 이것도 사실 공격 수행과정의 자동화를 위해 많이 사용하지만.. 잘 활용하면 나만의 msf를 만드는데 굉장한 도움을 줄 수 있습니다. 아래 rc 파일을 보죠.

vim ssl.rc
use auxiliary/scanner/http/ssl_version
set THREAD 6

<ruby>
framework.db.hosts.each do |host|
  host.services.each do |service|
    if service.name == "https" and service.state == "open"
      self.run_single("set RHOSTS #{host.address}")
      self.run_single("set RPORT #{service.port}")
      self.run_single("run")
    end
  end
end
</ruby>

원래는 msf에서 중간에 불러와 사용하는 rc 입니다. 간단하게 https 가 열려있는지 확인하고 open이면 ip와 port 를 세팅해서 테스트하죠.

NO> resource ./ssl.rc

이런 과정을 msf가 켜질 때 사용할 수 있는겁니다. 물론 테스트에 대한 ruby 코드가 아닌.. 우리만의 msf를 위한 Custom 코드이겠지요.

cat custom.rc 
setg Prompt "SHELL(Sessions: %S Jobs: %J)"
clear
banner

<ruby>
require 'rss'
rss = RSS::Parser.parse("https://rss.packetstormsecurity.com/files/tags/exploit/", false)
rss.items.each do |item|
  puts "#{item.pubDate} - #{item.title}"
end
</ruby>

간단하게 rss feed 읽어오는 코드로 추가했습니다. (개인 스타일에 맞춰 만들어 나간다면.. 아주 좋은 msf가 되겠지요)

#> ./msfconsole -r custom.rc
       =[ metasploit v4.15.0-dev-aceeedc                  ]
+ -- --=[ 1666 exploits - 956 auxiliary - 294 post        ]
+ -- --=[ 486 payloads - 40 encoders - 9 nops             ]
+ -- --=[ Free Metasploit Pro trial: http://r-7.co/trymsp ]

[*] resource (custom.rc)> Ruby Code (174 bytes)
Fri, 07 Jul 2017 03:49:16 +0900 - Solarwinds LEM 6.3.1 Hardcoded Credentials
Fri, 07 Jul 2017 03:47:12 +0900 - Barracuda WAF V360 Firmware 8.0.1.014 Support Tunnel Hijack
Thu, 06 Jul 2017 23:58:22 +0900 - Barracuda WAF V360 Firmware 8.0.1.014 Username / Session ID Leak
Thu, 06 Jul 2017 23:56:33 +0900 - Barracuda WAF V360 Firmware 8.0.1.014 Grub Password Complexity
Thu, 06 Jul 2017 23:55:55 +0900 - Barracuda WAF V360 Firmware 8.0.1.014 Credential Disclosure
Thu, 06 Jul 2017 23:02:22 +0900 - Barracuda WAF V360 Firmware 8.0.1.014 Early Boot Root Shell
Thu, 06 Jul 2017 11:11:11 +0900 - LibTIFF 4.0.7 _TIFFVGetField (tiffsplit) Out-Of-Bounds Read
Thu, 06 Jul 2017 10:44:44 +0900 - LibTIFF 4.0.8 tif_jbig.c Denial Of Service
Thu, 06 Jul 2017 10:01:11 +0900 - LibTIFF tif_dirwrite.c Denial Of Service
Wed, 05 Jul 2017 17:32:22 +0900 - Lepide Auditor Suite Remote Code Execution
Wed, 05 Jul 2017 14:57:28 +0900 - GoAutoDial 3.3 Authentication Bypass / Command Injection
Wed, 05 Jul 2017 14:47:42 +0900 - PDNS Manager Remote Command Execution
Wed, 05 Jul 2017 14:45:21 +0900 - IoT mDNS/DNS-SD QM Amplification Distributed Denial Of Service
Wed, 05 Jul 2017 14:44:07 +0900 - rpcinfo Portmap DUMP Call Amplification Distributed Denial Of Service
Tue, 04 Jul 2017 02:02:02 +0900 - Yaws 2.0 Cross Site Scripting
Mon, 03 Jul 2017 18:32:22 +0900 - OpenDreamBox 2.0.0 Remote Code Execution
Mon, 03 Jul 2017 15:55:55 +0900 - Xenforo Forum CMS 1.5.13 Cross Site Scripting
Mon, 03 Jul 2017 15:44:44 +0900 - InsomniaX 2.1.8 Arbitrary Kernel Extension Loading
Mon, 03 Jul 2017 14:44:44 +0900 - Webmin 1.840 Cross Site Scripting
Mon, 03 Jul 2017 12:12:12 +0900 - Humax Digital HG100R 2.0.6 XSS / Information Disclosure
Mon, 03 Jul 2017 01:11:11 +0900 - Australian Education App Remote Code Execution
Mon, 03 Jul 2017 01:03:33 +0900 - BestSafe Browser FREE NoAds 3 Remote Code Execution
Mon, 03 Jul 2017 00:00:02 +0900 - BOA Web Server 0.94.14rc21 Arbitrary File Access
Sun, 02 Jul 2017 18:32:22 +0900 - eVestigator Forensic PenTester Remote Code Execution
Sun, 02 Jul 2017 13:02:22 +0900 - DoorGets CMS 7.0 Open Redirect
SHELL(Sessions: 0 Jobs: 0)> 

잘 읽어오네요!

Reference

  • https://www.hahwul.com/2017/05/metasploit-msfconsole-prompt.html
  • https://rss.packetstormsecurity.com/files/tags/exploit/