漏洞挖掘 | 点击劫持
点击劫持(X-Frame-Options未设置)
漏洞描述
点击劫持是一种视觉上的欺骗手段,攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户在不知情的情况下点击了透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上,攻击者常常配合社工手段完成攻击。如果Web应用服务器未设置X-Frame-Options,程序页面可能被嵌入到其他网页中,被恶意用户利用可能发起钓鱼攻击或欺骗其他用户。
风险等级
低
漏洞测试
直接访问Web应用根目录,然后抓包查看HTTP响应头中是否存在X-Frame-Options头信息。
Click-Jacking POC
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Click-Jacking</title>
</head>
<body>
<iframe src="http://www.xxx.com/" width="1000" height="1000" scrolling="no"></iframe>
</body>
</html>
漏洞危害
攻击者利用Frame框架可使网页嵌入到其他网站中,用于对其他用户进行欺骗或钓鱼攻击。
修复建议
X-Frame-Options需要在HTTP响应头中进行设置, X-Frame-Options 有三个可选的值:
- DENY:浏览器拒绝当前页面加载任何Frame页面;
- SAMEORIGIN:Frame页面的地址只能为同源域名下的页面;
- ALLOW-FROM:允许frame加载的页面地址。
Java代码在Filter拦截器的响应里面增加:
response.addHeader("x-frame-options","SAMEORIGIN");
Nginx添加如下配置到 “http”或“server” 或“location”的配置中:
add_header X-Frame-Options SAMEORIGIN
Apache配置:
Header always append X-Frame-Options SAMEORIGIN
IIS添加如下配置到Web.config中:
<system.webServer>
...
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="SAMEORIGIN" />
</customHeaders>
</httpProtocol>
...
</system.webServer>
每一个不曾起舞的日子
都是对生命的辜负