0x01:反射性XSS实例:

我们现在进行反射性 XSS 实例:
前端代码,将其保存为 reflectivxss.html

  1. <html>
  2. <head>
  3. <meta charset="utf-8">
  4. <title>反射型XSS</title>
  5. </head>
  6. <body>
  7. <form action="reflectivxss.php" method="GET">
  8. <h1>输入你想搜索的番号:</h1>
  9. <input type="text" name="name" value="" />
  10. <input type="submit" value="搜索" />
  11. </body>
  12. </html>

后端代码,将其保存为 reflectivxss.php:

  1. <html>
  2. <head>
  3. <meta charset="utf-8">
  4. <title>番号???</title>
  5. </head>
  6. <body>
  7. <?php echo '对不起没有该番号'.$_GET['name'];
  8. ?>
  9. </body>
  10. </html>

启动PHPStudy,再打开对应的URL路径,输入你想搜索的内容,然后点击提交,输入内容交给后端代码处理,处理结果显示并返回到前端。这个例子 我将提交类型设为了GET方式,所以大家在操作时可以看一下URL的格式。

我们看到,后端代码并没有对我们输入的内容进行检查,然后就直接返回到了前端。也没有进行一些敏感字符的转义。然大家可以将这个例子运行一 下,这就是基础的反射型XSS。

image.jpeg

image.jpeg0x02:存储型XSS实例:

现在我们根据一个实例进一步来理解存储型XSS,跟着我的操作一起来吧。
首先,我们要打开Mysql数据库,并且创建一个测试用的数据库:

  1. CREATE DATABASE storedxss; USE storedxss;

使用storedxss数据库后,我们创建简单测试用的表:

  1. CREATE TABLE test( id int(4) not null primary key auto_increment, text char(100) not null );
  1. <br />接下来,我们编写前端留言页面,将以下内容保存为storedxss.html
  1. <html>
  2. <head>
  3. <title>存储型XSS</title>
  4. <meta charset="utf-8">
  5. </head>
  6. <body>
  7. <h1>请输入你的留言内容:</h1>
  8. <form action="storedxss.php" method="POST">
  9. <textarea name="content">请给你的小可爱留下一句暧昧的话吧</textarea><br />
  10. <input type="submit" value="留言" />
  11. </body>
  12. </html>
  1. <br />然后,我们编写后端处理程序,将以下内容保存为storedxss.php:<br />
  1. <?php
  2. $sql = "INSERT INTO test(text) VALUES('".$_POST['content']."')";
  3. $sql1 = "SELECT * FROM test";
  4. $con = mysqli_connect("127.0.0.1","root","7089bat","storedxss");/*连接数据库,"Mysql地址","Mysql用户名","Mysql密码","连接的数据库"*/
  5. if(!$con){
  6. echo "数据库连接失败".mysqli_connect_error();
  7. }
  8. if(isset($_POST['content'])){
  9. $result = mysqli_query($con, $sql);
  10. $result1 = mysqli_query($con,$sql1);
  11. echo "你给小可爱的留言是:";
  12. while($row = mysqli_fetch_array($result1)){
  13. echo $row['text'].'</br>';
  14. }
  15. }
  16. ?>

通过浏览器打开storedxss.html,输入留言内容:

image.jpeg

点击提交,然后我们来到数据库,看看是不是插入进去了:
image.jpeg

我们可以看到,数据库已经成功存储了我们的恶意代码。你每次查看留言内容时都会进行弹框,也可构造其他功能的恶意代码。
image.jpeg

0x03:DOM型 XSS实例

DOM型XSS的流程相比于其他两个更为简单,甚至都没有经过后端。我们通过下面这个小例子来理解。这是JavaScript那篇教程的DOM操作。
我们输入文字,它会替换页面的文字并显示你输入的文字。那么我们输入了恶意代码呢?下面我们来试试。
将代码保存为domxss.html:

  1. <html>
  2. <head>
  3. <meta charset="utf-8" />
  4. <title>DOM型XSS</title>
  5. </head>
  6. <body>
  7. <h1 id="main-heading">拉拉学习之路</h1>
  8. <script>
  9. var headElement = document.getElementById("main-heading");
  10. var newHeadText = prompt("神奇魔法变变变,随便输入点什么吧:");
  11. headElement.innerHTML = newHeadText; </script>
  12. </body>
  13. </html>

因为DOM型XSS不会经过后端,所以实例代码只有前端代码。
我们输入恶意代码看看会有什么神奇的反应吧:
image.jpeg
image.jpeg
我们成功插入内部,并实现了弹框,大家可以思考下还有哪些场景是类似的情况呢?