Сегодняшние веб-атаки, как правило, являются инъекционными. Причиной внедрения обычно является неполная фильтрация переменных, что позволяет злоумышленникам незаконно выполнять программы или запрашивать и изменять произвольные данные. Поскольку атаки с внедрением становятся все более интенсивными, появились некоторые специализированные коды фильтрации. Однако несовершенство некоторых кодов фильтрации может привести к новым атакам. Ниже используется наиболее широко используемый код фильтрации — универсальная программа защиты от внедрения SQL — для объяснения причин, методов использования и превентивных мер уязвимости.
Универсальная программа защиты от внедрения SQL написана Фэн Чжицю из Firefox. Это довольно полный код защиты от внедрения. Он может реализовать фильтрацию получения данных для определенных символов фильтра и может записывать информацию о данных, отправленную с IP-адреса злоумышленника. При его использовании вам нужно только добавить код <--#Include File="WrSky_Sql.Asp"--> в заголовок файла, чтобы предотвратить внедрение и добиться фильтрации переменных. Если добавить программный код после файла подключения к базе данных (например, conn.asp), можно добиться переменной фильтрации всего сайта, тем самым добившись эффекта антиинъекции.
Хорошо, давайте сначала посмотрим на код части фильтрации переменных:
'--------Часть определения------------------
Тусклый Fy_Post, Fy_Get, Fy_In, Fy_Inf, Fy_Xh, Fy_db, Fy_dbstr
'Настройте строки, которые необходимо отфильтровать, разделив их "кленом"
Fy_In = "' Maple; Maple и Maple Exec Maple Insert Maple Select Maple Удаление Maple Update Maple Count Maple * Maple% Maple Chr Maple Mid Maple Master Maple Truncate Maple char Maple объявляет"
'----------------------------------
%>
<
Fy_Inf = Split(Fy_In,"Клен")
'--------POST-часть------------------
Если Запрос.Форма<>Тогда
Для каждого Fy_Post в Request.Form
от Fy_Xh=0 до Ubound(Fy_Inf)
Если Instr(LCase(Request.Form(Fy_Post)),Fy_Inf(Fy_Xh))<>Then
'--------GET часть------------------
Если Request.QueryString<>Тогда
Для каждого Fy_Get в Request.QueryString
от Fy_Xh=0 до Ubound(Fy_Inf)
Если Instr(LCase(Request.QueryString(Fy_Get)),Fy_Inf(Fy_Xh))<>Тогда
этот код определяет фильтрацию часто вводимых переменных, таких как "'", "and" и т. д. Если вы чувствуете, что фильтрация не достаточно или слишком много, вы можете сделать это самостоятельно. Добавьте или уберите символы. Очевидно, что пока данные, отправленные на сервер через get или post, содержат отфильтрованные символы, они будут запрещены программой. Это приводит к проблеме. Если вы добавите программный код после файла подключения к базе данных форума, то, если в содержимом поста будут отфильтрованные символы, он будет забанен. Судя по настройкам фильтрации контента по умолчанию, кажется, что опубликовать контент на английском языке практически невозможно. Кроме того, при определении стиля форума иногда используются некоторые специальные символы (например, знак процента «%»). Если эти специальные символы отфильтрованы, весь форум не будет работать должным образом. Что касается вышеупомянутой проблемы, я использовал dvbbs для ее проверки, и результат оказался именно таким, как я ожидал.
Способ решения вышеуказанной проблемы — предотвратить внедрение операторов подключения только в те файлы, которые необходимо фильтровать. Но эта нагрузка относительно велика, и веб-мастера обычно не знают, какие файлы нужно фильтровать. Поэтому я предлагаю добавить код фильтрации в conn.asp, затем создать connl.asp, не содержащий кода фильтрации, и подключить файлы, которые точно не нуждаются в фильтрации и код фильтрации влияет на работу этот файл в conn1.asp, но необходимо учитывать, что основное содержимое двух файлов подключения к данным должно быть согласованным. Кроме того, лучше всего не использовать фильтрованные символы в настройках стиля. Если вам действительно нужно их использовать, вы можете удалить фильтрацию этих символов в программе антиинъекций.
Выше речь идет о влиянии антиинъекционной программы на работу сайта, и никакого вреда она причинить не может. На самом деле, настоящий вред исходит от части записи данных. Давайте посмотрим на эту часть кода:
''--------Запись в базу данных-------Заголовок----. ----
Fy_dbstr="DBQ="+server.mappath("SqlIn.mdb")+";DefaultDir=;DRIVER={Драйвер Microsoft Access (*.mdb)};"
Установите Fy_db=Server.CreateObject("ADODB.CONNECTION")
Fy_db.open Fy_dbstr
Fy_db.Execute("вставить в SqlIn(Sqlin_IP,SqlIn_Web,SqlIn_FS,SqlIn_CS,SqlIn_SJ) значения('"&Request.ServerVariables("REMOTE_ADDR")&"','"&Request.ServerVariables("URL")&"',' GET','"&Fy_Get&"','"&replace(Request.QueryString(Fy_Get),"'","''")&"')"))
Fy_db.close
Установить Fy_db = Ничего
'--------Запись в базу данных-------Tail--------
Response.Write "<Script Language=JavaScript>alert('Fengwang SQL универсальная система защиты от внедрения ↓ nnПожалуйста, не пытайтесь вводить недопустимые символы в параметры nnHTTP://WwW.WrSkY.CoM Версия системы: V2.0 (ASP) идеальная версия');<Script>
Ответ.Напишите «Незаконная операция! Система сделала следующие записи↓<br>»
Response.Write "IP-адрес операции:"&Request.ServerVariables("REMOTE_ADDR")&"<br>"
Ответ. Напишите «Время работы:»&Сейчас&»<br>
ответ.Напишите "Операционная страница:"&Request.ServerVariables("URL")&"<br>"
Ответ. Напишите «Метод отправки: GET<br>».
Response.Write "Отправить параметры:"&Fy_Get&"<br>"
Response.Write «Отправить данные:»&Request.QueryString(Fy_Get)
Ответ.Конец
Конец, если
Следующий
Следующий
Конец, если
'----------------------------------
Функция этого кода заключается в записи информации и действий злоумышленника. что мы можем принять необходимые контрмеры. Из кода видно, что программа записывает IP злоумышленника, адрес отправки, содержимое отправки и т.д., но здесь явно есть несколько лазеек:
1. Частые атаки не обрабатываются. Другими словами, как бы мы ни подавали легальные данные, они будут записаны программой, что, скорее всего, приведет к вредоносным DOS-атакам. Я провел эксперимент по этому поводу. Я отправляю следующий оператор после URL-адреса защищенного файла: и (выберите top l asc(mid (username,l,l)) из admin)>0, используйте мастер ключей для записи процесса отправки, а затем автоматически повторяйте подчинение . Через некоторое время размер базы данных существенно изменился (как показано на рисунках 1 и 2). Как вы можете себе представить, если вы используете такие инструменты, как Shuoxue, для включения многопоточной отправки, DOS определенно не будет проблемой.
Рисунок 1
Рисунок 2
2. Длина данных записи не усекается. Это то, что я обнаружил во время тестирования программ по борьбе с инъекциями, влияющих на работу форума. Как показано на рисунке 3, если содержимое сообщения содержит отфильтрованные символы, содержимое сообщения будет полностью записано в базе данных. Общие форумы или системы статей имеют ограничения на длину публикуемых статей, но универсальная программа защиты от внедрения SQL не накладывает на это никаких ограничений. Если злоумышленник отправит слишком длинный контент после URL-адреса защищенного файла, это может привести к сбою программы. Поскольку вред относительно высок, я не проверял, но отправленный мною контент до 100К записывался как обычно.
Рисунок 3-3
. Проблема преобразования содержимого данных и взрыва базы данных. Судя по коду, программа записывает незаконно отправленные данные прямо в базу данных без конвертации. Другими словами, независимо от того, что вы отправляете, если оно содержит отфильтрованный контент, программа будет записывать весь отправленный вами контент. Изначально эта проблема не является серьезной, но в целях «безопасности» некоторые веб-мастера любят менять все файлы mdb на суффикс asp. Кроме того, в базе данных антиинъекционной программы имеется только одна таблица, поэтому мы можем получить веб-шелл, напрямую записав URL-адрес защищенного файла в базу данных. В процессе тестирования мы изменили sqlin.mdb на sqlin.asp, а затем добавлено. После ввода URL-адреса защищенного файла был введен бэкдор Binglangzi micro ASP. После соединения с клиентом Ice Fox wedshll был успешно получен.
Поскольку этот метод получения веб-шелла требует убедиться, что база данных другой стороны работает в формате ASP и ей известен путь к данным, мы должны найти способ получить путь к этой базе данных. В обычных обстоятельствах мы можем напрямую угадать путь к базе данных, но на самом деле этот путь может быть раскрыт. Глядя на всю программу защиты от внедрения, мы не нашли никаких взрывозащищенных операторов библиотеки, поэтому нам нужно только напрямую получить доступ или использовать. метод %5C. База данных открыта. Если программный код размещен непосредственно после файла подключения к базе данных, поскольку файл подключения к данным обычно содержит взрывозащищенные инструкции, мы не можем раскрыть адрес базы данных.
Все вышеперечисленное — это проблемы в процессе записи данных. Компетентные веб-мастера могут самостоятельно устранить соответствующие лазейки, например, автоматическую блокировку IP-адресов при повторной отправке больших объемов данных. Фактически, мы можем полностью удалить часть кода, занимающуюся записью данных, что не повлияет на фильтрацию переменных, и даже если информация злоумышленника будет записана, это будет не очень полезно. Поэтому я предлагаю лучше всего удалить этот код, чтобы всех уязвимостей больше не было.
Хорошо, на этом статья закончилась. Напоследок хотелось бы напомнить, что при использовании программ защиты следует также обращать внимание на вопросы безопасности самой программы.
Специальное напоминание: в программе Антиинъекции 3.0 также есть лазейки, и. лазейки более серьезные.