靶场介绍
XSS
XSS的中文名称叫跨站脚本,是WEB漏洞中比较常见的一种,特点就是可以将恶意HTML/JavaScript代码注入到受害用户浏览的网页上,从而达到劫持用户会话的目的。
XSS根据恶意脚本的传递方式可以分为3种:
反射型
存储型
DOM型
前面两种恶意脚本都会经过服务器端然后返回给客户端,相对DOM型来说比较好检测与防御,而DOM型不用将恶意脚本传输到服务器直接运行在客户端,相对不好检测。
本次使用的靶场是一个DOM型XSS靶场
靶场连接:XSS.pwnfunction
第一关:Ma Spaghet!
根据源码发现这里id为spaghet的h2标签会通过get方法获得一个名为somebody的值,如果没有值则默认为"Somebody"我们需要从这里注入alert(1337),且不能通过和用户交互的模式触发,所以想到用img标签利用onerror事件来触发
?somebody=<img src=1 onerror=alert(1337)>
第二关:Jefff
分析源码得知,变量jeff通过get方法获得一个值,没有默认为JEFFF,然后再用eval方法执行赋值语句,将jeff的值赋给ma,最后把ma的值放到h2标签中。eval中通过模板字符串引入jeff的值,我们考虑通过这里,闭合字符串,实现注入alert(1337)的目的
?jeff=a";alert(1337);"
第三关:Ugandan Knuckles
同样看出wey通过get传参,但是后面通过replace方法过滤掉了<>,把他们替换成了空格,那么我们只能再input标签内xss了,题目还要求不能和用户交互,那只能通过事件触发了,这里使用onfocus 和autofucus 使用焦点的原理,可以使用onfocus获取焦点,再利用autofocus自动获取焦点,所以我们就触发执行代码。
?wey=a" onfocus=alert(1337) autofocus="
第四关:Ricardo Milos
这一关是对我们传进来的参数进行一个两秒后的自动submit提交,在两秒后自动运行action,那么action是一个注入点
?ricardo=javascript:alert(1337)