mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-18 09:03:30 +00:00
Translated ['binary-exploitation/format-strings/README.md'] to pt
This commit is contained in:
parent
a7d8d16d1b
commit
5466de6cc7
1 changed files with 10 additions and 10 deletions
|
@ -21,7 +21,7 @@ Em C **`printf`** é uma função que pode ser usada para **imprimir** alguma st
|
|||
|
||||
Outras funções vulneráveis são **`sprintf()`** e **`fprintf()`**.
|
||||
|
||||
A vulnerabilidade aparece quando um **texto de atacante é usado como o primeiro argumento** para essa função. O atacante será capaz de criar uma **entrada especial abusando** das capacidades da **string de formato printf** para ler e **escrever qualquer dado em qualquer endereço (legível/gratável)**. Sendo capaz assim de **executar código arbitrário**.
|
||||
A vulnerabilidade aparece quando um **texto de atacante é usado como o primeiro argumento** para essa função. O atacante será capaz de criar uma **entrada especial abusando** das capacidades da **string de formato printf** para ler e **escrever qualquer dado em qualquer endereço (legível/escrevível)**. Sendo capaz assim de **executar código arbitrário**.
|
||||
|
||||
#### Formatters:
|
||||
```bash
|
||||
|
@ -74,7 +74,7 @@ e você leria do primeiro ao quarto parâmetro.
|
|||
|
||||
Ou você poderia fazer:
|
||||
```c
|
||||
printf("$4%x")
|
||||
printf("%4$x")
|
||||
```
|
||||
e ler diretamente o quarto.
|
||||
|
||||
|
@ -86,7 +86,7 @@ Um atacante controlando essa entrada, será capaz de **adicionar endereços arbi
|
|||
|
||||
## **Leitura Arbitrária**
|
||||
|
||||
É possível usar o formatador **`%n$s`** para fazer **`printf`** obter o **endereço** situado na **n posição**, seguindo-o e **imprimí-lo como se fosse uma string** (imprimir até que um 0x00 seja encontrado). Então, se o endereço base do binário é **`0x8048000`**, e sabemos que a entrada do usuário começa na 4ª posição na pilha, é possível imprimir o início do binário com:
|
||||
É possível usar o formatador **`%n$s`** para fazer **`printf`** obter o **endereço** situado na **n posição**, seguindo-o e **imprimí-lo como se fosse uma string** (imprimir até que um 0x00 seja encontrado). Então, se o endereço base do binário for **`0x8048000`**, e sabemos que a entrada do usuário começa na 4ª posição na pilha, é possível imprimir o início do binário com:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -151,7 +151,7 @@ Leituras arbitrárias podem ser úteis para:
|
|||
|
||||
O formatador **`$<num>%n`** **escreve** o **número de bytes escritos** no **endereço indicado** no parâmetro \<num> na pilha. Se um atacante puder escrever quantos caracteres quiser com printf, ele será capaz de fazer **`$<num>%n`** escrever um número arbitrário em um endereço arbitrário.
|
||||
|
||||
Felizmente, para escrever o número 9999, não é necessário adicionar 9999 "A"s à entrada, para fazer isso é possível usar o formatador **`%.<num-write>%<num>$n`** para escrever o número **`<num-write>`** no **endereço apontado pela posição `num`**.
|
||||
Felizmente, para escrever o número 9999, não é necessário adicionar 9999 "A"s à entrada; para isso, é possível usar o formatador **`%.<num-write>%<num>$n`** para escrever o número **`<num-write>`** no **endereço apontado pela posição `num`**.
|
||||
```bash
|
||||
AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param
|
||||
AAAA.%500\$08x —> Param at offset 500
|
||||
|
@ -172,7 +172,7 @@ Como mencionado, para escrever o endereço, geralmente são necessários 2 passo
|
|||
* **HOB** é chamado para os 2 bytes mais altos do endereço
|
||||
* **LOB** é chamado para os 2 bytes mais baixos do endereço
|
||||
|
||||
Então, devido a como a string de formato funciona, você precisa **escrever primeiro o menor** de \[HOB, LOB] e depois o outro.
|
||||
Então, por causa de como a string de formato funciona, você precisa **escrever primeiro o menor** de \[HOB, LOB] e depois o outro.
|
||||
|
||||
Se HOB < LOB\
|
||||
`[address+2][address]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]`
|
||||
|
@ -232,16 +232,16 @@ p.interactive()
|
|||
* 32 bits, relro, sem canário, nx, sem pie, format string para escrever um endereço dentro de main em `.fini_array` (para que o fluxo retorne mais uma vez) e escrever o endereço para `system` na tabela GOT apontando para `strlen`. Quando o fluxo voltar para main, `strlen` é executado com a entrada do usuário e apontando para `system`, ele executará os comandos passados.
|
||||
|
||||
{% hint style="success" %}
|
||||
Aprenda e pratique Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
|
||||
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
Loading…
Reference in a new issue