渗透测试之XSS(二)
反射型XSS
反射型XSS又被称之为非持久型XSS,因为这种攻击是一次性的,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
我们来到xss-labs靶场的第一关
用户输入的那么值会在浏览器上回显出来。
那么我们可以在<h2>标签内插入一个
<script>alert('随风')</script> #alert是一个弹窗,所有的js代码都要放在<script>里面才会被当作js代码执行
成功触发alert弹窗。
我们也可以在后台代码分析一下
这里接收了一个 name值,然后没有做任何过滤直接放入到<h2>标签内,当我们插入<script>alert('随风')</script> ,这个时候代码则成为了
echo "<h2 align=center>欢迎用户<script>alert('随风')</script></h2>";
最终导致alert弹窗执行。
在来看看第二关
我们还是先输入<script>alert('随风')</script> 测试一下,发现并没有触发弹窗。那我们可以去看看源代码。
可以看到我们输入的代码被插入到了value值里面,那我们就要做一个简单的闭合。
这里我们要闭合一下value的双引号,所以我们构造的代码是
1"><script>alert('随风')</script># 1"是与value的"闭合1"后面的>是闭合前面的input标签,然后就是接上我们的弹窗代码。
我们看看后台代码
在<h2>标签内,虽然也有带入,但是有做一个htmlspecialchars(),函数的实体转义。
所以这里是不存在XSS攻击的,但是我们可以看到这个str这个变量还会直接带入到下方的value值内,所以我们用上方的payload进行闭合,就可以进行我们的XSS攻击了。
第三关
首先我们还是用我们的payload做一个小测试,看看该代码有做何防护措施,果不其然的被转义了。
那我们看看后台代码,发现两个地方都有被htmlspecialcharsa()函数实体转义。
这种时候我们的<>符号都被实体转义了,我们虽然可以闭合单引号,但是<>被实体转义,触发不了xss代码,那么这种情况下我们该如何去实现我们的XSS攻击呢。
我们来看看如下的payload
'onclick='alert(1)#此处用了onclick事件,onclick为点击事件,当搜索接收到点击的时候,就会触发onclick里面的代码,我们可以看到onclick事件里面的代码是一个alert弹窗。
然后我们点击搜索框触发onclick点击事件触发XSS攻击。