1.总结CSRF和XSS区别
1)CSRF是跨站请求伪造; XSS是跨域脚本攻击。
2)XSS 允许攻击者在受害者的浏览器上执行js代码;而CSRF 不行。
3)XSS 通过窃取受害者的cookie 来实现账号接管,如果目标站点使用了httponly 这就行不通了:CSRF 通过浏览器发起请求,自动携带受害者的cookie信息,即使有 httponly也不影响CSRF 攻击的实现。
4)XSS 的危害更大。攻击者如果成功实现了XSS 攻击,那通常意味着他可以使用受害者在这个网站的所有功能,而CSRF只限于特定的存在漏洞的功能。
5)CSRF 无法让攻击者获取到服务器返回的数据,由于请求是由受害者的浏览器发起的,那么服务器的响应最后还是给到了受害者那里,攻击者是拿不到这部分数据的,所以对于一些查询类功能,即便没有做任何防御CSRF的措施,它也几乎是没有利用价值的;而 XSS 由于可以执行is代码,这也就使得攻击者可以将它想要的数据发送到自己的服务器上,比如前面XSS章中提到的回传cookie。
2.总结CSRF攻击步骤
CSRF(跨站请求伪造)攻击的步骤通常包括以下几个关键环节:
1)用户认证:
用户在受信任的网站(如银行、社交媒体等)上进行登录,服务器为用户创建会话并存储身份验证信息(如Cookie)。
2)攻击者准备恶意请求:
攻击者创建一个恶意网站或页面,其中包含指向受信任网站的请求(如表单提交、链接等),这些请求会在用户不知情的情况下执行。
3)诱导用户访问恶意网站:
攻击者通过社交工程手段(如发送钓鱼邮件、社交媒体链接等)诱使用户访问其恶意网站。
4)用户触发请求:
当用户在恶意网站上执行某个操作(如点击链接、提交表单等)时,浏览器会自动附带用户的身份验证信息(如Cookie),向受信任网站发送请求。
5)受信任网站处理请求:
受信任网站接收到请求后,认为这是来自已认证用户的合法请求,执行相应的操作(如转账、修改账户信息等)。
6)攻击成功:
用户在不知情的情况下,受信任网站执行了攻击者预设的操作,导致潜在的损失或信息泄露。
通过以上步骤,CSRF攻击能够利用用户的身份进行未授权的操作,因此防范措施(如CSRF令牌)显得尤为重要。
3.总结CSRF手工构造POST型页面方法
1)分析目标网站的POST请求
首先需要对目标网站进行分析,了解哪些操作是通过POST请求进行的,并捕获这些请求的详细信息。这通常需要使用到浏览器开发者工具(如Chrome的DevTools)或网络抓包工具(如Burp Suite)来捕获和分析HTTP请求。
2)构造HTML表单
根据分析得到的目标网站的POST请求信息,构造一个HTML表单。表单的action属性应设置为目标网站的URL,method属性应设置为POST。表单内部应包含与目标POST请求相匹配的输入字段(如input标签),并预设好攻击者希望提交的数据。
3)隐藏表单元素
为了增加欺骗性,可以将表单中的输入字段(如用户名、密码等)设置为hidden类型,这样用户就看不到这些字段,但表单提交时仍会包含这些数据。
4)诱骗用户点击
将构造好的HTML页面发布到恶意网站上,或通过电子邮件、社交媒体等方式发送给目标用户。诱骗用户点击表单中的提交按钮,用户一旦点击,就会在不知情的情况下向目标网站发送包含恶意数据的POST请求。
5)监控攻击效果
攻击者可以通过查看目标网站的响应或用户账户的变化来监控攻击效果。如果攻击成功,目标网站可能会执行攻击者预设的操作,如转账、更改用户信息等。
以下是一个实例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSRF Attack Page</title>
</head>
<body>
<h1>CSRF Attack Page</h1>
<form id="csrfForm" action="https://victim-site.com/change-password" method="post">
<input type="hidden" name="new-password" value="hacker-password">
<!-- Add any other necessary hidden fields here -->
</form>
<script>
// Automatically submit the form when the page loads
document.getElementById('csrfForm').submit();
</script>
</body>
</html>
4.说明token类CSRF利用方法
1)XSS(跨站脚本)攻击:
攻击者可以利用XSS漏洞在受害者的浏览器中注入恶意脚本。这些脚本可以读取或修改Token(如果Token存储在DOM中),或者在用户不知情的情况下提交包含有效Token的请求。
2)Token泄露:
如果Token被泄露到日志、网络传输或第三方服务中,攻击者可能会利用这些泄露的Token来构造CSRF攻击。
3)Token预测:
对于某些简单的Token生成算法,攻击者可能能够通过预测算法来生成有效的Token。
4)绕过Token验证逻辑:
如果服务器端的Token验证逻辑存在漏洞,如验证不严格或存在绕过逻辑的路径,攻击者可能会绕过Token验证。
5)浏览器插件或扩展:
恶意的浏览器插件或扩展可以读取和修改HTTP请求,包括Token。
6)CSRF Token复用:
在某些情况下,如果用户在不同的请求中使用了相同的Token(尽管这通常不是设计上的预期),攻击者可能会捕获并重用该Token。
5.SSRF常用伪协议
1)file://:
用途:用于从文件系统中获取文件内容。
示例:file:///etc/passwd可以读取Linux系统中的用户密码文件;file:///proc/net/arp可以显示ARP缓存表,帮助发现内网中的其他主机。
说明:这是SSRF攻击中最简单也是最直接的利用方式之一,通过读取敏感文件来获取系统信息或用户数据。
2)dict://:
用途:字典服务协议,用于访问字典资源。
示例:dict://ip:6739/info:可以访问字典服务器上的信息。
说明:虽然dict协议主要用于查询词典或字典内容,但在SSRF攻击中,它也可以被用来进行端口扫描等操作。
3)ftp:// 和 sftp://:
用途:FTP(File Transfer Protocol,文件传输协议)和SFTP(SSH File Transfer Protocol,SSH文件传输协议)用于文件传输。
说明:在SSRF攻击中,这些协议可以用于尝试访问内部网络上的FTP或SFTP服务器,进而获取或修改文件。然而,由于FTP和SFTP通常需要认证,因此直接利用的难度较大。
4)ldap://:
用途:轻量级目录访问协议(Lightweight Directory Access Protocol),用于访问和维护分布式目录信息服务。
说明:在SSRF攻击中,ldap协议可以被用来尝试访问内部网络上的LDAP服务器,获取敏感信息如用户列表、组织结构等。
5.tftp://:
用途:简单文件传输协议(Trivial File Transfer Protocol),用于在不登录到远程计算机的情况下进行文件传输。
说明:虽然tftp协议的安全性较低,但在SSRF攻击中,它也可以被用来尝试访问内部网络上的TFTP服务器,下载或上传文件。
6)gopher://:
用途:分布式文档传递服务协议,早期互联网上的一种文档检索协议。
说明:gopher协议在SSRF攻击中非常强大,因为它可以用来构造复杂的HTTP请求,包括POST请求和包含特殊字符的请求。这使得gopher协议成为攻击者绕过防火墙和防护机制的有力工具。
7)http:// 和 https://:
用途:超文本传输协议(HyperText Transfer Protocol)和安全超文本传输协议(HyperText Transfer Protocol Secure),用于在Web上传输数据。
说明:虽然HTTP和HTTPS协议本身是安全的,但在SSRF攻击中,攻击者会利用服务器对URL的解析漏洞,构造恶意的HTTP或HTTPS请求来访问内部网络资源或执行其他恶意操作。
6.SSRF pikachu靶场通关
第一关:curl
1)打开链接发现是一首诗
查看网址发现当前页面是从url变量中引用进来的
2)尝试修改后面的网址,以百度为例:
3)改为读取本地文件
第二关:
1)打开网站
2)同上使用file协议访问本地文件
7.SSRF靶场通关时根据源代码说明漏洞成因
1)curl
可以看出服务端没有将传入的url进行校验,而是直接使用传入的url值,使用curl_exec()函数通过PHP对数据进行获取,并且输出返回,明显存在服务端请求伪造,没有对前端的URL进行白名单的过滤
漏洞成因:服务端对用户输入的URL缺乏有效过滤和验证,就可能允许恶意URL或IP地址的输入
2)file_get_content
漏洞成因:在file协议中没有过滤恶意文件路径或url,导致攻击者可以通过file协议进行内网请求或本地文件请求。