Z notatnika pentestera #1: logika biznesowa

Cykl "Z notatnika pentestera" będzie serią krótkich wpisów wskazujących rzeczy, na które natknąłem się podczas pentestów, a które uważam za warte przypomnienia Być może moje uwagi przydadzą się komuś podczas prowadzenia własnego pentestu.

Waluty

Jeśli system, który testujemy operuje na walutach, to warto sprawdzić, czy możliwe jest wykonanie następującej rzeczy:

  • Wykonanie transakcji na kwotę ujemną, np. transfer -100 PLN
  • Wykonanie transakcji na kwotę większą, niż zadeklarowany typ przechowujący wartość, np. 10E50 PLN
  • Wykonanie transakcji na kwotę ułamkową o większym poziomie precyzji, niż wyraża się waluta - np. przelew kwoty 0.005 PLN
  • Wykonanie transakcji blisko limitu transakcji z uwzględnieniem poziomu precyzji - np. limit wynosi 100 PLN, transakcję wykonujemy na kwotę 100.009 PLN
  • Wykonanie szeregu transakcji na kwoty mniejsze od limitu, ale w efekcie dające kwotę ponad limit - np. przy limicie 100 PLN 10 operacji na kwotę 11 PLN

Można się zdziwić, o jakich rzeczach developerzy czasami zapominają, kiedy mają do czynienia z operacjami na walutach.

Sekwencje zdarzeń

Czasami jakaś aplikacja wymusza na nas przejście przez kilka "bramek logicznych" (np. dodanie produktów do koszyka, płatność, podanie adresu dostawy) celem pomyślnego zakończenia jakiegoś procesu. Ponieważ często mamy pełny wpływ na to, jakie dane otrzyma aplikacja i do której bramki logicznej się odwołamy możemy:

  • Spróbować ominąć pewne etapy procesu, np. proces płatności i przejść od razu do dostawy
  • Spróbować zaburzyć kolejność procesu powielając pewne etapy, np: dodanie produktu do koszyka, płatność, dodanie elementu do koszyka, podanie adresu dostawy)
  • Spróbować wykonać po raz kolejny etapy zakończonego już procesu, np. zmienić dane adresowe już zaakceptowanego przez system użytkownika

To w żadnym razie nie wyczerpuje tematu, ale każdy specyficzny sektor ma swoje błędy logiczne. Postaram się kiedyś o tym napisać nieco więcej. Liczę też na ciekawe przykłady w komentarzach.