Tunna — набор инструментов, которые будут заворачивать и туннелировать любую TCP-связь через HTTP

  • Полный брандмауэр (входящие и исходящие соединения ограничены — кроме порта веб-сервера)
  • Веб-панель может использоваться для подключения к любой службе на удаленном хосте. Это будет локальное подключение локального порта на удаленном хосте и должно быть разрешено брандмауэром.
  • Веб-панель будет считывать данные из служебного порта, обертывая их через HTTP и отправляя их как ответ HTTP на локальный прокси.
  • Локальный прокси разворачивает и записывает данные в локальный порт, где будет подключена клиентская программа.
  • Когда локальный прокси-сервер получает данные на локальном порту, он отправляет их в web-таблицу как HTTP-сообщение.
  • Веб-панель будет считывать данные из HTTP-сообщения и помещать их в служебный порт и повторять — ^
  • Только порт веб-сервера должен быть открытым (обычно 80/443). Вся связь (Внешне) выполняется по протоколу HTTP

Использование

 # python proxy.py -u <remoteurl> -l <localport> [options] 

 

Опции

 --help, -h show this help message and exit
--url=URL, -u URL url of the remote webshell
--lport=LOCAL_PORT, -l LOCAL_PORT local listening port
--verbose, -v Verbose (outputs packet size)
--buffer=BUFFERSIZE, -b BUFFERSIZE* HTTP request size (some webshels have limitations on the size) 

 

 

Нет опций SOCKS

Параметры игнорируются при использовании SOCKS-прокси

 --no-socks, -n Do not use Socks Proxy
--rport=REMOTE_PORT, -r REMOTE_PORT remote port of service for the webshell to connect to
--addr=REMOTE_IP, -a REMOTE_IP address for remote webshell to connect to (default = 127.0.0.1) 

 

 

Параметры прокси-сервера

Подключение туннеля через локальный прокси-сервер

 --up-proxy=UPPROXY, -x UPPROXY Upstream proxy (http://proxyserver.com:3128)
--auth, -A Upstream proxy requires authentication 

 

 

Расширенные опции

 --ping-interval=PING_DELAY, -q PING_DELAY webshprx pinging thread interval (default = 0.5)
--start-ping, -s Start the pinging thread first - some services send data first (eg. SSH)
--cookie, -C Request cookies
--authentication, -t Basic authentication 

 


пример использования: python proxy.py -u http://10.3.3.1/conn.aspx -l 8000 -v

 # This will start a Local SOCKS Proxy Server at port 80000
# This connection will be wrapped over HTTP and unwrapped at the remote server
 
python proxy.py -u http://10.3.3.1/conn.aspx -l 8000 -x https://192.168.1.100:3128 -A -v
 
# This will start a Local SOCKS Proxy Server at port 80000
# It will connect through a Local Proxy (https://192.168.1.100:3128) that requires authentication
# to the remote Tunna webshell
 
python proxy.py -u http://10.3.3.1/conn.aspx -l 4444 -r 3389 -b 8192 -v --no-socks
 
# This will initiate a connection between the webshell and Remote host RDP (3389) service
# The RDP client can connect on localhost port 4444
# This connection will be wrapped over HTTP 

 

 

ОГРАНИЧЕНИЯ / ИЗВЕСТНЫЕ ОШИБКИ / ХАКИ

 This is a POC code and might cause DoS of the server.
 All efforts to clean up after execution or on error have been made (no promises)
 
Based on local tests: 
 * JSP buffer needs to be limited (buffer option):
 4096 worked in Linux Apache Tomcat
 1024 worked in XAMPP Apache Tomcat (slow)
 * More than that created problems with bytes missing at the remote socket
 eg: ruby proxy.rb -u http://10.3.3.1/conn.jsp -l 4444 -r 3389 -b 1024 -v
 
 * Sockets not enabled by default php windows (IIS + PHP)
 
 * Return cariages on webshells (outside the code): 
 get sent on responses / get written on local socket --> corrupt the packets
 
 * PHP webshell for windows: the loop function DoS'es the remote socket: 
 sleep function added -> works but a bit slow 
 * PHP webshell needs new line characters removed at the end of the file (after "?>")
 as these will get send in every response and confuse Tunna 

 

Файлы

 Webshells:
 conn.jsp Tested on Apache Tomcat (windows + linux)
 conn.aspx Tested on IIS 6+8 (windows server 2003/2012) 
 conn.php Tested on LAMP + XAMPP + IIS (windows + linux)
 
WebServer:
 webserver.py Tested with Python 2.6.5
 
Proxies:
 proxy.py Tested with Python 2.6.5 

 

 

Технические подробности
Архитектурные решения

Данные отправляются в HTTP Post Body (без переменной post)

Инструкции / конфигурация отправляется в веб-панель в виде параметров URL (HTTP Get)

Данные отправляются в теге HTTP (HTTP Post)

Websockets не используется: не поддерживается по умолчанию большинством веб-серверов

Асинхронные ответы HTTP действительно не возможны
Прокси запрашивает сервер постоянно (по умолчанию 0,5 секунды)

Инициативная фаза

Первый пакет инициирует сеанс с помощью webshell — возвращает файл cookie, например: http: //webserver/conn.ext? Proxy

Второй пакет отправляет параметры конфигурации подключения в веб-панель, например: http: //webserver/conn.ext? Proxy & port = 4444 & ip = 127.0.0.1

 IP and port for the webshell to connect to
This is a threaded request:
 In php this request will go into an infinate loop 
 to keep the webshell socket connection alive
 In other webshells [OK] is received back 

TUNNA клиент

Локальный сокет будет создан, когда клиентская программа собирается подключиться.

После того, как клиент подключен, инициируется пинговый поток и выполняется запуск.

Любые данные в сокете (от клиента) считываются и отправляются как запрос HTTP-сообщения. Любые данные в сокете webshell отправляются как ответ на запрос POST

ПИНГОВЫЕ ШАГИ

Поскольку ответы HTTP не могут быть асинхронными, этот поток будет обрабатывать запросы HTTP Get на веб-панели на основе интервала (по умолчанию 0,5 с). Если в веб-оболочке есть данные для отправки, он (также) отправит его как ответ на этот запрос.

В противном случае он отправит пустой ответ

В целом

Данные из локального прокси-сервера получают отправку с помощью HTTP-сообщения. З

апросы Get запрашиваются каждые 0,5 секунды для запроса веб-страницы для данных.

Если есть данные на стороне веб-хоста, отправьте их как ответ на один из этих запросов

WebShell

Webshell подключается к сокету на локальном или удаленном хосте.

Любые данные, записанные в сокет, отправляются обратно в прокси-сервер в качестве ответа на запрос (POST / GET).

Любые данные, полученные с сообщением, записываются в сокет.

Скачать Tunna

cryptoparty

Cryptography is typically bypassed, not penetrated.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *