我们通过pikachu反射型的xss给大家做一个演示
根据我们之前讲的思路,我们走一遍,首先,我们要确认下这个页面上是不是存在xss漏洞,我们首先可以在这个对应的输入点,去输入一些特殊的字符,比如说单引号、双引号、左右尖括号、七个七,这样的一个payload
'"<>7777
这样输入的目的,就是测试,我们的输入在提交的时候,会不会被过滤掉,因为他有特殊字符,然后去验证这个输入,最终会不会被输出,输出的时候,有没有被处理,是这么个目的,然后我们点一下提交
根据我们刚刚的输入,看一下页面的源码,然后ctrl+f,输入我们刚刚的字符,7777,可以找到我们的输出点
我们可以看到’"<>7777这个内容被输出到了p标签里面了,也就是说,直接输出到了htmlp标签这个源码里面,这是比较简单的场景,也就是说,我们输入的这些特殊字符,被原封不动的输出到p标签里面了,也就是说,我们在这个地方输入正确的javascript代码,也会被原封不动的返回回来呢,我们来试一下,我们在输入点输一个简单的payload,我们首先去弹一个窗,看能不能被正确的执行
然后,我发现输入到这个地方,发现后面输入不进去了,一般来说,有很多前端都会对输入框做一个长度的限制,那如果说这个限制是通过前端来做的,那其实是没有用的,因为所有在前端做的安全措施,其实只能做为辅助来用,并不能真正的起到效果,F12,我们来看一下这个标签
他在这个输入的标签里面,设置输入的最大长度是20个字符,我们可以把它改掉,改成2000,这样就可以输入更多字符,这是一个小的知识点
我们继续往下输,
<script>alert('xss')</script>
我们点提交
我们刚刚提交的js代码,被输入输出之后,成功的在浏览器解析,按照我们的预期,alert了一个xss这样的字符,那这其实就是反射型的xss,我们点确定
反射型的xss实际上,它的这个数据从前端的接口输入,然后到后端输出,其实后端是没有对它进行存储的,也就是说,我们重新去刷新这个页面,输的代码就没了,我们先不刷新页面,看一下源码,我们查找一下,我们刚刚输入的alert
然后我们可以看到我们输入的payload,被嵌入到了p标签里面,然后这又是正确的前端js的语法,被浏览器正确的给执行了,弹出了xss的框
然后我们刷新一下页面,因为是反射型的xss,按照我们刚刚的逻辑,我们刷新一下,源码就没了
我们看到刷新一下,就不会弹这个窗了
接下来,我们通过后端的代码,来看一下漏洞形成的具体原因
我们看到它有一个表单,这个表单就是我们前面看到的输入框
一旦你点了提交之后,它会先判断你提交的这个信息是不是为空,如果说不是为空,并且不等于kobe字符串的话,那它就会把你输入的message,也就是我们提交的内容,原封不动的输出到p标签里面,也就是整个输入到最后输出,整个过程,没有做对应的防xss处理的,这就形成了一个反射型xss注入的漏洞
我们接下来说一下反射型xss的利用场景,我们再把刚刚的payload输入一下,
把最大长度改成2000,然后点提交
它会弹出个1,这个点提交完之后,它是以get方式去提交到后台的,也就是说,它是在url里面,把我们的内容提交到后台,我们可以把这整个内容,复制下来,
http://192.168.42.236/pikachu/vul/xss/xss_reflected_get.php?message=<script>alert(1)</script>&submit=submit
这边浏览器对它进行了一个自动的url编码,也就是说,我们只要把这个url再浏览器里面访问一下,它就会去提交我们刚刚的js,然后去执行,我们点提交
这就会被执行了,也就是说,这种get型xss其实是比较好利用的,比如说某个著名的论坛,出现了一个反射型的xss漏洞,然后我们就可以去精心的构造一个输入的js,当然不仅仅是一个弹窗,因为在js里面,我们可以挖空想象去做任何的事情,然后我们可以构造一个对应的payload,然后把这个一整个链接,发送给需要攻击的目标,然后一旦受害者点击了这个域名,因为他看到这个域名是比较出名论坛的url,这个人就会觉得链接没有问题
然而实际上,当他点击这个链接之后,实际上这个url是向后台,以个人的方式提交了恶意的jspayload,然后又被返回回来了,然后就把这个给X到了,而这就是反射型的xss利用场景的说明
反射型跨站脚本漏洞之get&post
GET和POST典型区别:
GET是以url方式提交数据;
POST是以表单方式在请求体里面提交;
GET方式的XSS漏洞更加容易被利用,一般利用的方式是将带有跨站脚本的URL伪装后发送给目标
而POST方式由于是以表单方式提交,无法直接使用URL方式进行攻击,如何利用?