1.CSRF 和 XSS 的区别
CSRF:攻击者通过伪造请求利用受害者的身份执行操作。
XSS:攻击者通过注入恶意脚本在受害者的浏览器环境中执行操作。
2.CSRF攻击步骤
1. 攻击者寻找目标
- 选择目标网站:攻击者会选择那些存在CSRF漏洞且具有有价值功能的应用程序作为攻击目标,如银行网站、社交网络或其他涉及个人数据的服务。
- 确定目标功能:找到可以通过伪造请求触发的功能,比如修改密码、更改邮箱地址或转账等。
2. 构造伪造请求
- 创建恶意请求:攻击者构建一个恶意的HTTP请求,该请求模仿合法用户的行为,如一个POST请求,带有正确的参数和值。
- 利用会话状态:此请求依赖于受害者的会话状态(通常是存储在cookie中的会话令牌),这使得服务器认为请求是合法的。
3. 诱导受害者
- 创建载体:攻击者可能通过电子邮件、社交媒体、即时消息或论坛等渠道发布一个包含恶意链接或图像的HTML代码。
- 例子:
<img src="http://example.com/change-email?newemail=hacker@example.com">
或<a href="http://example.com/transfer-money?amount=1000&to=hacker">Click here</a>
- 诱骗点击:攻击者等待受害者点击该链接或加载该图片,此时受害者的浏览器会自动发送一个请求到目标站点,并附带任何相关的认证信息(如cookie)。
4. 执行伪造请求
- 请求发送:当受害者访问了包含恶意请求的链接或图片后,受害者的浏览器会自动发送预先设定好的HTTP请求到目标服务器。
- 服务器响应:服务器收到请求后,因为请求中携带了合法的认证信息(如session ID),所以服务器无法辨别请求的真实性,并按照请求中的指令执行相应的操作。
5. 攻击成功
- 完成操作:服务器根据伪造请求执行操作,如转移资金、改变账户设置等。
- 后果:受害者可能会在不知情的情况下遭受损失,而攻击者则达到了其目的。
6. 检测与响应
- 发现异常:受害者或管理员可能会在事后发现账户活动异常,并启动调查。
- 采取行动:如果检测到CSRF攻击,应该立即采取措施,如冻结账户、重置密码、通知用户等。
防御措施
为了防御CSRF攻击,可以采取以下几种方法:
- 使用CSRF Tokens:在每个表单中加入一个不可预测的token,并在服务器端验证这个token的存在性和正确性。
- SameSite Cookie属性:设置cookie的SameSite属性为Strict或Lax,限制cookie只在原站发送。
- 双因素认证:实施额外的身份验证步骤,即使攻击者能发送伪造请求,也需要通过第二道验证才能执行敏感操作。
- 安全的登录状态管理:确保会话管理机制的安全性,避免泄露会话标识符。
- 用户教育:提醒用户不要随便点击不明链接或附件,提高安全意识。
3.总结CSRF手工构造POST型页面方法
1. 分析目标应用
- 确定目标:选择一个存在CSRF漏洞的应用,例如一个在线银行系统。
- 确定目标功能:找出可以通过POST请求触发的功能,如转账、修改密码等。
- 查看请求:使用抓包工具(如Burp Suite、Wireshark或Fiddler)捕获正常的POST请求,了解请求的具体参数。
2. 构造恶意HTML页面
- 创建HTML文件:使用文本编辑器创建一个新的HTML文件,例如
csrf_attack.html
。 - 编写HTML代码:在HTML文件中添加表单标签,并设置表单的
action
、method
属性以及所需的表单数据。
4.说明token类CSRF利用方法
token类CSRF(跨站请求伪造)利用方法指的是利用那些没有正确实施或绕过CSRF令牌机制的Web应用程序来进行攻击。CSRF令牌是一种常用的安全措施,用于防止攻击者利用用户的登录状态发起恶意请求。
5.SSRF常用伪协议
-
file://
file://
伪协议用于访问本地文件系统。通过这个协议,攻击者可以尝试读取服务器上的文件,这可能会导致信息泄露。
-
gopher://
gopher://
是一种早期的互联网协议,用于检索文本信息。虽然现在已经很少使用,但在某些环境中仍可能被支持,攻击者可能会尝试利用它来探测内网资源。
-
dict://
dict://
协议用于访问字典服务。虽然主要用于查询单词定义,但理论上可以被滥用以探查内网服务。
-
ldap:// 和 ldaps://
ldap://
(轻量目录访问协议)用于访问LDAP服务器,而ldaps://
则是它的安全版本。LDAP通常用于身份验证和授权服务,因此可以被用来探测内部目录服务。
-
ftp:// 和 ftps://
ftp://
(文件传输协议)用于传输文件,而ftps://
则提供了安全的文件传输。这些协议可以被用来探测是否有FTP服务器开放在内网中。
-
http:// 和 https://
- 虽然
http://
和https://
是标准的Web协议,但在SSRF上下文中,它们可以用来探测内部网络中的Web服务。这是最常见的SSRF利用方式之一。
- 虽然
-
data://
data://
协议用于直接在URL中嵌入数据,通常用于小段文本或图片。在某些场景下,它可以被用来测试应用如何处理特定类型的数据。
-
jar:// 和 zip://
- 这些协议用于访问JAR文件或ZIP存档中的资源。如果服务器没有正确过滤这些协议,攻击者可以尝试访问存档文件中的内容。
-
vnc://
vnc://
协议用于远程桌面连接。虽然不是常见的Web协议,但如果服务器允许的话,可以被用来探测内部VNC服务器。
-
rmi://
rmi://
(远程方法调用)协议用于Java RMI服务。如果内部有Java服务并且允许远程调用,这可以成为潜在的攻击面。
6.SSRF pikachu靶场通关
1.SSRF(curl)
curl
是一个非常强大的命令行工具,用于从或向服务器传输数据。它支持多种协议,包括 HTTP、HTTPS、FTP、FTPS、SCP、SFTP、TFTP、DICT、TELNET、LDAP、LDAPS 和 FILE 等。curl
常用于测试和调试 API、下载文件、上传文件以及模拟 HTTP 请求。
1.http协议通过网址访问链接
修改URL为url=http://www.baidu.com 访问百度页面
修改URL为:url=http://www.goole.com 访问谷歌页面
2.file协议访问本地链接
修改url为:url=file:///E:/shixi/1.txt
,查看文件的内容:
3、构造payload
2、SSRF(file_get_content)
file_get_contents
是 PHP 中的一个函数,用于读取整个文件到一个字符串中。file_get_contents
被用来从远程服务器获取数据时,如果开发者没有正确验证或过滤用户输入的数据,那么就可能被攻击者用来发起 SSRF 攻击。
URL变成file
1、file读取本地文件
修改file为:file=file:///E:/shixi/1.txt
,查看文件的内容:
7.SSRF根据源代码说明漏洞成因
两者协议不同,漏洞成因也不同。
1.SSRF(curl)
- 直接使用用户输入:
$_GET['url']
直接用于构造cURL请求,这使得攻击者可以注入任意URL。 - 缺乏验证和过滤:没有对用户输入进行验证和过滤,使得攻击者可以利用URL支持的多种协议来访问内部网络资源。
- 直接返回请求结果:echo $RES;将请求结果直接返回给前端,这可能会泄露敏感信息。
2.SSRF(File_get_content)
- 直接使用用户输入:
$_GET['file']
直接用于file_get_contents
函数,这使得攻击者可以通过构造恶意路径来读取任意文件。 - 缺乏验证和过滤:没有对用户输入的文件路径进行验证和过滤,这使得攻击者可以利用路径遍历攻击来访问不应该公开的文件。
- 直接返回文件内容:与上一个类似,将文件内容直接返回给前端,这可能会泄露敏感信息。