0%

56WEB攻防-CSRF

思维导图

41WEB攻防

知识点:

  • 46、CSRF-原理&检测&利用&防御
  • 47、CSRF-防御-Referer策略隐患
  • 48、CSRF-防御-Token校验策略隐患

章节点:

Web层面:Web2.0 & Web3.0
语言安全:JS,ASP,PHP,NET,Java,Python等(包含框架类)
OWTOP10:注入,文件安全,XSS,RCE,XXE,CSRF,SSRF,反序列化,未授权访问等
业务逻辑:水平垂直越权,支付签约&购买充值,找回机制,数据并发,验证码&弱口令等
特殊漏洞:JWT,CRLF,CORS,重定向,JSONP回调,域名接管,DDOS,接口枚举等
关键技术:POP链构造,JS逆向调试,NET反编译,JAVA反编译,代码解密,数据解密等
Web3.0:未待完续筹备中….



CSRF-无检测防护-检测&生成&利用

检测:黑盒手工利用测试,白盒看代码检验(有无token,来源检验等)
生成:BurpSuite->Engagement tools->Generate CSRF Poc
利用:将文件防止自己的站点下,诱使受害者访问(或配合XSS触发访问)

CSRF-Referer同源-规则&上传&XSS

https://blog.csdn.net/weixin_50464560/article/details/120581841
严谨代码PHP DEMO:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
// 检测来源
function checkReferrer() {
$expectedReferrer = "http://example.com"; // 期望的来源页面

if (!isset($_SERVER['HTTP_REFERER']) || $_SERVER['HTTP_REFERER'] !== $expectedReferrer) {
die("非法访问");
}
}

// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 检测来源
checkReferrer();

// 获取用户输入的数据
$name = $_POST['name'];
$email = $_POST['email'];

// 输出用户输入的数据
echo "姓名:$name<br>";
echo "邮箱:$email<br>";
exit;
}
?>

<!DOCTYPE html>
<html>
<head>
<title>检测来源示例</title>
</head>
<body>
<h1>检测来源示例</h1>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<label for="name">姓名:</label>
<input type="text" name="name" id="name" required />
<br>
<label for="email">邮箱:</label>
<input type="email" name="email" id="email" required />
<br>
<input type="submit" value="提交" />
</form>
</body>
</html>

绕过0:规则匹配绕过问题(代码逻辑不严谨)
1、
2、http://xx.xx.xx.xx/http://xx.xx.xx.xx
绕过1:配合文件上传绕过(严谨使用同源绕过)
绕过2:配合存储XSS绕过(严谨使用同源绕过)

CSRF-Token校验-值删除&复用&留空

https://blog.csdn.net/weixin_50464560/article/details/120581841
严谨代码PHP DEMO:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
session_start();

// 生成并存储 CSRF Token
function generateCSRFToken() {
$token = bin2hex(random_bytes(32));
$_SESSION['csrf_token'] = $token;
return $token;
}

// 检查 CSRF Token 是否有效
function validateCSRFToken($token) {
return isset($_SESSION['csrf_token']) && $_SESSION['csrf_token'] === $token;
}

// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 检查 CSRF Token
if (!isset($_POST['csrf_token']) || !validateCSRFToken($_POST['csrf_token'])) {
die("CSRF Token 验证失败");
}

// 获取用户输入的数据
$name = $_POST['name'];
$email = $_POST['email'];

// 输出用户输入的数据
echo "姓名:$name<br>";
echo "邮箱:$email<br>";
exit;
}

// 生成 CSRF Token
$csrfToken = generateCSRFToken();
?>

<!DOCTYPE html>
<html>
<head>
<title>CSRF Token 示例</title>
</head>
<body>
<h1>CSRF Token 示例</h1>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<input type="hidden" name="csrf_token" value="<?php echo $csrfToken; ?>" />
<label for="name">姓名:</label>
<input type="text" name="name" id="name" required />
<br>
<label for="email">邮箱:</label>
<input type="email" name="email" id="email" required />
<br>
<input type="submit" value="提交" />
</form>
</body>
</html>

绕过0:将Token参数值复用(代码逻辑不严谨)
绕过1:将Token参数删除(代码逻辑不严谨)
绕过2:将Token参数值置空(代码逻辑不严谨)

欢迎关注我的其它发布渠道

-------------本文结束感谢您的阅读-------------