
Turvallisuus: SQL-injektio-hyökkäys ja load_file()- toiminto
Tässä ohjeessa näytän, kuinka SQL-injektiohyökkäykset voivat toisinaan olla kriittisiä, vaikkei tietokannassa olisikaan arkaluontoista tietoa. Tämä ohje on tehty vain oppimistarkoitusta varten.
Tämä on mahdollista load_file()-toiminnon vuoksi, joka voidaan suorittaa suoraan url-osoitteen kautta, jos sivustossa on yksinkertaisia MySQL-aukkoja.
Mikä on load_file()?
Syntax: ”load_file(’blah/blah/blah.php’)”
Tämä on maailmanlaajuinen MySQL-toiminto, joka lukee ja tulostaa sisältöä paikallisesta tiedostosta. Tämä on vain esimerkki UNIX-systeemistä php-tiedoston kanssa, mutta jos hakkeri löytää tällaista haavoittuvaisuutta, hän voi tehdä monia asioita sivustollesi, kuten:
- lukea .htpassword-tiedostoja ilman toimeenpanoa
- ohittaa luokkahakemiston ja .htaccess-asetukset
- lukea arkaluonteisia tiedostoja kuten /etc/password
Ja monta, monta muuta. Kaikki sivustot eivät ole arkoja load_file ():lle, joten tämä on melko harvinaista.
Ensin hakkeri valitsee suurimman mahdollisen kolumnin (kuten kolumnin, joka sisältää paljon tekstiä) ja avaa arkaluonteisen url-osoitteen (tässä esimerkissä on seitsemän kolumnia):
?id=+union+select+1,2,3,4,5,6,7—
Seuraavaksi hän heksaa urlin niin, että siihen voi onnistuneesti suorittaa load_file()-toiminnon, missä ”2f6574632f706173737764” on heksattu polku tiedostoon (”/etc/password” tässä esimerkissä):
?id=1 union select load_file(0x2f6574632f706173737764)—
Sen jälkeen pitäisi tulostaa /etc/password-tiedosto, josta hän voi löytää kohdehakemiston. Anna sen olla ”/home/webmaster/www/somesite.com” -polun ilmitulo. Jos se ei näytä polkua mihinkään (edes MySQL virhe-viestiä samalla kun SQL injektoi, tai missään muualla) hän voi arvata sen itse. Esimerkiksi jos sivustosi on ”blah.net”, hän voi yrittää ”/home/webmaster/www/blah.net” tai ”/home/webmaster/public_html/blah.net” tai ”/home/webmaster/http/blah” ja niin edelleen.
Kolmanneksi, kun hakkeri on löytänyt polun, hän voi skannata sivuston Acunetix/other- ohjelmalla löytääkseen arkaluontoisten tiedostojen nimiä sivustolta. Esimerkiksi se voisi olla index.php tai arkaluonteiset hakemistot, kuten /includes (joka varastoi salaamattomia käyttäjänimiä ja salasanoja MySQL-käyttäjille). Kohdetiedosto MySQL-käyttäjänimelle ja salasanalle on yleensä config.php, config.inc.php tai config.new.php. Se riippuu siitä, millaista ohjelmaa sivusto käyttää. Jos se käyttää WordPressiä, Joomplaa tai Vbulletinia, phpbb, olisi liian helppoa löytää oikea polku ja nimi arkaluontoisiin ohjeistoihin ja/tai tiedostoihin.
Kun tiedosto on pudotettu load_file():a käyttäen, se tulostaa käyttäjänimet ja salasanat tavallisena tekstiohjeistona suoraan web-sivulle.
Kirjoittaja:
Igor Olhovski, web developer