【漏洞】CSRF跨站请求伪造和SSRF服务端请求伪造
前言
CSRF跨站请求伪造和SSRF服务端请求伪造学习笔记
本文仅用于网络信息防御学习
CSRF跨站请求伪造(Cross-Site Request Forgery)
跨站请求伪造(英语:Cross-site request forgery),也被称为one-click attack或者session riding,通常缩写为CSRF或者XSRF,是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS利用的是用户对指定网站的信任,CSRF利用的是网站对用户网页浏览器的信任。(维基百科)
漏洞原理
- 当前客户端在被渗透网站处于已登录状态
- 被渗透网站允许跨站请求
- 攻击者知晓被渗透网站的请求结构,能构造出与被渗透网站相同结构的请求
- 受害者触发攻击者的代码,从而促使攻击者伪造客户的身份发出请求
漏洞利用
- 某网站的修改密码GET请求为
http://example.com/reset?new_password=123456
,此时可以创建一个以当前网站域名为文件名的网页文件example.com.html
,并在文件中将修改密码请求的URI作为<img>
标签的参数
文件名改为与当前网站同名是因为部分网站在接收请求时会检测请求中是否包含以当前网站域名的关键字,此时虽然伪造网站的域名不是与当前网站相同,但是如果当前网站源码中只做了检测是否包含关键字的代码进行验证,就依然能通过验证
更高级的请求需要分析原请求的结构进行伪造,此处只是给一个示例
1 | <img src="http://example.com/reset?new_password=123456"> |
- 此时进入这个网页的用户密码将被强制修改
防御
无效防御
- 使用Cookie进行身份认证,所有Cookie,即便是加密的Cookie,也会随着每个请求一起提交
- 仅接收POST请求,不仅仅是GET请求可以被伪造,POST依然可以被伪造,只需要在页面创建一个隐藏的表单即可构造POST请求
- 多步交易,多步交易不足以防御CSRF,只要攻击者可以完整预测整个事务的每个步骤,就可以实现CSRF
- URL重写,这可能被视为一种有用的CSRF防御技术,因为攻击者无法猜测受害者会话的ID。但是用户的会话ID通常在URL中公开,所以仍然可以被攻击者获取
- HTTPS,HTTPS本身无法防御CSRF,但是应该作为任何防御的先决条件
有效防御
- 验证请求头中的Referer,请求头中的Referer字段是请求发送者的源地址,通过验证源地址可以有效防御CSRF
- 添加Token认证,在请求中添加用户不能伪造的的信息
- 二次验证,在关键操作之前要求用户二次认证密码或验证码,有效防御CSRF
- 用户养成良好的上网习惯,不要随意点击链接或图片;及时退出长时间不使用的已登录账户;安装合适的防护软件
SSRF服务端请求伪造(Server-Side Request Forgery)
在计算机安全中,服务器端请求伪造(英语:Server-side Request Forgery,简称SSRF)是攻击者滥用服务器功能来访问或操作无法被直接访问的信息的方式之一。(维基百科)
漏洞原理
- 传递其他网络资源地址作为请求参数
- 服务器会通过curl向url发送请求
- 将请求得到的数据以文件的形式存储在当前目录下
- 将请求得到的数据回显在页面中
漏洞利用
HTTP协议Web应用指纹识别
<ip>
:服务器所在内网的其他IP地址<webapp>
:其他web应用的访问路径
1 | GET http://example.com/index.php?url=http://<ip>:<port>/<webapp> |
字典协议进行端口扫描
- 当端口开放的情况下,页面才会正常返回
<ip>
:服务器所在内网的其他IP地址<port>
:端口
1 | GET http://example.com/index.php?dict://<ip>:<port> |
File协议读取服务器文件
<file>
:服务器所在的本地资源路径
Windows
1 | http://example.com/index.php?file:///C:/<file> |
Linux
1 | http://example.com/index.php?file://<file> |
代码审计
- 项目中使用了
fopen
、file_get_contents
、file_put_contents
、fread
、fclose
等函数,可以读取服务器文件,但是这些函数的参数都是用户可控的,可以利用这些函数读取服务器文件
1 |
|
漏洞挖掘
- 从Web应用的功能上寻找,当Web服务中出现服务器需要发送请求来得到回显内容时,可能会出现SSRF漏洞
- 分享功能
- 转码功能
- 在线翻译
- 图片的加载与下载
- 收藏功能
- 未公开的API及其他调用URL的功能
- 从URL关键字中寻找
- share
- wap
- url
- link
- src
- source
- target
- u
- 3g
- display
- sourceURI
- imageURL
- domain
防御
- 限制协议,仅允许http和https协议的请求
- 限制请求的端口为常用的端口
- 限制IP,避免应用被用来获取内网数据
- 过滤返回信息,统一报错信息 ,避免用户可以根据报错判断服务器的端口状态,例如将所有不正常的页面都返回404
绕过
- 如果服务端做了域名正则过滤,可以使用
http://[email protected]
格式进行绕过,实际访问的地址为example.com
- 如果服务端做了IP地址正则过滤,可以将IP地址转换为其他进制