Wstrzyknięcia - wartości testowe
Napisy pokazujące, czy pole traktuje wejście jak dane, a nie kod: cudzysłowy, znaczniki, szablony, ścieżki. 11 wartości, każda z tym, co psuje, i z tym, co zamiast tego robi poprawna aplikacja.
Wpisuj je po jednej skrótem AltShiftN
w palecie albo weź wszystkie do skryptu poleceniem nkb emit injections.
Paleta oznacza te wartości jako offensive. To klasyczne sprawdziany escapowania, żadna z nich nie jest exploitem znanej podatności, a nic nie jest wpisywane, dopóki nie naciśniesz skrótu. Używaj ich tylko na systemach, które wolno Ci testować.
Pojedynczy cudzysłów
injections/single-quote
'
'
- 1 grafem
- 1 punkt kodowy
- 1 bajt
- 1 jednostka UTF-16
- Co psuje
- Najskuteczniejszy test z jednego znaku: pole, które bez ucieczki wstawia go do zapytania SQL, kończy napis za wcześnie, a strona pokazuje błąd bazy danych.
- Co robi poprawna aplikacja
- Zapisany i zwrócony jako jeden znak oraz pokazany jako jeden znak.
Znaczniki pogrubienia
injections/angle-brackets
<b>test</b>
<b>test</b>
- 11 grafemów
- 11 punktów kodowych
- 11 bajtów
- 11 jednostek UTF-16
- Co psuje
- Znaczniki w polu tekstowym są przy wyświetlaniu albo escapowane, albo renderowane, a pogrubiony tekst na stronie znaczy, że pole nie escapuje niczego.
- Co robi poprawna aplikacja
- Pokazane jako zwykły tekst, z widocznymi znacznikami.
Znacznik skryptu
injections/script-tag
<script>alert(1)</script>
<script>alert(1)</script>
- 25 grafemów
- 25 punktów kodowych
- 25 bajtów
- 25 jednostek UTF-16
- Co psuje
- Klasyczny test escapowania wyjścia: okno z napisem 1 albo tekst, który znika, znaczy, że wartość trafiła na stronę jako kod w miejscu, gdzie jest pokazywana.
- Co robi poprawna aplikacja
- Pokazany jako zwykły tekst wszędzie tam, gdzie wartość się pojawia, także na listach i w eksportach.
Obraz z obsługą błędu
injections/img-onerror
<imgsrc=xonerror=alert(1)>
<img src=x onerror=alert(1)>
- 28 grafemów
- 28 punktów kodowych
- 28 bajtów
- 28 jednostek UTF-16
- Co psuje
- Łapie filtr, który usuwa znaczniki skryptu po nazwie, a przepuszcza atrybut uruchamiający kod, więc wartość działa, gdy tylko zepsuty obraz się wczyta.
- Co robi poprawna aplikacja
- Pokazany jako zwykły tekst.
Wyrażenie szablonu w podwójnych nawiasach klamrowych
injections/template-braces
{{7*7}}
{{7*7}}
- 7 grafemów
- 7 punktów kodowych
- 7 bajtów
- 7 jednostek UTF-16
- Co psuje
- Silniki szablonów, takie jak Jinja, Twig i Angular, wyliczają podwójne nawiasy klamrowe, więc 49 na stronie znaczy, że dane od użytkownika trafiły do szablonu jako kod.
- Co robi poprawna aplikacja
- Pokazane dokładnie tak, jak wpisane, z widocznymi nawiasami.
Wyrażenie szablonu ze znakiem dolara
injections/template-dollar
${7*7}
${7*7}
- 6 grafemów
- 6 punktów kodowych
- 6 bajtów
- 6 jednostek UTF-16
- Co psuje
- Literały szablonowe JavaScriptu, języki wyrażeń Javy i Freemarker wyliczają znak dolara z nawiasami klamrowymi, więc 49 znaczy, że wartość trafiła do jednego z nich jako kod.
- Co robi poprawna aplikacja
- Pokazane dokładnie tak, jak wpisane.
Ścieżka wychodząca poza swój folder
injections/path-traversal
../../etc/passwd
../../etc/passwd
- 16 grafemów
- 16 punktów kodowych
- 16 bajtów
- 16 jednostek UTF-16
- Co psuje
- Nazwa pliku doklejona do folderu bez normalizacji ścieżki wychodzi z niego, więc aplikacja czyta albo zapisuje plik, do którego nigdy nie miała sięgać.
- Co robi poprawna aplikacja
- Odrzucona albo znormalizowana tak, żeby wynik został w zamierzonym folderze.
Ścieżka wychodząca z odwróconymi ukośnikami
injections/path-traversal-win
..\..\windows\win.ini
..\\..\\windows\\win.ini
- 21 grafemów
- 21 punktów kodowych
- 21 bajtów
- 21 jednostek UTF-16
- Co psuje
- Windows czyta odwrócony ukośnik jak separator, a walidator, który szuka tylko ../, przepuszcza to samo wyjście z folderu.
- Co robi poprawna aplikacja
- Odrzucona albo znormalizowana dokładnie tak jak postać ze zwykłymi ukośnikami.
Cudzysłów i komentarz SQL
injections/sql-comment
admin'--
admin'--
- 8 grafemów
- 8 punktów kodowych
- 8 bajtów
- 8 jednostek UTF-16
- Co psuje
- Cudzysłów kończący napis i komentarz ucinający resztę zapytania: klasyczny kształt zapytania logowania zepsutego przez niescapowane wejście.
- Co robi poprawna aplikacja
- Zapisany i pokazany jako napis o ośmiu znakach.
Specyfikatory formatu
injections/format-string
%s%n%x
%s%n%x
- 6 grafemów
- 6 punktów kodowych
- 6 bajtów
- 6 jednostek UTF-16
- Co psuje
- Użyty jako format printf w C, %x czyta stos, %n zapisuje w pamięci, a wywołanie formatowania w języku zarządzanym, które znajduje specyfikatory bez argumentów, zgłasza błąd.
- Co robi poprawna aplikacja
- Traktowany jako zwykły tekst, nigdy nie przekazany jako napis formatu.
Zewnętrzna encja XML
injections/xml-entity
<!DOCTYPEt[<!ENTITYeSYSTEM"file:///etc/passwd">]><t>&e;</t>
<!DOCTYPE t [<!ENTITY e SYSTEM "file:///etc/passwd">]><t>&e;</t>
- 64 grafemy
- 64 punkty kodowe
- 64 bajty
- 64 jednostki UTF-16
- Co psuje
- Parser XML, który rozwiązuje encje zewnętrzne, zastępuje odwołanie do encji plikiem wskazanym w deklaracji, więc zaimportowana treść każe serwerowi czytać jego własne pliki.
- Co robi poprawna aplikacja
- Encje zewnętrzne nierozwiązywane, a wartość potraktowana jako tekst albo odrzucona.