Я пишу программу автоматической проверки php скриптов на уязвимости.
Все скрипты я разделил на те, которые входящие переменные принимают методом GET и те, которые методом POST.
Базы данных со скриптами имеет следующий вид:
type
Variabl = record
VType:string;
VName:string;
end;
TVar=array of Variabl;
link = record
ScriptLink:string;
Method:string;
Variables:TVar;
end;
LinkList= array of link;
С GET-ом все более или менее просто и понятно: login.php?login=vasiliy&pass=qwerty&autologin=true
Правда пока еще не было времени проверить, правильно ли я выделяю переменные, передаваемые в скрипт...Если переменные ГЕТ запросом передаются в РНР скрипты по другому, пожалуйста напишите как еще это делают РНР программисты
Такие скрипты я буду проверять по следующей схеме:
/index.php?go='
/index.php?go=;id;
/index.php?go=../...../../etc/passwd
/index.php?go=../...../etc/passwd%00
/index.php?go=xxxxx...xxxxxxxxxxxxxx
/index.php?go=http:...cmd.php?cmd=id
/index.php?go=\"><script>alert('!Z-Team');</script>
Т.Е. передавать в каждую переменную кавычку, пытаться прочитать /etc/passwd и т.д. а после смотреть ответ скрипта на такие запросы, если возвращает ERROR или WARNING, то есть подозрение на уязвимость
Полностью составить грамотно POST запрос у меня вызывает трудности.
Вот конкретный пример:
<form method="post" action="login.php?sid=81f0ea24f354fa6372158507b9ced3f6">
<input class="post" type="text" name="username" size="10" />
<input class="post" type="password" name="password" size="10" maxlength="32" />
<input class="text" type="checkbox" name="autologin" />
<input type="submit" class="mainoption" name="login" value="Вход" />
</form>
В базе скриптов данная форма будет выглядеть следующим образом:
ScriptLink:=login.php?sid=81f0ea24f354fa6372158507b9ced3f6
Method:=POST;
Variables:=[(text,username),(password,password),(checkbox,autologin),(submit,log in)]
Если бы тупо во все переменные писать кавычки... А то ведь теперь еще потребовался анализ слабых паролей, т.е. в случае если программа нашла скрипт, как в этом примере, то необходимо запускать брут на самые распространенные имена пользователей и пароли.
Вот и вернулся к тому, с чего начал: для работы со скриптами, получения списка скриптов, посылки запросов я использую idHTTP.
Как в моем случае составлять POST запросы, ведь я работаю не с какой-то конкретной формой, а с множеством самых различных форм, которые нужно проверить.