伺服器端請求偽造或SSRF是一個漏洞,攻擊者在其中迫使伺服器代其執行請求。
什麼是SSRF?
伺服器端請求偽造(Server-Side Request Forgery, SSRF)是一種網路安全漏洞,攻擊者可以利用此漏洞,誘使伺服器端應用程式向攻擊者指定的任意網域發出 HTTP 請求。
在典型的 SSRF 攻擊中,攻擊者可以讓伺服器連接到內部網路中的服務,這些服務通常只對內部開放。在其他情況下,攻擊者也可能強迫伺服器連接到外部系統,進而洩露敏感資訊,例如授權憑證。
簡而言之,SSRF 是 Web 應用程式中的一種漏洞,攻擊者可利用此漏洞透過伺服器發出額外的 HTTP 請求,進而與位於伺服器內部網路、通常受到防火牆保護的內部服務進行溝通。
怎麼產生漏洞?
造成漏洞的主要原因是(通常是)盲目地信任用戶的輸入。對於SSRF 漏洞,將要求用戶輸入URL(或IP地址)。Web應用程序將使用它來發出 請求。如果未正確檢查或過濾輸入,就會出現SSRF。
from flask import Flask, request, render_template, redirect
import requests
app = Flask(__name__)
@app.route("/")
def index():
url = request.args.get("id")
r = requests.head(url)
return render_template("index.html", result = r.content)
if __name__ == "__main__":
app.run(host = '0.0.0.0')
很明顯地說,我把用戶傳來的網址儲存成id後,直接顯示在index.html,而且沒有對url做過濾,就有可能注入非正常連結的東西進去了~
工具利用
SSRFmap
SSRF通常用於利用對其他服務的操作,此框架旨在輕鬆查找和利用這些服務。SSRFmap將Burp請求文件作為輸入和fuzz的參數。
https://github.com/swisskyrepo/SSRFmap
操作步驟
$ git clone https://github.com/swisskyrepo/SSRFmap
$ cd SSRFmap/
$ pip3 install -r requirements.txt
$ python3 ssrfmap.py
usage: ssrfmap.py [-h] [-r REQFILE] [-p PARAM] [-m MODULES] [-l HANDLER]
[-v [VERBOSE]] [--lhost LHOST] [--lport LPORT]
[--uagent USERAGENT] [--ssl [SSL]] [--level [LEVEL]]
optional arguments:
-h, --help show this help message and exit
-r REQFILE SSRF Request file
-p PARAM SSRF Parameter to target
-m MODULES SSRF Modules to enable
-l HANDLER Start an handler for a reverse shell
-v [VERBOSE] Enable verbosity
--lhost LHOST LHOST reverse shell
--lport LPORT LPORT reverse shell
--uagent USERAGENT User Agent to use
--ssl [SSL] Use HTTPS without verification
--level [LEVEL] Level of test to perform (1-5, default: 1)
他有很多模組可以使用
Name | Description |
---|---|
fastcgi | FastCGI RCE |
redis | Redis RCE |
github | Github Enterprise RCE < 2.8.7 |
zabbix | Zabbix RCE |
mysql | MySQL Command execution |
docker | Docker Infoleaks via API |
smtp | SMTP send mail |
portscan | Scan top 8000 ports for the host |
networkscan | HTTP Ping sweep over the network |
readfiles | Read files such as /etc/passwd |
alibaba | Read files from the provider (e.g: meta-data, user-data) |
aws | Read files from the provider (e.g: meta-data, user-data) |
gce | Read files from the provider (e.g: meta-data, user-data) |
digitalocean | Read files from the provider (e.g: meta-data, user-data) |
socksproxy | SOCKS4 Proxy |
smbhash | Force an SMB authentication via a UNC Path |
tomcat | Bruteforce attack against Tomcat Manager |
custom | Send custom data to a listening service, e.g: netcat |
memcache | Store data inside the memcache instance |
練習網站
https://github.com/m6a-UdS/ssrf-lab
更詳細的說明資源:
https://ithelp.ithome.com.tw/articles/10242449
https://hackmd.io/@Lhaihai/H1B8PJ9hX