原题内容:javascript
http://103.238.227.13:10089/css
Flag格式:Flag:xxxxxxxxxxxxxxxxxxxxxxxxhtml
题目有点坑啊,注入点都没说明,去群里问的,这题注入点为id(get方式),id的值会进行替换后进入sjava
补充了这个,好了,继续作题xss
右键源码学习
var s="";
document.getElementById('s').innerHTML = s;
结合上述补充,和题目要求编码
一、请注入一段XSS代码,获取Flag值spa
二、必须包含alert(_key_),_key_会自动被替换.net
首先,解释下源码中发现的代码的意思,下面举个例子说明下innerHTMLcode
document.getElementById("baidu") 得到 a 这个元素
document.getElementById("baidu") .innerHTML 得到 a 这个元素内的HTML代码(即百度)
document.getElementById("baidu") .innerHTML = "谷歌"
设置 a 这个元素内的HTML代码,
设置后百度
就变为谷歌
搜索document.getElementById('s').innerHTML时发现一个颇有趣的问题
若是字符串中拼接的 HTML 标签中有 script 标签,那么该段脚本是没法执行的,这并非 bug,而是 w3c 的文档规定的
这里推荐一个博客,你们能够前去学习一下
咱们须要的是能够从注入点id进入的方法,因此这里参考其博客的img标签方法,因而构造
http://103.238.227.13:10089/?id=
很遗憾,存在回显
这说明,存在xss filter,咱们的传参字符串中存在被屏蔽的词
通常最可能的是alert,但这里题目要求存在alert,顾考虑第二可能点<>
进行了两组尝试,代码和回显以下:
连接
http://103.238.227.13:10089/?id=\%3Cimg%20src=1%20οnlοad=alert(_key_)/\%3E
回显
连接
http://103.238.227.13:10089/?id=\\%3Cimg%20src=1%20οnlοad=alert(_key_)/\\%3E
回显
\
很明显了,反义符号对<>不起做用,对自己起做用,这说明阻挡点是<>
注意页面编码utf-8
id传入代码会在s中运行
考虑将<>进行unicode编码,这样当代码被替换进去运行时,utf-8编码又会将其变回来
具体表参考博客
接下来就没问题了
构造连接
http://103.238.227.13:10089/?id=\u003cimg%20src=1%20οnlοad=alert(_key_)/\u003e
查看源代码,可看到_key_已经被替换成答案
var s="\\";document.getElementById('s').innerHTML = s;