PDA

Просмотр полной версии : Алгоритм поиска sql-inj в исходниках php сценариев


n4n0bit
04.11.2006, 17:29
Вот собираюсь делать так, прошу попровлять и дополнять:

1. сбор всех имен переменных передоваемых GET/POST со всех php сценаривем
1.1 создание хеша имя_переменной/файл
2. сбор всех ф-ций которые фильтруют переменный используя addslashes magic_quotes_gpc str_replace
2.1 создание хеша имя_ф-ции/файл
3. сбор всех строк вида mysql_query($perm), где потом содержание $perm интерпалируем в значение хеша, а ключ хеша будет имя этой переменной.

Далее сравниваем, если строка запроса (п.3) к БД содержит переменную (п.1) , делаем проверку на наличия имени ф-ции (п.2),
если она не обнаружена - значит код потанцеально уязвим.

На сколька этот алгоритм эффективен - я хз.

помогайте господа.

r0
04.11.2006, 17:46
Нужно собирать переменные, значения которых используются в запросах к БД, хотя п1 почти этому удовлетворяет.
Вот насчет п2 -- ты на чем пишешь? Т.е magic_quotes_gpc - это директива, а не ф-я, значение(on\off) можно получить посредством get_magic_quotes_gpc() но это опять же в php.

EXSlim
04.11.2006, 18:15
А почему бы не собирать запросы к БД содержащие строки $_get[], $_post[], $_cookie[] ? Это будет означать, что скрипт наверняка уязвим

Digimortal
04.11.2006, 18:18
Вот насчет п2 -- ты на чем пишешь? Т.е magic_quotes_gpc - это директива, а не ф-я, значение(on\off) можно получить посредством get_magic_quotes_gpc() но это опять же в php.

Зачем получать значение magic_quotes_gpc ? И, главное откуда его получать? Заранее ведь не известно, будет ли анализируемый скрипт работать с значением magic_quotes_gpc = 1 или 0. Просто нужно чтоб в отчете прога (скрипт?) выводила, что существует вероятность SQL-inj в случае magic_quotes_gpc=0..
И еще: не надо забывать про cookies..

n4n0bit
04.11.2006, 18:20
r0cha! я делаю проверку по регеспу на ф-цию такога рода.
Но смори не все же переменные которые есть в теле запроса доступны через GET/POST,
поетому я проверяю сWEBдоступные переменные на наличая в БДзапросе.

function un($code){
if (get_magic_quotes_gpc()) {
$code = stripslashes($code);
}
return $code;
}

EXSlim хм, такога проста почти не встречал, ну если такое есть то этот момент тоже включу.

С кукисами чуть поже, хотяб это автоматизировать.

ps: что еще господа?

ps2: пишу на PERL, http://forum.antichat.ru/thread26051-nJin4.html

EXSlim
04.11.2006, 18:27
EXSlim хм, такога проста почти не встречал, ну если такое есть то этот момент тоже включу.
Ты прав, такая конструкция редко встречается, но ведь она зараза работает

n4n0bit
04.11.2006, 18:35
EXSlim гуд, уже включил., а регистр соблюдается? в $_get[], $_post[], $_cookie[] ???

Все согласны с этим алгоритмом?

r0
04.11.2006, 21:54
Зачем получать значение magic_quotes_gpc ? И, главное откуда его получать?
ну а я про что и говорю..
а регистр соблюдается?
да, и только $_GET[], $_POST[], $_COOKIE[]

guest3297
04.11.2006, 23:00
когда руками баги ищу то просто...
есть запрос к бд...
select Name,pass from users where '.$id.'

Вот те и иньекция...
тоесть есть в строке есть нефильтруймый передаваемый параметр то это бага...
как это реализовать в сканере я хз...

еще добавь include()

n4n0bit
04.11.2006, 23:12
include() ета отдельная песьгя - все всем спасибо.

blackybr
07.11.2006, 19:50
ну еще можно исключать переменные которые фильтруются прегматчем например... и проверять на наличие !isset'а

SQLHACK
05.12.2006, 23:08
Привет!
А как насчёт Register_Global ? :)

n4n0bit
06.12.2006, 00:58
по конкретнее..что ты имеешь тут ввиду