前言:
HTML注入与XSS本身没有本质区别,改变前端代码,攻击客户端。直接看题。
0x00 HTML Injection - Reflected(GET)
LOW
低级别没有任何防护,输入框可以直接插入JS脚本,提交后,页面即回显姓名信息,JS代码被执行,从而触发弹窗。
另外看一下后端PHP代码:在echo处输出变量$lastname,$firstname没有进行任何过滤
MEDIUM
与上题同样的测试方式进行试验,发现页面回显JS脚本,右键查看网页源代码,发现<>被URL编码了。。。
那就对尖括号进行URL编码来绕过:%3cscript%3ealert(/zzz/)%3c/script%3e
弹出窗口,成功绕过。在URL中的参数注入不会被URL编码。
HIGH
首先输入<script>alert(/aaa/)</script>来进行测试,页面没有弹窗,右键查看源代码,尖括号被转义;
使用中级别的payload进行测试,依旧没有弹窗,测试失败。
那我们来看一下后来代码的过滤规则:
代码注释中的一些符号均被过滤,使用了htmlspecialchars函数,认为其校验方式是安全的。
0x01 HTML Injection - Reflected(POST)
通过查看源代码得知,这道题仅仅是请求方式变化,对于用户输入过滤没有任何变化。代码如下:
通过函数htmli来区分不同的难度等级,引用文件security_level_check.php来进行不同的输入参数过滤,所以这里不再赘述,解题方式跟上面GET一样。
LOW
借鉴上面。
MEDIUM
借鉴上面。
HIGH
借鉴上面。
0x02 HTML Injection - Reflected(Current URL)
LOW
页面显示了网址栏中的URL,试着在URL中传入参数,构造JS脚本形式的参数,看是否能在页面将JS脚本进行解析。
payload:?aaa=<script>alert(/aaa/)</script>
页面回显尖括号被URL编码了。
使用BurpSuite拦截抓包进行参数输入:
放行数据包之后成功弹窗:
MEDIUM
HIGH
0x03 HTML Injection - Reflected(GET)
LOW
MEDIUM
HIGH