XSS的本质是没有对用户输入进行过滤,让我们可以通过输入javascript语句的方法更改网页
如果对于任意输入内容,网页都原封不动地把输入内容返回,这里就可以考虑有反射型XSS(尤其关注特殊符号<>?#&666等)
为了在输入框中输入javascript语句,通常我们需要对输入框最大输入限制进行调整,打开浏览器的开发者页面,使用选择器选择输入框,将限制调大
//将javascript语句输入到输入框,比如 <script>alert('sb')</script>
提交后,就可以弹窗显示了
唯一的限制是你的想象力
get类型的话,url上就会有插入的javascript语句,这时如果利用用户对原网站的信任,使其点击此时的url,实际上就会运行插入的javascript语句
post类型是以表单的形式在请求体中提交的
同其他
同其他
由于存储型的XSS漏洞所插入的语句上添加到数据库中的,所有进入这以页面的人都会中招,危害较大
DOM通俗来说就是javascript访问,改变HTML的一种办法
靶场里的xssDOM的代码是:
<script> function domxss(){ var str = document.getElementById("text").value; document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>"; } //试试:'><img src="#" onm ouseover="alert('xss')"> //试试:' onclick="alert('xss')">,闭合掉就行 </script> <!--<a href="" onclick=('xss')>--> <input id="text" name="text" type="text" value="" /> <input id="button" type="button" value="click me!" onclick="domxss()" /> <div id="dom"></div>
点击按钮后会将text的内容添加到id为dom的div中
靶场中的dom是纯前端的操作,没有进行对用户输入的过滤
首先确定我们需要的利用:
比如弹个窗
原来的语句是:我们将插入的语句是str位置
<a href='"+str+"'>what do you see?</a> //实际是第一对单引号内 <a href=''>what do you see?</a>
<a href='"+str+"'>what do you see?</a>
构建闭合,我们需要的效果是
<a href='#' onclick="alert(111)">'>what do you see?</a> //href='#'是无意义的,跳转到当前页面
所以我们要在框框中输入
#' onclick="alert(111)">
点击后就可以弹窗了
靶场中的DOM型xss-x的代码逻辑是
<script> function domxss(){ var str = window.location.search; var txss = decodeURIComponent(str.split("text=")[1]); var xss = txss.replace(/\+/g,' '); // alert(xss); document.getElementById("dom").innerHTML = "<a href='"+xss+"'>就让往事都随风,都随风吧</a>"; } //试试:'><img src="#" onm ouseover="alert('xss')"> //试试:' onclick="alert('xss')">,闭合掉就行 </script> <!--<a href="" onclick=('xss')>--> <form method="get"> <input id="text" name="text" type="text" value="" /> <input id="submit" type="submit" value="请说出你的伤心往事"/> </form> <div id="dom"></div>
.replace(/+/g,' ');//是正则表达式替换,/ /内是正则的作用范围,\是转义,g表述全部替换,整体的意思是将+号全部替换为空格
可以看到这个逻辑是以get在url中传递的,这样我们就可以使用url传递恶意代码了,操作同上几个笔记
前端开发的方式(人)千奇百怪,不能说某种漏洞就一定是无效的