环境:iwebsec
这个环境是以前搭建好的,测了文件上传和一些SQL注入,现在好久没用了,重新启动。
-
显示正在运行或者和历史运行过的容器信息。
-
启动容器
-
查看容器
-
访问成功
XSS漏洞
这个知识点以前有写过。
1、反射型XSS漏洞
-
打开环境页面
-
随便测试几个,看回显
像这种将输入直接输出到页面的大概就是反射型XSS了。 -
用
<script>alert(1)</script>
测试
-
继续使用burpsuite的爆破版块测试哪些XSS语句能用,payload可以去GitHub找
-
选一句出来用
/xss/01.php?name=<img src/onerror=prompt(8)>
-
看源码
docker exec -it iwebsec bash cat /var/www/html/xss/01.php
<table class='table table-striped'> //下面这些php代码是在后端执行的 <?php if(isset($_GET['name'])){ $name=$_GET['name']; echo "<h2>"."Hello ".$name."<h2>";//将输入的直接输出成h2的内容 }else{ exit(); } ?> </table>
2、存储型XSS漏洞
这种攻击常见于论坛、博客和留言板。攻击者在发帖的过程中,将恶意脚本连同正常信息一起注入帖子的内容中。随着帖子被服务器存储下来,恶意脚本也永久地存放在服务器的后端存储器中。当其他用户浏览这个被注入了恶意脚本的帖子时,恶意脚本会在他们的浏览器中得到执行。【摘自《web安全攻防》】
-
打开环境
-
随便输入一些,看回显
将输入的东西提交后,展示在页面中,并且展示所有输入提交过的,这种就是存储型XSS了。 -
<img src/onerror=prompt(8)>
-
继续添加仍会加载前面的XSS语句
-
源码
</form> <body> <?php if(isset($_GET['name'])){ $name=$_GET['name']; $sql="INSERT INTO xss set name='$name'"; //将输入的内容存入数据库中 $result=mysql_query($sql); $sql="SELECT * FROM xss";//查询xss数据库的所有内容 $result=mysql_query($sql); } else{ exit(); } if ($result) { ?> <table class='table table-striped'> <tr><th>id</th><th>name</th></tr> <?php while ($row = mysql_fetch_assoc($result)) { //将查询结果一行一行输出 echo "<tr>"; echo "<td>".$row['id']."</td>"; echo "<td>".$row['name']."</td>"; echo "</tr>"; } echo "</table>"; } else { print_r(mysql_error()); } ?>
3、DOM XSS漏洞
客户端的脚本程序可以通过DOM动态修改页面内容,从客户端获取DOM中的数据并在本地执行。由于DOM是在客户端修改节点的,所以基于DOM型XSS漏洞不需要与服务器交互,它只发生在客户端处理数据阶段。【摘自《web安全攻防》】
-
打开环境,随便输出测试
这个跟反射型XSS很像,但是机制是不一样的,这里不需要用到后端,也就是不涉及php代码。 -
我们看看网页源代码,注意里面的一个函数
<table class='table table-striped'> <script> //domxss函数,该函数的作用是通过DOM操作将元素"output"的内容修改为元素"input"的内容 function domxss() { var str = document.getElementById("input").value; document.getElementById("output").innerHTML = str; } </script> <!--"output"元素,这个元素的值取自 输入内容 --> <h2 id = "output"></h2> <!--"input"元素--> <input type="text" id="input" value="" /> <!--点击"submit",触发domxss函数--> <input type="button" value="submit" onclick="domxss()" /> </table>
-
<img src/onerror=prompt(8)>
进行测试其他句<img src=1 onerror=alert(1)>
4、XSS修复示例
这一关是修复第一关的。
看网页源代码,应该是添加了htmlspecialchars
函数,即将输入的内容先进行一次实体编码再输出。
实体编码一般涉及< & > "
等符号,倘若是在script
、input
标签当中,再找一些避开这些符号的XSS语句,即可突破。但是看源码的关键部分
echo "<h2>"."Hello ".htmlspecialchars($name)."<h2>";
不涉及script
、input
标签,因此目前没啥办法。