SSRF介紹
SSRF(Server-Side Request Forgery:服務器端請求偽造) 是一種由攻擊者構造形成由服務端發起請求的一個安全漏洞。一般情況下,SSRF攻擊的目標是從外網無法訪問的內部系統。(正是因為它是由服務端發起的,所以它能夠請求到與它相連而與外網隔離的內部系統)。SSRF 形成的原因大都是由於服務端提供了從其他服務器應用獲取數據的功能且沒有對目標地址做過濾與限制。
SSRF作用
對外網服務器所在的內網、本地進行端口掃描,獲取一些服務的banner信息 。
攻擊運行在內網或者本地的應用程序。
對內網web應用進行指紋識別,通過訪問默認文件實現 。
攻擊內外網的web應用。sql注入、struct2、redis等。
利用file協議讀取本地文件等。
SSRF產生
在該案例中,profilepics參數從請求中獲取輸入數據,並沒有進行任何的過濾和處理,所以可以直接構造payload:http://xxx.com/profilepics?url=file:///etc/passwd.進行讀取文件內容的操作。
@GetMapping("/profilepics")
public void openStream(@RequestParam String url, HttpServletResponse response)
throws IOException {
InputStream inputStream = null;
OutputStream outputStream = null;
String downLoadImgFileName =
WebUtils.getNameWithoutExtension(url) + "." + WebUtils.getFileExtension(url);
// download
response.setHeader(
"content-disposition",
"attachment;fileName=" + downLoadImgFileName);
URL u = new URL(url);
int length;
byte[] bytes = new byte[1024];
inputStream = u.openStream(); // send request
outputStream = response.getOutputStream();
while ((length = inputStream.read(bytes)) > 0) {
outputStream.write(bytes, 0, length);
}
}
SSRF防御
RASP技術
RASP(Runtime Application Self Protection)是一種現代應用程序安全技術,可以用來防止sql注入、xss、ssrf、反序列化等漏洞的攻擊。waf的防御基於流量規則,而RASP技術防御是根據請求上下文進行攔截的。
Java是通過Java Agent方式進行實現,Java Agent有三種機制,分別是Agent_OnLoad、Agent_OnAttach、Agent_OnUnload。
參考:https://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html#startup
https://www.iteye.com/blog/nijiaben-1847212
后端代碼進行限制
- 限制協議為HTTP、HTTPS協議。例如使用HttpURLConnection強制轉換協議為http或https。
- 禁止URL傳入內網IP或者設置URL白名單。例如設置百度,谷歌等域名。
- 不用限制302重定向。
CVE-2017-3164
Apache Solr的ssrf漏洞,沒有經過任何過濾就直接把url代入執行了。讓我們來跟進下漏洞的細節。
從漏洞的poc中可以看出,入口點在replication。在這里是org/apache/solr/handler/ReplicationHandler.java的handleRequestBody方法的run方法
跟進doFetch方法
可以看到,該方法設置了一個masterUrl變量,該變量在后續的代碼中沒有進行任何的過濾,最終導致了ssrf的產生。讓我們接着看fetchLastestIndex方法。
返回兩個參數的fetchLastestIndex方法。
在這里的重點是getLatestVersion方法。
把我們傳入的masterUrl變量沒經過過濾就執行了,導致漏洞產生。
https://blog.csdn.net/qq_30135181/article/details/52734225
https://www.cnblogs.com/nice0e3/p/13682434.html
https://hdivsecurity.com/bornsecure/what-is-rasp-runtime-application-self-protection/