Saudações a todos, como você está? Espero que você esteja bem, então ouça. Ouça o que sempre acontece comigo quando deixo a América e venho para a Ásia ou Europa, para todos esses outros países. Começo a falar, subo ao palco e começo a conversar com as pessoas, digo a elas ... como dizê-las politicamente ... as pessoas que não são americanas também são boas pessoas e tenho o prazer de vê-las e ouvi-las.

Escute, acho que você vai me entender corretamente, então relaxe um pouco, endireite os ombros, estou falando sério! OK, quando estou fazendo meu trabalho aqui, quero que você entre em contato comigo, por assim dizer. Eu tenho um ponto de acesso sem fio e alguns aplicativos vulneráveis em uma bagunça completa, e tenho uma idéia de como colocar seus programas em uma bagunça ... No ano passado, falei e fiquei bêbado no palco; depois, um crítico me procurou e disse: “ Ei Joe, você teve uma apresentação normal, mas a demonstração claramente não foi suficiente! ” Portanto, hoje toda a minha apresentação será uma demonstração sólida e me pergunto o que mais você pode não gostar.
Portanto, "a evolução do pentesting em condições de maior segurança". Estou quebrando a rede há 10 anos e, como eles eram uma merda, eles permaneceram os mesmos. Não sei se você tem alguma experiência com eles, mas a rede ainda é péssima. E os aplicativos ainda são ruins. O que está acontecendo agora? Agora temos 50 milhões de produtos de segurança protegendo seus aplicativos, e daí? - Que droga! - E você sai com eles na rede, o que? - Que droga! - E temos um monte de coisas que protegem tudo isso é uma porcaria!
Então, qual será o meu trabalho hoje? Quem sou eu A maioria das redes me conhece, sou negro nas conferências de segurança; sim, sou eu, o mesmo cara que costuma falar sobre: "Bem, esse aqui, como ele ... um africano de cor ... já o vi antes!"
Tudo bem pessoal, por algum tempo eu estava ocupado invadindo redes. Então, eu sou uma bolacha, sou uma maldição, e quem me conhece também sabe que eu gosto de beber rum e Coca-Cola. Mas algo mudou na minha vida, eu comecei uma nova namorada, e ela é louca porque eu bebo demais e ela realmente não gosta de como eu como, é por isso que eu preciso viajar, então tive que vir aqui, Eu tive que comer todo esse goulash gordo. Então, por favor, não diga a ela o que eu como e bebo.
Neste slide, você vê minha primeira apresentação na DefCon há 10 anos, veja, ainda havia monitores CRT, alguém se lembra deles?

Conversei com muitas pessoas lá e estávamos envolvidos em "captura de bandeira" com elas. “Capturar a bandeira” - foi apenas uma experiência incrível que mudou milagrosamente minha vida, assim como Jesus, eu estava pronto para exclamar “Aleluia!”, Foi tão incrível.
Então, o que eu quero fazer é criar o teste Capture the Flag para iniciantes. Se você é iniciante, provavelmente nunca participou do Capture the Flag. Há um curso de treinamento mensal para esse teste, que inclui o estudo de problemas de criptografia e descriptografia, teste de rede, teste de malware, estudo de problemas de engenharia reversa, uso de explorações e outras coisas. Este é um evento muito sólido e divertido. Em suma, vamos tentar fazer algo semelhante.
No slide, você vê as configurações da rede sem fio, peço que você não a quebre. Se você deseja acessar uma rede chamada joe-hacktivity-demo, você pode usar esta senha.

Há um arquivo de texto aqui, o motivo para criá-lo é simplesmente permitir que você copie e cole as informações na barra de endereços do navegador. Normalmente, as pessoas fazem isso com coisas como o Windows 7, mas tudo o que você precisa neste caso é apenas um navegador da web. Portanto, se você possui o Firefox, Chrome, basta abrir o iPad ou laptop, copiar esse texto e acessar o site da livraria on-line. Eu tenho um sistema de detecção de intrusão IDS, tenho o Snort Box em execução e vamos manter essa rede operacional. Nós vamos usar um monte de aplicativos da web, um monte de injeções de SQL, um monte de scripts entre sites nesse host que possui esse aplicativo da web. Depois, temos outra "caixa" na qual há um firewall configurado para que eu possa orientar você sobre alguns IDs e firewalls. Nós apenas chegamos lá, discutimos e fazemos algumas coisas interessantes lá.
Então, preciso continuar explicando ou posso começar? OK, bem, vamos começar. Eu tenho um sistema de detecção de intrusões complicado no meu laptop aqui. Agora aumentarei a imagem na tela em que o arquivo de texto é exibido. Você pode verificar seu endereço na barra do navegador, este é o nosso arquivo de texto.

Vou implementar scripts entre sites usando SQL trivial, mas se você quiser mexer com o aplicativo mais a sério, poderá verificar este arquivo de texto, que possui dois aplicativos. O aplicativo na 2.6, desenvolvido na plataforma ASP.NET, verifica se a rede está funcionando, se trata de uma versão atualizada da plataforma DotNet com uma biblioteca de scripts entre sites e alguns outros mecanismos de segurança, além de um arquivo web.config modificado para carregar outras bibliotecas de segurança.
O aplicativo em 2.7 é o mesmo que o anterior, mas possui não apenas todos os recursos de segurança DotNet, mas também um firewall para aplicativos de rede. Então, eu quero "confundir" esse aplicativo em 2.35 e vou falar sobre isso.

Se você estiver familiarizado com o básico de scripts entre sites e injeção de SQL, entenderá o que são 2.6, 2.5 e 2.7. Portanto, temos esse arquivo de texto que podemos copiar e colar. Vamos falar sobre o parâmetro que eu insiro na barra de endereço do nosso site. Este é bookdetail.aspx? Id = 2, e o ponto de interrogação significa que o ID do parâmetro de ID de que precisamos é 2. Na verdade, acontece que a interface do servidor da Web se comunica com o banco de dados do servidor da Web para descobrir se há uma entrada, relacionado a esse identificador de dados está um ID com um valor de 2. E o banco de dados responde à interface: "sim, cara, eu tenho o que você precisa!"

O que faremos agora é verificar se a injeção de SQL funciona para nós. Portanto, lançaremos aqui um código simples na forma de aspas no final e veremos que isso levou à mensagem de erro "Abrir aspas após a sequência de caracteres". Este é um dos testes mais comuns quando você substitui um parâmetro por aspas ou usa as aspas diretamente como parâmetro. Isso acontece com frequência e não há nada de surpreendente.

Vamos tentar um pouco diferente. Substituirei a sequência de parâmetros pelo valor bookdetail.aspx? Id = 4. Observe - quando substituo este 4 por dois, a página exibida muda, a imagem na parte superior da página muda. Agora tente colocar os dois entre parênteses, a imagem mudou novamente. Se eu escrever no final da linha (4-2), a imagem será a mesma que com 2 no final da linha. Se eu escrever entre colchetes (4-1), a página terá a mesma aparência que se eu colocasse o número 3 no final, ou seja, igualei o ID ao triplo.

Então, qual de vocês se aprofundou nessas questões enquanto fazia penteamentos? Você pensa assim: "OK, colarei o código SQL aqui na barra de endereços e ele me redirecionará para a página inicial. Agora, altero-o e ele pode me enviar para onde eu precisar ou novamente para a página inicial". Na verdade, você suprime mensagens de erro e a ausência de uma mensagem de erro ODBS faz com que você dance com alegria porque conseguiu injetar código SQL.
Vejo que algo está errado, mas não consigo consertar. E o que acontece? Seu desenvolvedor se considera o mais inteligente porque conseguiu remover as mensagens de erro. Mas o que realmente acontece quando você força o banco de dados a fazer todos esses cálculos aritméticos?
Portanto, o banco de dados executa este cálculo: (4-1) e obtemos a página 3. Acabamos de provar que a injeção de SQL agora é possível. Então você pode voltar ao desenvolvedor e dizer: “não, não, não, cara, você ainda tem a opção de injeção de SQL, apesar de não haver mensagens de erro!” Você só pode consertar um pouco, e isso acontece o tempo todo e em qualquer lugar.
Usei truques desse tipo, mas os jogos estão mudando e agora muitas pessoas usam o firewall de aplicativos da web. Portanto, se você digitar algo como: 2 ou 1 em (selecione usuário) - na sequência de parâmetros de endereço, geralmente você recebe uma mensagem de erro devido ao prefixo incorreto do nome do proprietário do banco de dados DBO (proprietário do banco de dados) para este tipo de dados. Nesse caso, o firewall cai na armadilha nesse estágio da escolha do usuário e diz: "não, não, não, não posso fazer uma escolha"!

Portanto, quando você vê essas coisas, isso significa que, se você ainda não descobriu se encontrou um firewall de aplicativo da web ou se não está fazendo esses truques aritméticos, ainda há uma boa maneira de descobrir se há uma injeção de SQL nesse caso e se Este aplicativo da web é um firewall.
Eu vou lhe dizer que há uma coisa terrível - a necessidade de realizar pentesting na cadeia de varejo. Algum de vocês sabe o que isso significa em inglês? PCI? Eu odeio PCI, mas estou constantemente envolvido em protestos em redes de varejo. O PCI é um padrão de segurança de dados baseado no regulamento do padrão de segurança de dados da indústria de cartões de pagamento de 2008 (PCI DSS). O "Retail Network Pentesting" permite verificar a conformidade com o padrão PCI e identificar ameaças reais.
Esse padrão é uma sabedoria infinita que diz a verdade: “eles devem ... devem ser ...” e você deve usar padrões de criptografia segura de acordo com os padrões internacionais de autenticação, e você o fará ... ou poderá usar o firewall do seu aplicativo da web.
Todos os usuários com quem trabalhei fizeram a coisa certa, realizaram modelagem de ameaças, marcaram uma reunião, outra reunião, depois se encontraram novamente e finalmente consertaram tudo. Você acha? E não! Eles "devolveram o caminhão" e seus sensores de estacionamento emitiram esses sinais reversos. Eles simplesmente esconderam o problema em um armário, fora da vista, e disseram: "nós consertamos tudo!"
Agora vou mostrar mais uma coisa que, na minha opinião, é muito interessante de se jogar. Olha aqui. Tudo o que fiz até agora é implementar o SQL. Agora vou fazer isso - selecionarei o endereço do banco de dados principal, copio e colo na barra de endereços do navegador. Vemos que o primeiro banco de dados é chamado “BookApp” quando o último parâmetro na cadeia de parâmetros de endereço é 0.

Agora vou substituir este 0 por 1 e você verá o que aconteceu - vimos que o segundo banco de dados é chamado de "mestre".

Em seguida, alteramos 1 para 2 e vemos que o próximo banco de dados é chamado "tempdb".

Agora me ajude! Você poderia dizer que identificamos a injeção de SQL? Sim é ótimo! Mas o problema é que nada no meu programa de detecção de intrusões IDS ficou vermelho! Essa coisa, que não fica vermelha na tela, quando fazemos injeção de SQL, nenhuma ameaça foi detectada!

Ok, agora olhe aqui - eu tenho que fazer algo errado. Eu não tomo informações do banco de dados diretamente do banco de dados, e o que isso me diz que sublinho em vermelho?

Não, espere um minuto! Vou tentar fazer diferente. Em vez da numeração do banco de dados, vamos usar a numeração da linha da tabela acima, que está escrita "Erro de injeção SQL - recuperando 1 tabela do banco de dados".

Copio esses dados e colo na barra de endereços do navegador. Veja o que temos agora - a frase (selecione o primeiro nome entre os assuntos em que xtype = char (85)) - fornece o quê?
Certo, o nome do banco de dados principal do BOOKMASTER. Eu acho que isso é injeção de SQL, quem pensa o mesmo? Até Stevie Wonder pôde ver que isso é uma injeção de SQL!

Mas vamos olhar aqui - 0 ameaças! Mas este é um sistema barato, possui erros, as regras não foram atualizadas.

Acho que as regras de validação do IDS estão um pouco desatualizadas, baixei-as hoje de manhã e estão um pouco desatualizadas. Talvez tenha entendido algo errado aqui, baixei as regras antigas e precisei fazer o download das regras mais recentes, que não duram mais de três horas - não sei.
Mas vamos olhar mais longe. E se tentarmos copiar outros dados sobre os quais ele diz "Erro de injeção SQL - recuperando 2 tabelas do banco de dados".

Portanto, os registros do 2º banco de dados nos dão o que é chamado de “sysdiagrams”.

Ou seja, fizemos a pergunta, o parâmetro xtype = char (85)) e o nome 'BOOKMASTER' podem mostrar o nome de um nível superior a BOOKMASTER? Em outras palavras, o sistema pode me fornecer o nome da tabela a seguir? É assim que listamos o banco de dados - assim que você recupera o nome do banco de dados e o nome da tabela, você continua perguntando: "Ei, cara, posso obter um nome de tabela maior do que o que estou vendo agora?" você apenas continua esse processo e obtém os nomes das novas tabelas.
Mas vamos voltar e olhar para o meu programa - novamente mostra que o número de ameaças de segurança exclusivas é 0. Temos um problema novamente!

E se eu tentar a injeção SQL baseada em união, SQL baseado em união? Aqui eu tenho vários outros tipos de injeções de SQL e agora apenas inserimos uma linha que aponta imediatamente para um registro cujo ID é 100.

Como resultado, obtemos a resposta de que o número 100 está fora do intervalo de valores válido. Porque se eu tiver 10 colunas, posso escolher 5? Claro! Posso escolher 20 colunas de 10? Claro que não! Ou seja, o banco de dados responde: "Desculpe, cara, mas não tenho tantas colunas!" Ótimo, então eu mudo de 100 para 50, e ela novamente me escreve: "50 está fora de alcance". Tudo bem, que tal 25? Não, 25 também está fora de alcance. Diga-me o que mais discar? 13? Este é um número azarado, mas bom, discamos 13 e também está fora de alcance.
Vamos pegar 9! Ótimo, os nove funcionaram! Esta é a entrada correta, preciso de mais de 9, mas menor que o valor limite, então vamos jogar um pouco mais para descobrir quantas colunas nossa tabela possui.

Então, como determinamos quantas colunas estão em uma tabela? Agora, inseriremos na barra de endereços uma sequência de 1 a 9, denominada “declaração de união” ou “declaração de união”. Esta instrução combina o que o desenvolvedor escreveu com o que você mesmo escreveu.

Mas você precisa ter o número certo de números para as instruções de ambas as opções para descobrir em qual número suas colunas terminam. Vamos fazer esse truque - atribua ao número 2 um valor negativo, ou seja, corrija-o na barra de endereço 2 por –2. Veja o que aconteceu.

A imagem com a capa do livro desapareceu, mas todos esses números apareceram - esses são os números das colunas na tabela do banco de dados. Vamos, me diga o número! Dois? Bem, seja 2. Substituo 2 na sequência pela palavra "usuário" e agora o usuário dbo aparece em vez do nome do livro 2 na página.

E se eu for para o número 3? Juntos, escreverei a versão número 3 @@. Veja o que temos na página agora?

OK agora pessoal me ajudem! Podemos agora dizer que temos uma injeção de SQL?

Ainda nada! O sistema de segurança não vê nenhuma injeção de SQL.
Comecei minha carreira em segurança como analista de sistemas de detecção de intrusão IDS. Era uma vida terrível, era preciso observar as interceptações de pacotes o dia todo e, provavelmente, nada mais do que, provavelmente, casamento, para que não o force a colocar uma bala na cabeça.
Quero dizer, eu era como os outros, eu assisti o dia inteiro que era muito ruim, e quando você começa a ver essas coisas que passam por você, é simplesmente de tirar o fôlego, é uma loucura.
Então, digamos que vamos fazer algo interessante. Talvez eu o tire daqui, copie e arraste para aqui. Então, insiro a versão do banco de dados, o nome do servidor na barra de endereços e, em seguida, master.sys.fn_varbintohexstr (password_hash) - nada de interessante, certo?

Agora, temos esses dados na página e acho que a linha superior será útil para nós.

O importante é que possamos descobrir que o IDS é a grande coisa à nossa disposição! Então quem está comigo? Execute com urgência e compre um desses programas!
A tela mostra que o programa novamente não detectou nenhuma injeção de SQL.

Este é apenas um ótimo programa, é ainda melhor do que pensamos, porque ele pode compilar todos esses logs de usuário inúteis que ninguém nunca examina, e isso é legal! Ok, suponha que façamos algo interessante, afinal. Usamos estes parâmetros: 1 = 1, 1 = 2 e 1 * 1. Um é igual a um? Sim Um é igual a dois? Não, não é igual. Mas o que precisamos fazer é verificar se as alterações na página correta que queremos dizer são "enumeradas".

Copio e colo os parâmetros da primeira linha 1 = 1 na barra de endereços, olho a página e altero essa expressão para 1 = 2. Se a página mudar de alguma maneira "desonesta" - como você pode ver, realmente mudou -, com base nisso, do ponto de vista da programação, posso concluir que há uma injeção de SQL. Porque se eu usar 1 = 1 e 1 = 2, então posso fazer o seguinte: “OK, se eu usar o nome de usuário dbo e 1 = 1, porque de acordo com as instruções, se o nome de usuário for dbo e 1 = 1, obtemos a página correta e, graças a isso, sei que o nome de usuário é realmente dbo ". Isso está claro? Bem, olhe novamente para a guia IDS - sem ameaças! Eu digo que este é um produto incrível.
Agora vamos fazer uma coisa tão interessante. Considere esses valores. Um a mais que um? É claro que mais. Mas então vem a coisa que eu realmente amo. Essa expressão é "1 menor que mais que 1".
Repito - estas são apenas maneiras diferentes de fazer a mesma pergunta. Quem tem filhos, você sabe como eles podem fazer perguntas. "Posso ter esses cookies?" - Não, você não pode! - Talvez eu possa ter esses chips? - Não, não há biscoitos! "Então, talvez esses Oreos possam?" Eu sei disso, passei por isso.25:50 minConferência HACKTIVITY 2012. A teoria do Big Bang: A evolução do pentesting na segurança aprimorada. Parte 2Um pouco de publicidade :)
, . ? ? , ,
VPS $4.99 ,
entry-level , : VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps $19 ? ( RAID1 RAID10, 24 40GB DDR4).
Dell R730xd 2 - Equinix Tier IV ? 2 Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 $199 ! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - a partir de US $ 99! Leia sobre Como criar um prédio de infraestrutura. classe usando servidores Dell R730xd E5-2650 v4 custando 9.000 euros por um centavo?