Pora napisać nieco więcej w komentarzu do Podatności stają się oczywiste, jak się je już znajdzie. Oczywistą podatnością, której do tej pory nikt nie znalazł, jest XSS. Znalezione zostały natomiast dwa inne problemy:
- możliwość obejścia walidacji kodu pocztowego,
- "dziwne" zachowanie aplikacji w przypadku przekazania tablicy,
Sposób obejścia walidacji kodu pocztowego jest prosta. Regexp, który służy do jego sprawdzenia wygląda tak: \d{2}-\d{3}, wystarczy więc dopisać jakiś fragment przed lub po prawidłowym (w sensie tego regexpa) kodzie pocztowym i "walidator" zostanie oszukany. Zresztą tu rozwiązanie podesłał radekk: http://codepad.org/ThxCjqyC?.
Jest to niewątpliwie błąd, nad jego przydatnością można się zastanawiać. Zależy to głównie od tego, co dalej będzie działo się z tak wprowadzonymi danymi. Może to nie mieć żadnego znaczenia (poza wprowadzeniem bzdurnych danych), ale trafiałem na przypadki, w których tego typu błędy prowadziły do naruszenia spójności bazy danych, cała aplikacja przestawała działać i konieczna była ręczna interwencja operatora, który z bazy takie nieprawidłowe dane usuwał.
Sposób obsługi tablic wartości parametru jest cechą specyficzną dla PHP, błąd tego typu występował ostatnio w WordPress (WordPress <= 2.8.3 Remote admin reset password). W przypadku tego przykładu skutki tego błędu są mniej spektakularne. Wyświetlane są komunikaty błędów, które mogą mówić coś o aplikacji (np. jakie wykorzystane są funkcje). Ujawniane jest też istnienie dodatkowego pliku PHP.
Czasami znalezienie czegoś (jakiejś podatności) osłabia czujność/uwagę, co może doprowadzić do przeoczenia innych błędów lub podatności. Niestety, w trakcie testów nie ma informacji ile błędów jest w jakiej formatce, dlatego o przeoczenie błędów wcale nie tak trudno. Niektóre z tych przeoczonych błędów, jak je się już znajdzie, wydają się takie oczywiste...
Jeśli chodzi o XSS, to na razie tylko dwa hinty:
Powodzenia!
W tym przykładzie szansa na znalezienie XSS-a jest odwrotnie proporcjonalna do stopnia skomplikowania stosowanych technik detekcji.
Ja już znalazłem swojego "wektora", a Ty?