Ta witryna korzysta z plików cookies. Korzystając z witryny akceptujesz: polityka prywatności.   [×]
Online: 0x0C (12)
haker.iиfø — Etyczny hacking
Spreading knowledge like a virus. _

Web Parameter Tampering (też Overposting)

🕰 ✒️ Dawid Farbaniec 📄 680 słów

0x01. Słowem wstępu

Nazwą zawartą w tytule (Web Parameter Tampering) określa się zbiór podatności w aplikacjach internetowych, które polegają na manipulowaniu parametrami używanych podczas przesyłania żądań GET czy POST. Określenie Web Parameter Tampering w wolnym tłumaczeniu z języka angielskiego oznacza manipulowanie czy też fałszowanie parametrów w aplikacji webowej. Nieoczekiwane modyfikacje danych przesyłanych jako parametry żądania mogą prowadzić do błędnego działania witryny. Przykładowym scenariuszem może być zmiana wartości zamówienia w sklepie internetowym czy też np. modyfikacja wypowiedzi innych użytkowników na forum internetowym. Miłej lektury!

0x02. Ukryte pola formularza (<input type="hidden"...)

Przykładowy scenariusz z wideo 2.1. Deweloperzy aplikacji internetowych korzystają z ukrytych pól formularza (<input type="hidden" ... />) do przesyłania danych, których nie widzi (dopóki nie podejrzy źródeł HTML) użytkownik witryny. W przykładzie (wideo 2.1) na podstronie edycji wiadomości w ukrytym polu znajduje się jej identyfikator. Dzięki temu przy wysyłaniu formularza witryna może określić który post na forum jest modyfikowany i odnaleźć go w bazie danych. Nie ma potrzeby wyświetlania identyfikatora użytkownikowi, gdyż jest on wewnętrzną wartością liczbową nadawaną (często) automatycznie. Identyfikator znajduje się również w adresie URL podstrony edycji:
https://localhost:44330/Forum/Edit/1
Akurat w tym scenariuszu przejście do edycji nie swojej wiadomości poprzez zmianę parametru Id w adresie URL zostało pomyślnie zablokowane.

Błąd został popełniony poprzez brak sprawdzenia po stronie serwera, czy użytkownik na pewno próbuje modyfikować własną wypowiedź czy może inną. Deweloper uznał, że pola typu hidden nie mogą być zmieniane co jest nieprawdą.

Forum internetowe z wideo 2.1 to tylko jeden z wielu scenariuszy. Można spotkać aplikacje internetowe, które w polach typu hidden przesyłają np. wartość zamówienia, którą bez problemu da się zaniżyć i narazić sklep internetowy na straty finansowe.

Wideo 2.1. Manipulowanie ukrytym polem formularza (<input type="hidden"...)

0x03. Inne dane, którymi można manipulować

Nieautoryzowanym modyfikacjom mogą podlegać również m.in.:

  • Pliki cookie — niewielkie pliki zostawiane w pamięci przeglądarki,
  • Nagłówki HTTP — mogą być zmienione poprzez zastosowanie własnego klienta zamiast zwykłej przeglądarki,
  • Parametry adresu URL — mogą być edytowane bezpośrednio w pasku adresu przeglądarki internetowej,
  • Pola formularza — wszelkie kontrolki HTML mogą być modyfikowane nawet jeśli się je ukryje czy ustawi na disabled.

0x04. Podatność Overposting w ASP.NET MVC

Z tego typu nieoczekiwanym dla niektórych programistów działaniem można spotkać się w ASP.NET MVC, gdzie występuje powiązanie z modelem danych (ang. model binding). Mimo, że deweloper pominie powiązanie danego pola w modelu z widokiem np. utworzenia czy edycji, to możliwe jest ustawienie wartości temu polu np. poprzez modyfikacje formularza.

Jako przykład posłuży prosty model, który opisuje profil użytkownika w aplikacji ASP.NET MVC:

public class UserProfile { public int Id { get; set; } public string Name { get; set; } public string Website { get; set; } public bool IsAdmin { get; set; } }

Do tego modelu nieświadomy programista tworzy widok i akcję kontrolera, które dają użytkownikowi możliwość edycji profilu. Dodatkowo dla bezpieczeństwa usunął z formularza pole IsAdmin, które nadaje prawa administratora.

Nie chroni to jednak przed atakiem typu Overposting.

Jeśli w sygnaturę metody wpisany jest po prostu model (UserProfile model) tak jak poniżej:

[HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit(UserProfile model) { //(...) }

a ciało metody (pomiędzy klarmami { i }) nie posiada dodatkowych zabezpieczeń poprzez odpowiedni kod, to aplikacja ASP.NET MVC przyjmie i powiąże wszystkie pola modelu (włącznie z polem IsAdmin). Co może spowodować, że złośliwy użytkownik edytuje kod HTML formularza dodając pole IsAdmin i nada sobie prawa administratora w aplikacji.

Polecaną praktyką jest stosowanie atrybutu Bind np. w ten sposób:

[HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit([Bind(Include = "Id,Name,Website")] UserProfile userProfile) { //(...) }

Powyższy zapis [Bind(Include = "...")] kontroluje, które pola modelu mają być powiązane. Jak widać nie ma tam pola IsAdmin.

Na koniec dodam, że atak typu Overposting polegający na przesyłaniu dodatkowych danych jest tak znany, że samo środowisko Visual Studio, gdy generuje (ang. scaffolding) akcje i widoki to umieszcza w kontrolerach następujący komentarz:

// POST: UserProfile/Edit // Aby zapewnić ochronę przed atakami polegającymi na przesyłaniu dodatkowych danych, // włącz określone właściwości, z którymi chcesz utworzyć powiązania. // Aby uzyskać więcej szczegółów, zobacz https://go.microsoft.com/fwlink/?LinkId=317598. [HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit([Bind(Include = "Id,Name,Website")] UserProfile userProfile) { //(...) }

0x05. Zakończenie

Dziękuję za czas poświęcony na przeczytanie tego wpisu.

Wykaz literatury (bibliografia)

[1] Rafay Baloch, 2015 – Ethical Hacking and Penetration Testing Guide, ISBN: 9781482231625
[2] Dafydd Stuttard, Marcus Pinto, 2008 – The Web Application Hacker’s Handbook: Discovering and Exploiting Security Flaws, ISBN: 9780470170779


Komentarze czytelników

💬 Czytelnik | 🕰️ 09 września 2019 godz. 22:02:20 | 🌎 IP address logged
Brakuje mi przykładu błędu, który kiedyś był bardzo popularny. Wręcz żelazny przykład na parameter tampering. https://jakiś-sklep/order.php?id=287 I kilkoma linijkami kodu mamy dane wszystkich klientów i zamówienia lecąc po numerach w pętli.

📖 Trzymaj e-booka! 👋🏻

\\ więcej książek i e-booków »

💬 Komentarze [0]

jas napisał komentarz do ↴
🔳 Dekodowanie kodu Aztec 2D z dowodu rejestracyjnego
[🕰 / 🌎 IP address logged ]
jas napisał komentarz do ↴
🔳 Mowa szesnastkowa (ang. hex speech)
[🕰 / 🌎 IP address logged ]
Iceman napisał komentarz do ↴
🔳 Mowa szesnastkowa (ang. hex speech)
[🕰 / 🌎 IP address logged ]

🎲 Losowe wpisy

Podatność CSRF/XSRF w aplikacjach webowych (450 słów) Przeczytaj teraz »
Hacking i wartości moralne – przemyślenia (780 słów) Przeczytaj teraz »
Nanomity — metoda utrudniająca zrzuty pamięci (1190 słów) Przeczytaj teraz »

Maskotka haker.info

Postać Mr. At nawiązuje do gier z gatunku roguelike/ASCII RPG w których do wyświetlania grafiki korzysta się ze znaków tekstowych. Znak @ (at) w grach roguelike przeważnie oznacza postać bohatera.

Kontakt

mgr inż. Dawid Farbaniec  //  haker.iиfø

E-mail:
office@haker.info

Odwiedź mnie również na:

 

Wyrazy uznania: 📜 Credits page

Wszystkie treści umieszczone na tej witrynie są chronione prawem autorskim. Surowo zabronione jest kopiowanie i rozpowszechnianie zawartości tej witryny bez zgody autora. Wszelkie opublikowane tutaj treści (w tym kody źródłowe i inne) służą wyłącznie celom informacyjnym oraz edukacyjnym. Właściciele tej witryny nie ponoszą odpowiedzialności za ewentualne niezgodne z prawem wykorzystanie zasobów dostępnych w witrynie. Użytkownik tej witryny oświadcza, że z zamieszczonych tutaj danych korzysta na własną odpowiedzialność. Wszelkie znaki towarowe i nazwy zastrzeżone zostały użyte jedynie w celach informacyjnych i należą wyłącznie do ich prawnych właścicieli. Autor tej witryny w czasie tworzenia treści nie działa w imieniu firm, których technologie czy produkty opisuje — chyba, że jest to jasno oznaczone. Korzystając z zasobów witryny haker.info oświadczasz, że akceptujesz powyższe warunki oraz politykę prywatności.