0x00 知识储备
HTML注入,就是当用户进行输入时,服务器没有对用户输入的数据进行过滤或转义,导致所有输入均被返回前端,网页解析器会将这些数据当作html代码进行解析,这就导致一些恶意代码会被正常执行。
0x01 Low
首先输入1和1测试一下
发现结果正常出现在页面上,直接试一试XSS
<script>alert(1)</script>1
还可以尝试超链接
<a href="http://www.baidu.com">111</a>
点击111即可完成跳转
源码分析:
可以看到没有任何处理
0x02 Medium
分析源码,可以看到,源码首先将<,>替换成字符实体(这是因为这些字符在HTML中有特殊含义,所以要想在文本中使用它们我们就需要使用字符实体),同时利用了urldecode进行解码,也就是对于我们输入的信息,应该是进行了两次url解码(一次是浏览器对输入数据打包传送给后端时,第二次是后端的url解码)
所以只需要将要输入的代码进行两次url编码即可,url解码地址:http://www.jsons.cn/urlencode/
但是这时直接在输入框中输入两次url编码的结果发现和预期结果不同!!!
观察结果,发现 显示的First name是代码进行一次url编码的结果。原因是输入框输入数据后,GET请求将参数输入到url地址栏时会进行一次url转码,所以此时地址栏显示的是代码三次编码后的结果,这样传入后端时,浏览器解码一次,后端再解码一次,显示出来的结果就是一次编码的结果。所以如果在输入框输入时我们只需要输入一次编码的结果即可,而在地址栏中输入时需要输入两次编码的结果。
执行成功,点击click即可跳转
0x03 High
分析源码
htmlspecialchars() 函数把特殊字符转换为 HTML 实体。这意味着 < 和 > 之类的 HTML 字符会被替换为 < 和 > 。这样可防止攻击者通过在表单中注入 HTML 或 JavaScript 代码(跨站点脚本攻击)对代码进行利用。 此时无法再进行HTML注入。
第一次写博客,写的不对或者不好的地方希望大佬们指出:)