WEBVTT

00:00.110 --> 00:00.890
Bem-vindo de volta.

00:00.920 --> 00:06.260
Portanto, o último foi um pouco rápido, mas acho que não devemos nos esquecer de que este

00:06.260 --> 00:10.520
é mais um aplicativo de aprendizado e não um desafio de CTF pesado.

00:10.520 --> 00:11.330
Tudo bem.

00:11.390 --> 00:11.960
Está bem.

00:11.960 --> 00:13.820
Portanto, vamos simplesmente seguir em frente.

00:14.330 --> 00:15.500
Vejamos.

00:15.680 --> 00:18.980
Já temos todos eles.

00:19.220 --> 00:22.160
O vazamento de dados de canal lateral é algo que ignoramos por enquanto.

00:22.160 --> 00:24.140
Vamos dar uma olhada na validação de entrada.

00:25.430 --> 00:25.940
Está bem.

00:25.940 --> 00:26.300
Sim.

00:26.300 --> 00:29.030
Aqui temos a injeção de SQL XYZ e Webviews.

00:29.030 --> 00:29.270
Sim.

00:29.300 --> 00:32.390
Isso é algo que eu quero fazer em um vídeo curto.

00:32.420 --> 00:34.820
No entanto, temos isso aqui agora, ok.

00:34.820 --> 00:38.390
Vamos ver, complete os exercícios abaixo.

00:38.390 --> 00:39.590
Ok XSS.

00:41.210 --> 00:43.610
Identificar códigos vulneráveis e assim por diante.

00:43.610 --> 00:44.060
Está bem.

00:44.060 --> 00:48.110
Portanto, temos o campo name aqui e exibimos ok.

00:48.470 --> 00:53.030
Vamos ver se digitamos o teste e ele é exibido aqui.

00:55.100 --> 00:59.450
Então, vamos dar uma olhada no código referente a isso.

01:02.150 --> 01:02.900
Um.

01:02.900 --> 01:05.090
Nós o temos aqui.

01:05.120 --> 01:06.440
Atividade XSS.

01:08.230 --> 01:09.520
Está bem.

01:09.520 --> 01:10.750
Oncreate.

01:10.750 --> 01:11.380
Sim.

01:11.380 --> 01:12.130
Está bem.

01:13.360 --> 01:17.860
Ele precisa ter um WebView e precisa ter o JavaScript ativado.

01:17.860 --> 01:18.400
Tudo bem.

01:18.400 --> 01:27.880
Portanto, um WebView é simplesmente um quadro de conteúdo em seu aplicativo no qual um site está sendo exibido.

01:27.880 --> 01:34.270
Portanto, você pode pensar nisso como se tivesse um iframe, uh, nesse aplicativo móvel em execução que é exibido

01:34.270 --> 01:35.230
na página.

01:35.530 --> 01:37.540
E vamos ver qual é a página.

01:37.540 --> 01:40.720
Portanto, temos dados de carga.

01:43.990 --> 01:44.230
Está bem.

01:44.230 --> 01:44.650
Vejamos.

01:44.650 --> 01:47.350
Portanto, obtivemos a expressão de verificação do WebView, ok.

01:47.350 --> 01:52.450
Configurações do cliente web WebView Configurações do cliente web habilitadas JavaScript ok.

01:52.990 --> 01:54.010
Ah, sim, tudo bem.

01:54.010 --> 01:54.820
Carregar dados.

01:55.000 --> 02:01.060
Ah, sim, ok, entendo, então vamos abrir isso no Visual Studio Code.

02:03.660 --> 02:07.590
Então, essas são todas as outras coisas.

02:11.410 --> 02:13.420
E vamos ativar o Wordwrap.

02:18.350 --> 02:20.900
Digamos que isso seja HTML.

02:21.740 --> 02:22.490
Está bem.

02:26.330 --> 02:26.840
Sim.

02:26.840 --> 02:32.360
E vamos substituí-las por uma linha realmente nova, ok.

02:32.360 --> 02:37.250
Portanto, aqui podemos ver que já temos um aplicativo da Web sendo renderizado.

02:38.270 --> 02:39.470
Este aqui.

02:39.470 --> 02:40.850
Nome e exibição.

02:40.850 --> 02:43.100
Esse já é um aplicativo da Web.

02:43.100 --> 02:45.080
Aqui temos o contexto HTML.

02:45.080 --> 02:51.020
E podemos ver, quero dizer, podemos salvar isso agora mesmo.

02:53.090 --> 02:55.670
em um arquivo HTML e exibi-lo.

02:55.670 --> 02:56.990
Ou talvez façamos isso.

02:58.200 --> 02:59.880
Salvar como.

03:03.090 --> 03:03.960
WebView.

03:08.900 --> 03:10.070
E vamos ver.

03:13.560 --> 03:14.400
Sim, está bem.

03:14.400 --> 03:15.600
Fiz uma bagunça aqui.

03:15.600 --> 03:18.900
Mas você pode ver que temos esse nome e coisas do gênero.

03:18.900 --> 03:20.700
Portanto, esse é o WebView em execução.

03:21.180 --> 03:23.160
Ok, hum.

03:23.790 --> 03:24.360
Vejamos.

03:24.360 --> 03:26.250
Portanto, temos algum conteúdo de exibição de função.

03:26.250 --> 03:32.100
Ele obtém o nome do elemento do documento get por ID, que é o nome correto.

03:32.100 --> 03:33.420
E então, sim, tudo bem.

03:33.420 --> 03:35.520
Portanto, estamos buscando o valor do nome.

03:35.520 --> 03:38.910
E estamos escrevendo isso diretamente na página HTML.

03:38.910 --> 03:43.740
Isso significa que agora já podemos inserir algumas tags HTML.

03:43.740 --> 03:49.470
Por exemplo, se usarmos essa tag H1, estaremos criando um título.

03:49.470 --> 03:52.110
E este deve ficar um pouco maior.

03:52.110 --> 03:52.590
Perfeito.

03:52.590 --> 03:53.010
Sim.

03:53.010 --> 03:55.410
Assim, podemos ver que a entrada não está sendo filtrada.

03:55.410 --> 04:00.720
Isso significa que agora podemos inserir tags HTML já existentes.

04:01.140 --> 04:05.370
Mas agora também podemos ver que essa visualização da Web.

04:07.230 --> 04:08.850
Isso é algo que você precisa procurar.

04:08.850 --> 04:14.010
Tem esse JavaScript ativado, o que significa que ele também aceita JavaScript.

04:14.610 --> 04:22.590
Portanto, o que deve funcionar é algo como um script de alerta.

04:26.000 --> 04:36.650
Uh, script de edição de faixa preta da Udemy 3 para 1.

04:39.990 --> 04:40.650
Está bem.

04:41.210 --> 04:43.700
Talvez eu queira um pouco demais.

04:43.700 --> 04:51.560
Portanto, o que deu errado foram definitivamente os parágrafos.

04:51.560 --> 04:52.700
Portanto, vamos mantê-lo.

04:52.700 --> 04:56.060
Devemos começar de forma simples antes de nos empolgarmos demais agora.

04:56.060 --> 04:57.200
3 para 1.

04:57.200 --> 04:57.710
Sim.

04:57.710 --> 05:06.650
Agora, podemos ver que esse código JavaScript é executado, o que significa um alerta de script.

05:08.420 --> 05:09.470
Udemy.

05:12.460 --> 05:13.090
Sim.

05:13.090 --> 05:13.750
Está bem.

05:13.750 --> 05:16.570
E agora também podemos fazer essas outras coisas.

05:16.960 --> 05:17.500
Um.

05:20.920 --> 05:22.870
Alerta de script.

05:22.900 --> 05:23.950
Udemy.

05:25.180 --> 05:26.800
Hacking de aplicativos Android.

05:26.800 --> 05:27.790
Faixa preta.

05:32.200 --> 05:42.070
Certo, acho que não podemos usar algum contexto agora em relação ao documento de alerta de

05:43.450 --> 05:45.760
script. cookie.

05:45.910 --> 05:51.040
Assim, por exemplo, com esse código JavaScript, poderíamos acessar os atributos do cookie, mas

05:51.040 --> 05:52.990
não temos uma sessão no momento.

05:52.990 --> 05:58.150
Portanto, acho que esse é apenas um aplicativo de teste para verificar se o código JavaScript é executado.

05:58.150 --> 05:59.080
321.

06:00.020 --> 06:00.680
Sim.

06:00.680 --> 06:02.570
Não está funcionando.

06:03.340 --> 06:04.240
Acho que sim.

06:05.890 --> 06:07.870
Então, o que você pode fazer?

06:07.900 --> 06:10.720
Tendo acesso, você pode criar um novo layout.

06:10.720 --> 06:12.700
Você pode carregar conteúdo adicional.

06:12.700 --> 06:18.340
É possível se você tiver uma interface JavaScript, o que não é o caso aqui.

06:18.340 --> 06:21.940
Em seguida, você pode executar diretamente o código Java.

06:21.940 --> 06:29.170
Assim, você pode obter a execução remota de código com base no WebView, no JavaScript ativado e na interface JavaScript.

06:29.170 --> 06:34.450
Portanto, ao ter uma interface JavaScript, é como ter uma função normal.

06:35.020 --> 06:35.830
Vejamos.

06:36.910 --> 06:39.040
Vejamos, por exemplo, esta função.

06:40.300 --> 06:43.720
E acho que é algo como.

06:46.190 --> 06:48.860
Interface JavaScript.

06:50.450 --> 06:51.920
Algo parecido com isso.

06:52.610 --> 06:56.990
E então podemos simplesmente chamar o método no JavaScript.

06:56.990 --> 06:59.750
E, em seguida, o método Java aqui é executado.

06:59.750 --> 07:02.330
Portanto, isso também é algo que você deve procurar.

07:03.710 --> 07:04.340
Está bem.

07:04.340 --> 07:07.670
Mas acho que, com relação ao XSS, sim, isso é tudo.

07:08.480 --> 07:11.420
Muito bem, vamos continuar com a injeção de SQL.

07:12.530 --> 07:13.310
Tão perto.

07:13.310 --> 07:15.620
Ou talvez possamos mantê-lo aberto.

07:18.130 --> 07:19.060
Está bem.

07:19.060 --> 07:22.720
Compreender a injeção de SQL e identificar códigos vulneráveis.

07:22.720 --> 07:24.550
Localize todos os usuários que não estão satisfeitos.

07:24.550 --> 07:29.320
Conclua o exercício de armazenamento inseguro e certifique-se de que pelo menos dois usuários sejam criados.

07:29.320 --> 07:36.940
Bem, acho que temos que criar o banco de dados primeiro porque, caso contrário, não poderemos executar ou acionar

07:36.940 --> 07:39.940
essa injeção de SQL para obter alguns dados.

07:40.780 --> 07:43.390
No entanto, vamos primeiro dar uma olhada nesse caso.

07:46.130 --> 07:48.110
Injeção de SQL.

07:48.740 --> 07:50.990
Aqui, temos o oncreate.

07:50.990 --> 07:53.060
Temos o botão SQL.

07:54.630 --> 07:55.860
Consulta do cursor.

07:57.710 --> 07:58.250
Está bem.

07:58.250 --> 08:01.280
Precisamos verificar qual é a nossa entrada.

08:01.280 --> 08:06.320
Temos o nome de usuário e, em seguida, temos a visualização de texto e edição de texto.

08:06.500 --> 08:08.960
Temos um texto de edição em algum lugar.

08:11.550 --> 08:12.660
Hum, sim.

08:12.660 --> 08:13.050
Aqui.

08:13.050 --> 08:13.650
Está bem.

08:15.340 --> 08:19.420
Pronto, já podemos ver nosso texto.

08:20.500 --> 08:25.000
Termina no nome de usuário dois e, em seguida, verifica a expressão not null.

08:25.000 --> 08:30.700
Verificamos se o nome de usuário tem algo e então temos sb append ok.

08:30.700 --> 08:35.620
E sb é este aqui, o que significa que estamos pendurando nosso nome de usuário neste aqui.

08:36.450 --> 08:38.190
E então estamos anexando ok.

08:38.190 --> 08:38.520
Sim.

08:38.520 --> 08:40.620
Precisamos dessa citação final.

08:40.620 --> 08:41.010
Está bem.

08:41.010 --> 08:42.840
Então, o que acontece é o seguinte.

08:45.830 --> 08:47.330
Agora vamos mudar para o SQL.

08:49.830 --> 08:50.370
Está bem.

08:50.370 --> 08:52.890
Portanto, esta é a nossa primeira parte.

08:53.310 --> 08:56.130
Em seguida, há esse campo de texto de edição.

08:56.460 --> 08:59.610
Este aqui onde está o texto.

09:06.030 --> 09:08.640
Armazenado no nome de usuário dois.

09:08.670 --> 09:13.230
Aqui estamos obtendo o texto desse campo de texto.

09:14.100 --> 09:17.820
E estamos anexando isso à sintaxe SQL.

09:17.910 --> 09:23.040
Por exemplo, se tivermos um nome de usuário admin, ele será anexado.

09:23.040 --> 09:30.360
Mas isso não seria uma sintaxe SQL inválida, pois esta aqui geraria um erro de que a consulta

09:30.360 --> 09:32.010
não está fechada.

09:32.010 --> 09:33.210
Algo parecido com isso.

09:33.210 --> 09:39.060
Portanto, o que podemos ver aqui é que estamos acrescentando um ponto e vírgula depois.

09:40.500 --> 09:41.070
Está bem.

09:41.070 --> 09:44.250
Portanto, temos influência sobre essa parte aqui.

09:44.250 --> 09:48.990
E o que podemos fazer é, por exemplo, deixar isso vazio.

09:52.530 --> 09:57.540
E então poderíamos inserir algo como este.

09:57.540 --> 10:02.370
E, então, talvez precisemos encerrar o assunto ou comentá-lo.

10:02.370 --> 10:04.980
Acho que comentar isso deve funcionar.

10:05.070 --> 10:15.540
E isso significaria selecionar tudo de usuários em que o nome de usuário está vazio ou um é igual a um, o que dá uma declaração verdadeira, o que significa

10:15.540 --> 10:19.410
que estamos selecionando ou verdadeiro.

10:19.410 --> 10:24.330
Portanto, estamos selecionando cada linha em nossa sintaxe SQL aqui.

10:24.330 --> 10:28.410
Assim, recuperaremos todo o banco de dados do usuário.

10:28.410 --> 10:28.830
Sim.

10:30.100 --> 10:32.440
Sim, com todas as entradas também.

10:32.470 --> 10:33.310
Está bem.

10:33.700 --> 10:35.260
Então vamos ver.

10:36.910 --> 10:39.520
Quero dizer, podemos tentar isso, mas acho que sim.

10:41.470 --> 10:42.610
Dados não seguros.

10:42.610 --> 10:43.780
Não há usuários de tabela.

10:43.780 --> 10:44.050
Está bem.

10:44.050 --> 10:44.260
Sim.

10:44.620 --> 10:46.510
Em que desafio isso ocorre?

10:47.830 --> 10:50.530
SQL de armazenamento inseguro.

10:50.680 --> 10:53.050
Então vamos ver.

10:53.050 --> 10:58.480
Mas eu não quero pular para esse, então sim, vamos mantê-los separados.

10:58.480 --> 10:59.980
Acho que é isso.

11:00.640 --> 11:01.870
Vejamos.

11:02.170 --> 11:05.080
Senha de administrador.

11:06.040 --> 11:06.730
Está bem.

11:11.550 --> 11:12.900
Android.

11:16.740 --> 11:18.810
Curso incrível.

11:20.910 --> 11:22.950
Um pouco, uh, autocolante.

11:22.950 --> 11:23.460
Aqui.

11:24.480 --> 11:29.310
Pronto, agora criamos um banco de dados com duas entradas.

11:30.240 --> 11:32.520
E vamos voltar à validação de entrada.

11:34.090 --> 11:34.570
Está bem.

11:34.570 --> 11:37.300
Vamos ver se estamos usando o admin.

11:37.300 --> 11:39.070
Vamos ver o que deve acontecer.

11:39.070 --> 11:43.540
Se usarmos o admin, estaremos selecionando todas as entradas corretamente.

11:43.930 --> 11:48.280
E este vai para a consulta.

11:48.280 --> 11:51.070
E aqui podemos ver que ele está executando essa consulta.

11:51.070 --> 11:58.120
E, em seguida, ele retorna com os resultados desse teste.

12:00.370 --> 12:02.530
Nome de usuário e senha.

12:03.290 --> 12:03.830
Sim.

12:05.790 --> 12:07.920
E aqui podemos ver algumas outras coisas.

12:07.920 --> 12:09.030
O que acontece aqui?

12:09.030 --> 12:10.800
Nome de usuário não encontrado.

12:10.800 --> 12:11.460
Está bem.

12:12.840 --> 12:13.380
Tudo bem.

12:13.380 --> 12:23.010
Vejamos, então, se usarmos o verify, ele deverá imprimir algo como nome de usuário, senha, acho que esta parte

12:23.010 --> 12:26.670
aqui, se tivermos uma entrada 321.

12:27.320 --> 12:27.920
Sim.

12:27.920 --> 12:30.860
A senha do administrador do nome de usuário é a senha com esses colchetes.

12:30.860 --> 12:31.460
Exatamente.

12:31.460 --> 12:32.420
Esta parte aqui.

12:32.420 --> 12:33.170
Perfeito.

12:33.170 --> 12:35.660
Portanto, esses são nossos dois resultados, ok.

12:35.660 --> 12:40.880
Portanto, isso é se o usuário existir, se você tiver um usuário que não existe.

12:42.990 --> 12:44.760
Usuário não encontrado.

12:45.000 --> 12:46.830
Pode ser esta parte aqui.

12:47.130 --> 12:47.850
Está bem.

12:47.850 --> 12:54.330
E se a consulta SQL lançar uma exceção, acabaremos aqui.

12:54.420 --> 12:56.130
Erro ao inserir dados.

12:56.130 --> 12:57.390
Algo parecido com isso.

12:57.940 --> 13:00.100
Portanto, vamos lançar uma exceção.

13:00.100 --> 13:05.380
Uma exceção seria esta, pois vamos colocá-la no lado esquerdo, talvez.

13:10.470 --> 13:17.910
Portanto, o que estamos fazendo agora é inserir ABC e depois em cólon, uh, não cólon e.

13:20.190 --> 13:20.880
Citação.

13:20.880 --> 13:21.630
É uma citação?

13:21.630 --> 13:22.200
Aspas simples?

13:22.200 --> 13:22.890
É uma aspa simples.

13:22.890 --> 13:23.490
Sim.

13:23.490 --> 13:26.730
Isso significa que estamos encerrando esta parte.

13:26.730 --> 13:29.580
Mas agora temos novamente uma pergunta de abertura.

13:29.580 --> 13:31.350
Portanto, isso deve gerar uma exceção.

13:31.350 --> 13:32.970
Vamos ver 3 para 1.

13:34.040 --> 13:34.490
Sim.

13:34.520 --> 13:34.910
Perfeito.

13:34.910 --> 13:36.080
Também podemos ver.

13:36.080 --> 13:37.790
Sim, há dois lá dentro.

13:38.660 --> 13:41.300
Código um, erro na claraboia e assim por diante.

13:41.300 --> 13:44.810
Vamos ver se fechamos esse aqui, então isso deve funcionar.

13:44.810 --> 13:50.210
Acho que precisamos fechá-lo aqui, é claro, porque agora já o temos.

13:50.330 --> 13:52.100
Portanto, esta é a parte aqui.

13:52.100 --> 13:55.190
E este é simplesmente uma string vazia.

13:55.190 --> 13:57.410
Mas não tenho 100% de certeza.

13:57.410 --> 13:58.070
Vejamos.

13:58.100 --> 13:59.240
3 para 1.

13:59.870 --> 14:00.440
Sim.

14:00.440 --> 14:01.670
Usar ABC não encontrado.

14:01.670 --> 14:08.240
Portanto, podemos ver que esse é um indicador muito bom, bastando lançar uma única citação no banco de dados.

14:08.240 --> 14:11.450
Não é como se fosse sempre uma injeção de SQL.

14:11.450 --> 14:17.090
Pode ser qualquer outra coisa, menos anexar o segundo e receber um resultado inválido.

14:17.090 --> 14:20.660
Isso é um pouco suspeito, ok.

14:20.660 --> 14:23.870
Portanto, o que poderíamos fazer agora é.

14:24.430 --> 14:35.020
Se esse fosse um aplicativo da Web, eu nunca, jamais, lançaria um A ou um igual a um contra esse aplicativo.

14:35.050 --> 14:35.830
Por quê?

14:36.130 --> 14:41.290
Digamos que o comando select seja usado posteriormente em um comando update.

14:41.500 --> 14:46.120
Assim, você sobrescreveria completamente todo o banco de dados.

14:46.120 --> 14:49.660
E isso é definitivamente ruim neste caso.

14:49.660 --> 14:55.270
No momento, temos um banco de dados local em nosso smartphone a partir de um aplicativo que pode ser facilmente restaurado.

14:55.270 --> 15:02.650
Portanto, eu optaria pela abordagem fácil, o que significa que estamos inserindo este

15:02.650 --> 15:04.540
e depois vamos ver.

15:04.960 --> 15:05.500
Um.

15:06.770 --> 15:07.790
Se este for o caso.

15:07.790 --> 15:09.350
Portanto, isso corrige o problema.

15:09.380 --> 15:10.070
Desculpe.

15:10.670 --> 15:12.170
Este é o nosso.

15:14.990 --> 15:15.650
Este aqui.

15:15.650 --> 15:16.340
Sim.

15:16.340 --> 15:18.140
Portanto, essa é a nossa contribuição.

15:20.730 --> 15:23.130
Isso significa que estamos fechando a primeira consulta.

15:23.130 --> 15:26.700
Estamos conectando-a com a segunda, que é sempre verdadeira.

15:26.700 --> 15:29.700
E então estamos fechando o hífen final.

15:29.700 --> 15:31.800
Uma única citação aqui.

15:32.370 --> 15:33.480
Sim, tudo bem.

15:34.140 --> 15:35.070
Vejamos.

15:35.070 --> 15:37.860
Portanto, nossa entrada seria a seguinte.

15:40.200 --> 15:43.620
Se isso não funcionar, teremos que adotar a abordagem de comando.

15:47.640 --> 15:48.240
Sim.

15:48.240 --> 15:48.720
Vejamos.

15:48.750 --> 15:49.770
3 para 1.

15:50.900 --> 15:51.620
Não.

15:52.340 --> 15:53.180
Um.

15:57.120 --> 16:00.810
Vamos ver se colocamos alguns dados inválidos no início.

16:00.810 --> 16:01.800
3 para 1.

16:03.300 --> 16:04.080
Não.

16:04.080 --> 16:04.500
Está bem.

16:04.500 --> 16:06.450
Não estou 100% certo.

16:06.450 --> 16:07.470
Podemos ver.

16:09.960 --> 16:10.500
Está bem.

16:10.500 --> 16:16.590
Para mim, parece bom, mas, mesmo assim, vamos tentar a abordagem de comentários, o que significa.

16:19.280 --> 16:24.500
Hum, estamos comentando o final, uh, uma única citação aqui.

16:25.070 --> 16:26.000
Então vamos ver.

16:26.000 --> 16:26.300
Três.

16:26.300 --> 16:26.960
Dois, um.

16:27.510 --> 16:28.110
Sim.

16:28.110 --> 16:28.440
Está bem.

16:28.440 --> 16:28.830
Perfeito.

16:28.830 --> 16:30.060
Podemos ver.

16:30.060 --> 16:31.080
Sim, podemos ver.

16:31.080 --> 16:33.330
Agora estamos recebendo as duas entradas aqui.

16:33.330 --> 16:41.190
Além disso, se você tiver um banco de dados com, digamos, 60 mil usuários, e lançar isso contra ele, a iteração será feita

16:41.190 --> 16:43.140
sobre todos os usuários.

16:43.140 --> 16:45.120
Portanto, isso pode causar muitos danos.

16:45.120 --> 16:49.230
Vamos ver como podemos fazer isso ou como podemos fazer isso um pouco melhor.

16:49.770 --> 16:53.520
Portanto, precisamos entrar na estrutura desse banco de dados.

16:53.520 --> 16:56.550
E a maneira mais fácil é simplesmente examinar esse banco de dados.

16:57.150 --> 16:59.700
Portanto, dados, dados.

17:03.480 --> 17:05.190
Um, bancos de dados.

17:07.250 --> 17:08.300
Sim, deveria ser.

17:08.300 --> 17:11.120
É uma cabra, eu acho.

17:14.180 --> 17:14.720
Sim.

17:14.720 --> 17:15.470
Está bem.

17:15.590 --> 17:18.050
Assim, podemos ver que temos.

17:19.020 --> 17:22.950
Quero dizer, essa não é a maneira ideal de ver esse caso, mas tudo bem.

17:22.950 --> 17:25.830
Podemos ver que temos um ID do tipo inteiro.

17:25.830 --> 17:27.240
Essa é a chave primária.

17:27.270 --> 17:30.450
Temos o nome de usuário e a senha, e é isso, tudo bem.

17:30.450 --> 17:38.310
Portanto, normalmente você faria o download e o abriria com um navegador SQL Lite ou com uma ferramenta de linha de comando

17:38.310 --> 17:38.970
SQL Lite.

17:38.970 --> 17:43.050
Teremos isso se dermos uma olhada no armazenamento inseguro de dados mais uma vez.

17:43.050 --> 17:46.440
Mas eu só estava interessado em uma senha e um nome de usuário.

17:47.490 --> 17:52.380
Portanto, nesse caso, o que faríamos seria um onde o nome de usuário.

17:54.700 --> 17:55.330
É isso.

17:55.330 --> 17:57.670
E então vamos ver.

17:58.540 --> 18:00.460
Usaríamos um sindicato.

18:00.850 --> 18:02.020
Selecione.

18:03.570 --> 18:05.280
E então dizíamos.

18:07.420 --> 18:12.430
Temos três colunas, portanto, temos uma, duas, três.

18:13.240 --> 18:13.510
Está bem.

18:13.510 --> 18:17.620
Não tenho certeza se eles estão sendo exibidos aqui.

18:17.650 --> 18:18.070
Está bem.

18:18.070 --> 18:20.230
Antes que isso se torne muito complexo, vamos ver.

18:21.100 --> 18:22.810
Hum, sim.

18:24.510 --> 18:28.710
Union e selecione de 1 a 3.

18:31.400 --> 18:35.060
Sim, podemos ver que agora temos as colunas dois e três.

18:36.140 --> 18:37.700
Em nossa mensagem de brinde.

18:37.700 --> 18:42.890
E essas colunas dois e três são o nosso nome de usuário e a nossa coluna de senha.

18:42.890 --> 18:48.590
Portanto, nosso banco de dados se parece com o nome de usuário e a senha do ID.

18:49.010 --> 18:53.330
E agora vamos analisar a abordagem típica de injeção de SQL.

18:53.330 --> 18:56.540
Portanto, agora descobrimos quantas colunas estão sendo usadas.

18:56.540 --> 18:57.980
Mas podemos dar uma olhada nisso.

18:57.980 --> 19:01.250
Temos essa estrela selecionada, desculpe Asterix.

19:01.250 --> 19:03.710
Isso significa que estamos selecionando todas as colunas.

19:04.670 --> 19:08.960
E, em nosso banco de dados, vimos que temos três colunas.

19:08.960 --> 19:11.240
Portanto, eu sabia que esses eram os três.

19:11.660 --> 19:18.380
E então, sim, agora podemos usar algumas técnicas de injeção de SQL para explorar isso.

19:18.380 --> 19:20.720
Portanto, poderíamos fazer isso dessa forma.

19:20.720 --> 19:24.260
Podemos dizer, hum, nos dê o.

19:26.580 --> 19:28.530
Uh groupconcat.

19:28.530 --> 19:30.090
Acho que isso também funciona aqui.

19:30.090 --> 19:41.610
Isso combina os primeiros 1024 caracteres do nome de usuário e, em seguida, 0X3A está na coluna com o caminho, uh, senha.

19:41.610 --> 19:47.430
E então, a partir da tabela, desculpe, o banco de dados era o de usuários, certo.

19:50.450 --> 19:50.930
Sim.

19:50.930 --> 19:51.260
Sim.

19:51.260 --> 19:51.920
Está bem.

19:53.640 --> 19:55.260
Então, vamos tentar.

19:56.250 --> 19:56.880
Eu sinto muito.

19:57.210 --> 19:58.860
Vamos tentar essa abordagem.

20:05.730 --> 20:06.690
Está bem.

20:06.750 --> 20:07.080
Um.

20:07.080 --> 20:09.210
Concatenação de grupos.

20:09.240 --> 20:10.620
Nome de usuário.

20:11.880 --> 20:15.780
Senha dos usuários.

20:16.170 --> 20:21.300
Portanto, o que a seleção de união faz é conectar a primeira consulta com a segunda.

20:21.300 --> 20:23.550
A primeira consulta não nos dá um resultado.

20:23.550 --> 20:30.030
E vimos os números dois e três, que são os números de consulta que temos aqui.

20:30.030 --> 20:36.270
Portanto, dentro do número dois, haverá agora, se isso funcionar, não tenho certeza, o nome de usuário com dois pontos

20:36.270 --> 20:39.930
e, em seguida, a senha, e o três permanecerá vazio, tudo bem.

20:39.930 --> 20:43.020
Vamos ver 3 para 1.

20:44.250 --> 20:46.020
Ok, temos um erro.

20:52.660 --> 20:53.110
Está bem.

20:53.110 --> 20:57.280
Vamos ver se podemos usar o Union Select com o Groupconcat.

21:01.990 --> 21:04.690
Vamos simplificar um pouco mais.

21:07.050 --> 21:09.390
Então, o e Union seleciona.

21:13.940 --> 21:17.870
Um, um grupo de gatos.

21:17.870 --> 21:19.820
Talvez possamos fazer isso desta forma.

21:21.500 --> 21:23.810
Vamos ver se conseguimos obter algum texto.

21:23.810 --> 21:24.260
Está bem.

21:24.260 --> 21:25.910
Podemos obter algum texto.

21:26.240 --> 21:28.040
Podemos conseguir um pouco?

21:29.270 --> 21:33.110
As informações do banco de dados, por exemplo, podem ser usadas na função de versão.

21:34.190 --> 21:36.860
Não, ele não pode usar a função de versão.

21:39.080 --> 21:41.030
Ah, não posso usar anúncios.

21:41.060 --> 21:41.660
Está bem.

21:41.660 --> 21:42.770
Isso é estranho.

21:44.090 --> 21:46.550
Talvez possamos encontrar uma solução alternativa.

21:51.560 --> 21:52.760
Essa parte funciona?

21:55.590 --> 21:56.310
Não.

21:56.670 --> 21:57.510
Está bem.

21:57.930 --> 21:58.680
Um.

22:01.540 --> 22:02.950
Isso funciona?

22:05.060 --> 22:05.990
Sim.

22:05.990 --> 22:12.020
Portanto, podemos ver que agora temos o Admin e o Android em nosso.

22:13.440 --> 22:14.160
Saída.

22:14.160 --> 22:15.120
Segunda coluna.

22:15.180 --> 22:15.960
Está bem.

22:17.080 --> 22:22.930
Portanto, se aplicarmos uma senha, vamos ver se isso funciona.

22:23.770 --> 22:24.460
Sim.

22:24.460 --> 22:26.290
Mas agora não temos um separador.

22:26.290 --> 22:30.310
Portanto, precisamos de um separador para ver a diferença.

22:32.860 --> 22:35.320
Sim.

22:35.320 --> 22:40.210
É claro que não podemos usar aspas simples porque isso bagunçaria nossa sintaxe.

22:40.210 --> 22:41.350
Vamos fazer dessa forma.

22:43.600 --> 22:45.850
Isso também bagunça nossa sintaxe.

22:46.920 --> 22:47.610
Está bem.

22:50.030 --> 22:51.830
O Hex também não funciona.

22:53.470 --> 22:56.620
Então, sugiro que façamos desta forma.

22:59.820 --> 23:03.270
Senha do Groupconcat.

23:03.300 --> 23:08.730
Então, o que acontece agora é o seguinte.

23:17.490 --> 23:20.640
Hum, este não está sendo exibido.

23:23.170 --> 23:26.020
Portanto, não estamos vendo a coluna número um.

23:28.330 --> 23:30.100
Hum, mas estamos vendo a coluna número dois.

23:30.130 --> 23:37.780
A coluna número dois fornece agora todos os nomes de usuário do banco de dados dentro dos primeiros 1024 caracteres.

23:37.780 --> 23:41.080
E a coluna número três devolve todas as senhas.

23:41.080 --> 23:42.340
Então, vamos ver se isso funciona.

23:42.340 --> 23:43.630
Acho que isso deve funcionar.

23:43.720 --> 23:44.710
321.

23:45.670 --> 23:46.330
Sim.

23:46.330 --> 23:46.960
Está bem.

23:46.960 --> 23:51.850
Portanto, é assim que podemos extrair esses dados desse banco de dados.

23:51.850 --> 23:58.750
E essa abordagem é muito mais segura do que a abordagem "ou igual" ou "um igual a um".

23:58.750 --> 24:04.300
Mas se você estiver em um dispositivo local com um banco de dados que possa ser facilmente restaurado, não haverá problema

24:04.300 --> 24:05.020
algum.

24:05.200 --> 24:11.140
Se você quiser ter um vídeo separado sobre injeção de SQL, porque agora eu joguei todas

24:11.140 --> 24:13.840
essas coisas contra você, me avise.

24:13.840 --> 24:19.720
Mas acho que essa técnica já existe há uns 15 ou 18 anos.

24:19.720 --> 24:24.940
Portanto, você encontrará muitas informações na Internet sobre como explorar isso.

24:25.270 --> 24:26.050
Está bem.

24:26.050 --> 24:28.270
Portanto, este também.

24:29.130 --> 24:30.840
Validação de entrada WebView.

24:30.870 --> 24:32.070
O que temos aqui?

24:33.270 --> 24:35.940
Acessar informações confidenciais usando URL.

24:36.030 --> 24:37.200
Além do WebView.

24:37.200 --> 24:38.460
Entender quais são as configurações.

24:38.640 --> 24:44.370
O que eu realmente gosto nesses desafios são os objetivos dados pelo autor que conhecemos.

24:44.370 --> 24:46.260
Qual é o contexto desse caso?

24:46.260 --> 24:48.900
Por isso, um grande elogio em relação a ele.

24:51.080 --> 24:59.030
Ok, então temos talvez um URL que pode ser definido por nós e definimos um acesso baixo a arquivos.

24:59.900 --> 25:03.290
Esses dois, em combinação com o WebView, são perigosos.

25:03.290 --> 25:04.760
Então vamos ver.

25:04.760 --> 25:06.560
Validação de entrada WebView.

25:06.590 --> 25:07.700
O que foi isso?

25:09.770 --> 25:10.160
Está bem.

25:10.160 --> 25:11.420
Validação de entrada WebView.

25:11.420 --> 25:12.170
Vejamos.

25:15.910 --> 25:16.930
Um.

25:23.770 --> 25:25.930
Acho que é este aqui.

25:30.860 --> 25:33.320
URL da visualização da Web de validação de entrada.

25:33.350 --> 25:34.880
Certo, acho que é este aqui.

25:34.880 --> 25:36.620
Então, vamos ver o que temos aqui.

25:36.620 --> 25:40.430
Temos nosso método Oncreate.

25:41.000 --> 25:42.530
Temos nossa visualização da Web.

25:42.830 --> 25:49.730
Temos nosso URL que é recuperado deste campo de texto aqui.

25:52.720 --> 25:54.070
E.

25:56.010 --> 25:59.520
Você definiu as configurações da Web como JavaScript ativado.

25:59.520 --> 26:01.830
Então também temos, eu acho.

26:03.060 --> 26:03.510
Sim.

26:03.510 --> 26:06.090
Você também tem nossa vulnerabilidade de script entre sites.

26:06.120 --> 26:08.370
Aqui também temos um redirecionamento aberto.

26:08.370 --> 26:11.430
Portanto, podemos ou parece que podemos definir o URL.

26:12.390 --> 26:14.610
E depois temos o URL de carregamento.

26:14.640 --> 26:15.450
Está bem.

26:19.630 --> 26:20.230
Sim.

26:20.560 --> 26:22.420
É isso aí.

26:24.970 --> 26:25.840
Está bem.

26:26.110 --> 26:32.650
Vamos ver se digitamos https no Google. com.

26:35.500 --> 26:36.040
Sim.

26:36.040 --> 26:39.220
Em seguida, a página da Web está sendo exibida aqui.

26:39.250 --> 26:45.130
O autor menciona que definimos a permissão de acesso a arquivos.

26:45.130 --> 26:48.370
Eu não vi isso aqui, então talvez eu esteja errado.

26:52.650 --> 26:57.780
Aqui podemos ver as configurações da Web do Android definidas para permitir o acesso a arquivos.

26:57.780 --> 26:59.490
Temos essa bandeira aqui.

27:01.240 --> 27:05.170
Não está aqui, o que é interessante, mas pode não estar.

27:08.410 --> 27:09.580
Necessário.

27:10.850 --> 27:13.880
Quero dizer, este é do código QL.

27:13.970 --> 27:14.960
Portanto.

27:14.960 --> 27:15.650
Está bem.

27:16.960 --> 27:18.250
Interessante.

27:19.000 --> 27:21.100
Vamos resolver isso.

27:22.030 --> 27:26.740
Então, acho que o objetivo desse desafio é o seguinte.

27:27.040 --> 27:35.230
Se tivermos um arquivo, por exemplo, este aqui, e estivermos abrindo-o, poderemos ver que obtivemos

27:35.230 --> 27:37.450
o URL do arquivo aqui.

27:38.230 --> 27:40.150
Ele não está sendo exibido.

27:42.660 --> 27:43.380
Aqui está.

27:43.380 --> 27:44.010
Está bem.

27:44.070 --> 27:54.510
Portanto, isso significa que podemos usar um esquema de URL para acessar arquivos locais fornecendo dois pontos e vírgula, barra e barra de arquivo.

27:54.510 --> 27:55.710
São três barras.

27:55.710 --> 27:57.330
E, em seguida, o caminho do arquivo.

27:57.420 --> 28:02.730
Portanto, se agora você tiver essa visualização da Web aqui e pudermos definir o URL.

28:02.730 --> 28:10.800
E a URL não está filtrando em relação a Http e Https, podemos fornecer nossos próprios esquemas, o que significa

28:10.800 --> 28:14.520
que também podemos usar esse esquema de arquivo.

28:14.970 --> 28:16.800
Portanto, três barras.

28:17.220 --> 28:20.910
Estamos agora no contexto deste aplicativo.

28:20.910 --> 28:27.480
Isso significa que, se tivermos acesso ao cartão SD de armazenamento externo, leitura e gravação, poderemos acessar esses

28:27.480 --> 28:28.080
arquivos.

28:28.080 --> 28:32.580
Mas o mais importante é que também podemos acessar nossos arquivos internos.

28:32.580 --> 28:34.410
Então, vamos dar uma olhada.

28:39.180 --> 28:39.450
Um.

28:39.450 --> 28:39.960
Dados.

28:39.960 --> 28:40.860
Dados.

28:46.430 --> 28:47.300
Bancos de dados próprios?

28:47.300 --> 28:48.050
Talvez.

28:49.100 --> 28:50.570
Sim, podemos usar esse banco de dados.

28:50.570 --> 28:51.920
Acho que criamos.

28:51.920 --> 28:52.640
Está bem.

28:52.940 --> 28:55.700
Portanto, esse é um diretório protegido.

28:55.700 --> 29:01.640
Mas estamos no contexto do aplicativo, o que significa que ele não está protegido para esse aplicativo, porque

29:01.640 --> 29:03.950
esse é o armazenamento desse aplicativo.

29:03.950 --> 29:20.930
Portanto, ao fornecer o nome do arquivo, como dados de dados de desculpas ou bancos de dados de ouro Rasp e, em seguida, uma cabra, tudo bem.

29:20.930 --> 29:25.310
Devemos poder acessar esse arquivo e ele deve ser exibido aqui.

29:25.370 --> 29:27.320
E vamos ver 3 para 1.

29:32.360 --> 29:32.600
O quê?

29:33.850 --> 29:37.270
Recebemos um erro, não recebemos nada.

29:38.100 --> 29:46.800
Ok, então vamos tentar outra coisa e ver se podemos adicionar esse arquivo de texto simples, porque ele pode estar relacionado

29:46.800 --> 29:49.890
aos dados binários que recebe.

29:49.890 --> 29:50.460
Sim.

29:50.460 --> 29:51.900
O formato dos tijolos.

29:52.080 --> 29:54.120
Hum, esse processo de carregamento aqui.

29:54.640 --> 29:58.870
Portanto, agora criamos um arquivo de texto de teste.

30:02.200 --> 30:03.250
O que é isso.

30:03.250 --> 30:03.850
Sim, tudo bem.

30:03.850 --> 30:09.070
Também precisamos solicitar um usuário para esse caso.

30:16.810 --> 30:17.680
Está bem.

30:19.170 --> 30:21.990
E também fazemos isso.

30:26.520 --> 30:29.490
Não são legíveis para o mundo externo.

30:30.900 --> 30:36.300
Então, o usuário tem todas as permissões, mas ninguém mais pode acessá-lo.

30:36.900 --> 30:38.670
Vamos ver se isso funciona.

30:38.910 --> 30:39.180
Um.

30:43.220 --> 30:44.120
Sim, tudo bem.

30:44.120 --> 30:44.660
Perfeito.

30:44.660 --> 30:48.620
Portanto, podemos ver que ele geralmente funciona com três barras.

30:48.620 --> 30:48.830
Sim.

30:48.830 --> 30:49.490
Faz sentido.

30:49.490 --> 30:50.300
Está bem.

30:50.780 --> 30:53.720
Infelizmente, não podemos carregar dados binários.

30:53.960 --> 31:00.470
Temos isso em nosso banco de dados aqui, mas talvez possamos ver as preferências compartilhadas.

31:01.220 --> 31:03.440
Ok, acho que não é isso.

31:04.610 --> 31:07.010
Sim, isso não é interessante.

31:07.430 --> 31:07.880
Um.

31:10.500 --> 31:12.600
No entanto, vamos tentar fazer isso.

31:13.290 --> 31:14.370
Portanto.

31:17.020 --> 31:18.940
Prefs compartilhados.

31:18.940 --> 31:20.050
E depois.

31:25.840 --> 31:26.740
Este aqui.

31:27.310 --> 31:27.670
Três.

31:27.670 --> 31:27.790
Dois.

31:27.790 --> 31:28.300
Um.

31:29.620 --> 31:30.100
Sim.

31:30.100 --> 31:30.640
Está bem.

31:30.640 --> 31:38.020
Portanto, se tivermos dados confidenciais em nossas preferências compartilhadas, poderemos carregá-los pelo URL aqui.

31:39.400 --> 31:47.320
Quero dizer, com relação ao cenário de ataque do mundo real, se for dentro do próprio aplicativo, tudo bem.

31:47.530 --> 31:53.890
Mas seria muito melhor se você estivesse fazendo alguma recompensa por bugs, se pudesse acionar isso por

31:53.890 --> 32:00.430
meio de um aplicativo externo, por exemplo, por meio de um link profundo que é passado para o aplicativo ou, por

32:00.430 --> 32:07.540
exemplo, sim, por meio do URL, hum, parâmetro com a abordagem de arquivo, se isso não estiver sendo filtrado, que você

32:07.540 --> 32:13.090
busque essas informações e as obtenha de volta em seu próprio aplicativo, hum, que você provou

32:13.090 --> 32:17.560
que pode ler os dados confidenciais de um aplicativo externo.

32:17.590 --> 32:18.340
Muito bem.

32:18.760 --> 32:19.510
Está bem.

32:20.320 --> 32:22.360
Vamos dar uma olhada rápida.

32:24.070 --> 32:27.580
Temos um armazenamento de dados inseguro e vimos preferências compartilhadas.

32:27.580 --> 32:30.130
Então, talvez possamos criar um exemplo.

32:32.310 --> 32:32.820
Está bem.

32:32.820 --> 32:33.780
Vejamos.

32:33.870 --> 32:38.040
Curso de administração do Android.

32:40.220 --> 32:41.810
Dados salvos.

32:42.440 --> 32:43.220
Está bem.

32:43.220 --> 32:46.280
Portanto, temos agora o.

32:47.800 --> 32:49.270
Senha e nome de usuário.

32:50.380 --> 32:52.840
Nesse XML de usuário de Preferências compartilhadas.

32:52.840 --> 32:54.130
Vamos voltar.

32:55.620 --> 32:57.660
E vamos executá-lo mais uma vez.

32:57.660 --> 33:00.090
Validação de entrada WebView.

33:00.810 --> 33:01.560
Está bem.

33:01.740 --> 33:02.250
Um.

33:06.470 --> 33:10.520
Arquivo de texto de entrada, duas barras.

33:10.520 --> 33:15.380
Em seguida, esse caminho que faz três e usa XML.

33:18.500 --> 33:18.950
Está bem.

33:18.950 --> 33:19.880
3 para 1.

33:20.480 --> 33:21.020
Sim.

33:21.020 --> 33:21.470
Perfeito.

33:21.470 --> 33:24.320
Portanto, os dados XML são fáceis de visualizar aqui.

33:24.350 --> 33:24.920
Muito bem.

33:25.490 --> 33:31.610
Em seguida, sugiro que continuemos com o armazenamento inseguro de dados, mas em um vídeo separado.

33:32.210 --> 33:37.550
Se você tiver dúvidas sobre exibições na Web, injeções de SQL e coisas desse tipo, entre em contato comigo.

33:37.550 --> 33:43.160
Mas sim, haverá também um vídeo adicional sobre Web Views que aborda todos esses

33:43.160 --> 33:44.540
truques e desvios.

33:44.540 --> 33:52.310
Com relação ao armazenamento de dados, eu não consideraria esse tipo de armazenamento inseguro porque, mesmo que você

33:52.310 --> 33:59.180
criptografe seus dados, a chave estará disponível localmente e, portanto, você não terá nenhuma vantagem

33:59.180 --> 34:00.470
com isso.

34:00.470 --> 34:04.310
Mas isso é algo que descobriremos no próximo vídeo.

34:04.340 --> 34:06.530
Talvez uma pequena nota final.

34:06.560 --> 34:13.670
Você pode fazer isso melhor se tiver um dispositivo com suporte de ambiente não confiável e, em seguida, usar o Android Keystore

34:13.670 --> 34:16.400
para armazenar seus dados com segurança.

34:16.430 --> 34:17.120
Está bem.

34:17.120 --> 34:19.910
E mais sobre isso no próximo vídeo.

34:19.910 --> 34:22.280
Portanto, estou ansioso para vê-lo lá.
