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

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

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

RC file

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

1
vim msfrc
1
2
3
4
5
set PROMPT NO
load wmap
clear
banner
workspace

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

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

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

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

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

1
2
3
4
set PROMPT NO
load wmap
clear
banner

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

Run MSF with RC

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

1
./msfconsole -r [rc path]
1
2
3
4
5
6
[*] 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 파일을 보죠.

1
vim ssl.rc
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
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 를 세팅해서 테스트하죠.

1
NO> resource ./ssl.rc

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

1
cat custom.rc 
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
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가 되겠지요)

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

잘 읽어오네요!

Reference

Licensed under CC BY-NC-SA 4.0
Last updated on Apr 23, 2022 17:54 +0900