0x01:反射性XSS实例:
我们现在进行反射性 XSS 实例:
前端代码,将其保存为 reflectivxss.html
<html><head><meta charset="utf-8"><title>反射型XSS</title></head><body><form action="reflectivxss.php" method="GET"><h1>输入你想搜索的番号:</h1><input type="text" name="name" value="" /><input type="submit" value="搜索" /></body></html>
后端代码,将其保存为 reflectivxss.php:
<html><head><meta charset="utf-8"><title>番号???</title></head><body><?php echo '对不起没有该番号'.$_GET['name'];?></body></html>
启动PHPStudy,再打开对应的URL路径,输入你想搜索的内容,然后点击提交,输入内容交给后端代码处理,处理结果显示并返回到前端。这个例子 我将提交类型设为了GET方式,所以大家在操作时可以看一下URL的格式。
我们看到,后端代码并没有对我们输入的内容进行检查,然后就直接返回到了前端。也没有进行一些敏感字符的转义。然大家可以将这个例子运行一 下,这就是基础的反射型XSS。
0x02:存储型XSS实例:
现在我们根据一个实例进一步来理解存储型XSS,跟着我的操作一起来吧。
首先,我们要打开Mysql数据库,并且创建一个测试用的数据库:
CREATE DATABASE storedxss; USE storedxss;
使用storedxss数据库后,我们创建简单测试用的表:
CREATE TABLE test( id int(4) not null primary key auto_increment, text char(100) not null );
<br />接下来,我们编写前端留言页面,将以下内容保存为storedxss.html
<html><head><title>存储型XSS</title><meta charset="utf-8"></head><body><h1>请输入你的留言内容:</h1><form action="storedxss.php" method="POST"><textarea name="content">请给你的小可爱留下一句暧昧的话吧</textarea><br /><input type="submit" value="留言" /></body></html>
<br />然后,我们编写后端处理程序,将以下内容保存为storedxss.php:<br />
<?php$sql = "INSERT INTO test(text) VALUES('".$_POST['content']."')";$sql1 = "SELECT * FROM test";$con = mysqli_connect("127.0.0.1","root","7089bat","storedxss");/*连接数据库,"Mysql地址","Mysql用户名","Mysql密码","连接的数据库"*/if(!$con){echo "数据库连接失败".mysqli_connect_error();}if(isset($_POST['content'])){$result = mysqli_query($con, $sql);$result1 = mysqli_query($con,$sql1);echo "你给小可爱的留言是:";while($row = mysqli_fetch_array($result1)){echo $row['text'].'</br>';}}?>
通过浏览器打开storedxss.html,输入留言内容:

点击提交,然后我们来到数据库,看看是不是插入进去了:
我们可以看到,数据库已经成功存储了我们的恶意代码。你每次查看留言内容时都会进行弹框,也可构造其他功能的恶意代码。
0x03:DOM型 XSS实例
DOM型XSS的流程相比于其他两个更为简单,甚至都没有经过后端。我们通过下面这个小例子来理解。这是JavaScript那篇教程的DOM操作。
我们输入文字,它会替换页面的文字并显示你输入的文字。那么我们输入了恶意代码呢?下面我们来试试。
将代码保存为domxss.html:
<html><head><meta charset="utf-8" /><title>DOM型XSS</title></head><body><h1 id="main-heading">拉拉学习之路</h1><script>var headElement = document.getElementById("main-heading");var newHeadText = prompt("神奇魔法变变变,随便输入点什么吧:");headElement.innerHTML = newHeadText; </script></body></html>
因为DOM型XSS不会经过后端,所以实例代码只有前端代码。
我们输入恶意代码看看会有什么神奇的反应吧:

我们成功插入内部,并实现了弹框,大家可以思考下还有哪些场景是类似的情况呢?
