分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

原题内容:

http://103.238.227.13:10089/

Flag格式:Flag:xxxxxxxxxxxxxxxxxxxxxxxx


题目有点坑啊,注入点都没说明,去群里问的,这题注入点为id(get方式),id的值会进行替换后进入s


补充了这个,好了,继续做题

右键源码

<script> var s="";         document.getElementById('s').innerHTML = s;</script>

结合上述补充,和题目要求

1、请注入一段XSS代码,获取Flag值

2、必须包含alert(_key_),_key_会自动被替换


首先,解释下源码中发现的代码的意思,下面举个例子说明下innerHTML

<a id="baidu"><strong>百度</strong></a>document.getElementById("baidu") 获得 a 这个元素document.getElementById("baidu") .innerHTML 获得 a 这个元素内的HTML代码(即<strong>百度</strong>)document.getElementById("baidu") .innerHTML = "<em>谷歌</em>" 设置 a 这个元素内的HTML代码,设置后<strong>百度</strong>就变为<em>谷歌</em>

搜索document.getElementById('s').innerHTML时发现一个很有趣的问题

如果字符串中拼接的 HTML 标签中有 script 标签,那么该段脚本是无法执行的,这并不是 bug,而是 w3c 的文档规定的

这里推荐一个博客,大家可以前去学习一下

simplify the life by 韩子迟


我们需要的是可以从注入点id进入的方法,所以这里参考其博客的img标签方法,于是构造

http://103.238.227.13:10089/?id=<img%20src=1%20onload=alert(_key_)/>
很遗憾,存在回显

CTF/CTF练习平台-XSS【xss注入及js unicode编码及innerHTML】-LMLPHP

这说明,存在xss filter,我们的传参字符串中存在被屏蔽的词

一般最可能的是alert,但这里题目要求存在alert,顾考虑第二可能点<>

进行了两组尝试,代码和回显如下:

链接

http://103.238.227.13:10089/?id=\%3Cimg%20src=1%20onload=alert(_key_)/\%3E

回显

<img src=1 onload=alert(_key_)/>

链接

http://103.238.227.13:10089/?id=\\%3Cimg%20src=1%20onload=alert(_key_)/\\%3E

回显

\<img src=1 onload=alert(_key_)/\>

很明显了,反义符号对<>不起作用,对本身起作用,这说明阻挡点是<>

注意页面编码utf-8

id传入代码会在s中运行

考虑将<>进行unicode编码,这样当代码被替换进去运行时,utf-8编码又会将其变回来

具体表参考博客

unicode字符集特殊符号对应html/js/css符号

接下来就没问题了

构造链接

http://103.238.227.13:10089/?id=\u003cimg%20src=1%20onload=alert(_key_)/\u003e

查看源代码,可看到_key_已经被替换成答案

var s="\\<img src=1 onload=alert(_key_)/\\>"; document.getElementById('s').innerHTML = s;






           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

CTF/CTF练习平台-XSS【xss注入及js unicode编码及innerHTML】-LMLPHP
12-19 12:35