Cikk hackelés php!

Üdvözlet!
Bármit mondok a PHP pluszairól, legalább egy komoly hibája van: a php szkriptek hackelésének témája valahogy rosszul világít a futóműben. Minden csak annyit, hogy ez egy nagyon lyukas dolog, ami hülye érvek, mint a „ha nem ellenőrzött változók, a web szerver root, de változata tele lyukakkal.” Eközben a php telt egy csomó helyek, és sok nem használják eredeti szkriptek és szabványos olyan megoldások, amelyek gyakran csúszik át a sérülékenységen. Róluk, akkor valójában megvitatják.

Ez egyike a legelterjedtebb webhelymodelleknek, amelyeknek sok lehetősége van: a cikkek és a hírek kiküldésével, az olvasók (pl. A xakep.ru) beszélgetés lehetőségével, mielőtt a bannerek megjelenítését automatizálná. A termék erejét a segédeszköz térfogatával lehet megítélni: a motor legfrissebb változataival ellátott archívum mérlegel. Súlya. 1.21mb! De vannak szkriptek, szöveges fájlok.

Azonban, ahol sok kód van, sok hiba létezik. A php-nuke megjelenése óta olyan sok lyuk található, hogy minden obzaviduetsya színesanyag; És a sebezhetőségek mindegyike - a kiválasztáshoz hasonlóan itt: te és DoS, parancsok végrehajtása, sql-kérések végrehajtása, rendszergazdai jogok és bármely php-kód végrehajtása.

A motor létezésének két évében óriási számú változat létezett, a projekt, hitelnyújtás szükséges, tökéletesen támogatott, és talán Francisco nagyszerűen ír a PHP-ben. Nem, ez igaz, a KUCHU lyukak ellenére, kaklbasit SUCH projekt 380 óra - ez jó;).

Az egész dolog kiderült, hogy a beállítások a php - funkció „URL fopen wrapper” Azt ki volt kapcsolva (amikor konfigurált php, a tehetetlenség vágja le az összes felesleges opciók én). A legtöbb szerveren a szolgáltatás be van kapcsolva, így valószínűleg nem lesz probléma. De még az én esetemben is könnyedén kóboroltam a lemezt - $ file = c: winntwin.ini. Természetesen, ha a gép a * nix alatt van, akkor ez nem fog működni - "/" a $ file sor elején van vágva. Most a pusztító szkriptről, arról, hogy mit írj le ott. Filozófiai kérdés, de még mindig pár fejleményt adok:

Egyszerű és ízléses, bár tovább lehet menni:

$ a = rendszer ($ parancs);
echo "$ a";
?>

Ez a kód, ahogyan megérted, végrehajt egy parancsot a $ parancsváltozó parancsból a kiszolgálón.
Például:

A PHP-ben két operátor van - igényelnek és tartalmaznak, amelyek a kódot a megadott fájlból olvassák le és futtatják. Ennek köszönhetően újra felhasználható funkciókat és állandókat hozhat létre külön fájlban, és más helyzetekben hívhatja őket. (Gyakran a kényelem a forgatókönyvet konfiguráció minden beállításával tárolása egy kis script, ahol könnyen szerkeszteni egy személy, aki nem ismeri a nyelvet, félelem nélkül károsítja a mögöttes kód. Vagy például, hogy nagyon kényelmes, hogy darabjai is html'ya ne írjon sokszor ugyanaz elemek.)

A funkciók, amint látja, hasznosak a kódolókhoz és a hackerekhez;). Mi a különbség a (); és megkövetelik (); Láthatatlan, de alapvető: require (); Egyértelműen lecserélik az értelmezés során a kódot a megadott fájlból, és include (); kiszámítja és végrehajtja a kódot egy külső fájlban, amikor egy include utasítás kimutatódik. Ez lehetővé teszi, hogy a függvény hurokba kerüljön, ami lehetetlenné tehető. És még több. Végrehajtáskor ezek a funkciók visszaadják az értékeket - ha volt probléma, hamis, ha minden rendben van, akkor igaz. A különbség az, hogy ha elkezdi a keresletet, akkor a parancsfájl leáll, ha a függvényt használják, a végrehajtás folytatódik. Így általában megköveteli, hogy egyenértékű a kóddal:

Általánosságban elmondható, hogy a rendszerfunkció végrehajt minden parancsot a kiszolgálón, végrehajtva a végrehajtás eredményét. Véletlenül sok hiba alapul. Például a következő kódot gyakran használják levélküldésre:

Mind;). Most, hogy a paprika patch a hibás motort, akkor egy backdoor, amelyen keresztül meg lehet még egyszer lomanut hely;) Mindazonáltal egy rövid ideig fog működni - ha a paprika nem idióta, majd, miután a második megrongálni, úgy néz ki, naplók webszerver és azonnal akkor összeolvad; ((((De mindig van esély arra, hogy vagy nincs hozzáférése a naplókhoz (írjon adminoknak, küldjön rönköket;), vagy nincs agya.

Leírva: A motor korábbi verzióiban statikus táblázatok (például üzenetek, szerzők) kerültek felhasználásra. Nyilvánvaló, hogy az adatbázisban való jelenlétük nagyon valószínű, és az összetévesztés elkerülése érdekében a nevek most egy előtagot adnak a konfigurációs parancsfájl config.php által definiált $ előtagból. Ebben az esetben az SQL lekérdezés az adatbázisra nézve így néz ki:

mysql_query ("UPDATE $ prefix" ._ történetek. "SET
counter = counter + 1 ahol sid = $ sid ")

Amint láthatja, van egy hívás a mainfile.php-ra, amely viszont felhívja a konfigurációs fájlt. Nem kell ezt, szükségünk van egy $ előtagra, hogy szabad legyen, és oda tudjuk tenni a saját kérésünket. Ez úgy történik, egyszerűen - definiált változók $ mainfile, $ tid, $ sid, és tedd $ prefix kérés (függvény isset (); használjuk, hogy meghatározzuk a fontos tényt - meghatározzuk, hogy minden változó, azaz például hogy a felhasználó kitöltötte a a mező). Mit kell elhelyezni a $ előtagban? Nos, például itt van: a szerzők pwd = 'coolpass'; update nuke.
Így a végrehajtott lekérdezés a következő lesz:

Az UPDATE szerzők pwd = "coolpass" -ot állítottak be; update nuke_stories SET counter = számláló + 1, ahol sid = $ sid "), amely megváltoztatja az összes rendszergazda jelszavát" coolpass "-ra.

(By the way, jelenleg készítek egy anyagot a két gyakran használt technológiáról a szkriptek hackeléséért: a CSS és az SQL injektálás, amelyben elmondom, hogyan kell elvégeznie a fentieket.);)

Leírásalovo: Hmm. a lyuk olyan régi, mint a világ, de a programozó valamilyen okból nem gondolt. Nos, kapd meg;).

Olvassuk a felhasználó számára elérhető összes fájlt. Például elolvashatja a konfigurációs parancsfájlt, és onnan el tudja tölteni a jelszót az adatbázisba, amely egybeeshet az FTP kiszolgálón lévő jelszóval a webhelyen, és így tovább. Képzelje el, hogy az $ l ellenőrzése ".." egyáltalán nem. Nagyon idegesített - nem tudod írni, ne írj. Nem, felmászik, és még megjelenik alkotásaik nyilvános megjelenítésén - nem világos, miért?

Admin;)
Sérült változatok: 0.4.02 (legfrissebb)
Diagnózis: Adminisztrációs jogok beszerzése
Xploit: cookie access = ok

Leírásalovo: Őszintén szólva, amikor elolvastam ezt a hibát, körülbelül öt percig rozsdásodtam, miután ismét felsóhajtottam. Ez mennyit és mit kell inni, hogy azonosítsam a "hozzáférési" cookie rendszergazdáját az "ok" értékével? Nem, ha ez egy privát, eredeti forgatókönyv - bárhova is ment, mert csak a hibáról tudsz megnézni a kódját, nem fogsz kideríteni kívülről. De miután az összes projekt szótagot feltöltötték a helyszínen, így ez a megdöbbentés öt perces ügy. Nézd meg magad:

Xoops - egy másik lyukas motor, elég, úgy tűnt számomra, funkcionális, nagyon közönséges;). Nem találtam lyukat ebben - először a termék elég fiatal, másrészt a programozók a biztonságra gondoltak, amikor írtak, bár nyilvánvalóan nem sokáig.

Opisalovo: In userinfo.php szkript nem ellenőrzi a különleges karaktereket a változó $ az uid, amelyet az SQL-lekérdezést, amely lehetővé teszi, hogy játsszon bő sql-lekérdezések, módosítására vagy törlésére adatok).

Szórakoztató? Menjünk!
Ha $ uid "7545 $" -t helyez el, akkor a PHP hibát jelez:
-levágják
.
MySQL lekérdezési hiba: SELECT u. *, S. * FROM x_users u, x_users_status s WHERE
u.uid = 7545 $ ÉS u.uid = s.uid
Hiba száma: 1064
Hibaüzenet: Hiba történt az SQL szintaxis közelében '; ÉS u.uid = s.uid "az 1. sorban
.
-levágják

Ez sokat segít: láthatja, hogyan működik az sql-lekérdezés, ami lehetővé teszi, hogy felakasztja magát;)! Nos, például. Itt és így:

$ uid = 2; frissítés x_users password = 'coolpass'; válassza ki a * x_from felhasználókat, ahol uid = '1'

Most az elküldött SQL lekérdezés így néz ki:

SELECT u. *, S. * FROM x_users u, x_users_status s WHERE

u.uid = 2; frissítés x_users password = 'coolpass'; válassza ki a * x_from felhasználókat, ahol uid = '1'

Nyilvánvaló, hogy a "frissítés x_users" helyett a "sql-request" lehet tetszőleges SQL végrehajtás, amely az aktuális sql-felhasználó.

Ez a bekezdés azoknak szól, akik nem tudják, hogyan keressenek sebezhető webhelyeket. Ha nem vagy közülük - kihagyja ezeket a sorokat, akkor sem veszít semmit. Hát akkor. Kezdjük az alapokkal. Mi a szkript? A szerveroldali program futtatása mellett ez csak egy fájl. És mint minden olyan fájl, amely a webhelyen működik, a más oldalakon található hiperhivatkozások vezetnek hozzá.

Ui
Három fontos webhelymotorról beszéltem. Megmutattam nekik a példájukban a php leginkább jellemző sebezhetőségét - vegye figyelembe a hibából eredő szivárgó php szkriptet, valószínűleg pontosan ugyanazok a lyukak lesznek. Remélem, nem veszi a cikket a szkriptek útmutatójaként, de megértette, hogy a PHP hackelése nem kevésbé érdekes, mint a perl;).

P.P.S. Minden hibát teszteltek a helyi Apache webszerveren a winNT alatt a mellékelt PHP harmadik verzióval.
Sok szerencsét;)

Kapcsolódó cikkek