xss的英文名字是cross-site-script。俗称跨站脚本,是一种注入攻击,指攻击者在被攻击的网页上利用编写时的漏洞注入恶意脚本代码,受害者访问该页面时,恶意代码会在用户的浏览器上执行。有三种类型,分别是:
观察源码,在里发现有内嵌的进入下一关的脚本,进行脚本注入不同函数后发现只有注入的脚本是alert()函数才能使内嵌的脚本生效,其它函数则不行。我查看集成环境中的源码后发现源码调用了ini_set()函数,语句为ini_set(‘display_error’,0),这句话的意思是“不返回错误”,所以我猜测可能原本的程序就将这一段内嵌的代码敲错,目的是让这一段代码不执行,而前面设置的函数就是为了不报错。如果有alert函数,则会纠正错误,从而使脚本运行,自动进入下一关的网页。
本文中的‘forming is handsome’是我的玩笑,若心有抵触请把forming改为自己的名字。要是对我有恨意不要憋的,告诉我,我给您磕一个。(狗头保命)
直接在url栏的name=后输入:
(这是一段js代码)
那么如果我们注入的是一段能在客户端运行的程序的话,就是能达到恶意注入的目的,查看源码,发现没有做任何防御,我们试着注入在h2处注入的脚本。
与第一关不同的是输入的地方不同,如果和第一关在相同位置上注入就会少返回一个“确定”值,所以要在网页中的输入栏输入
forming is handsome" οnfοcus=javascript:alert(‘xss’)>//
或者
forming is handsome"> //
首先注入,然后查看网页源码
可以发现在h2标签处的‘>’和‘<’被替换成了实体字符,用到的是htmlspecialchars()函数(想知道更多请自行搜索)。所以在此处是实现不了脚本注入的,但是看第一个input元素处‘<’和‘>’并没有被替换,所以在这里根据onfocus事件,可以实现脚本注入。输入
forming is handsome" οnfοcus=javascript:alert(‘xss’)>//
或者
forming is handsome"> //
当输入前者进去以后点击页面上的确定,待刷新以后点击一下输入框给onfocus事件一个焦点,网站就会自动通向下一关。若是后者则会自动弹出选框。
下图是前者的源码图。
在与第二关相同的位置输入
forming’ οnfοcus=javascript:alert(‘handsome’) //
这里讲一个我发现的东西,那就是输入的字符串不能太长,不然无法注入成功。
毕竟我也想在每一个能输入forming is handsome的地方都输入,但是这个地方可能是开辟的空间太小这么长的字符串不能被存储,所以只能这么短。
和之前一样都是进行尝试,输入:
再查看网页源码:
发现和第二关的不同之处在于在input处也转换了">","<",那么可以换一种onfocus事件的书写格式达到注入的目的,输入:
forming’ οnfοcus=javascript:alert(‘handsome’) //
最后再与第二关一样触发onfocus事件,就可以过关。但最后有我一个小问题,我自己给了个解释,如果看到这里的各位有’地道的‘’官方的‘‘正确的’理解,欢迎指正。
图片中的input元素处的语句并没有闭合为什么不影响脚本注入?我的解释是,因为html是一种标记语言,实际电脑解析的时候,并不会带入html,所以不影响程序的运行。
forming" οnfοcus=javascript:alert(‘handsome’) //
输入:
判断出来和第三关情况大致相同,只是在input处从原来由字符变成实体换成删去’>‘和’<’,但是我们输入的字符串中没有’>‘或’<’,所以我们输入和第三关一样的答案尝试,发现还是不可以。我查看网页源码以后发现,是包裹name的值的符号由单引号变成了双引号,所以理论上只需要在第三关的基础上把包裹name值得’改为”,但是需要注意的是(在第三关提醒过)可能是网站源文件中给这一空所留的空间太小导致,输入太长,是不能注入成功的。
输入:
forming” >handsome
首先还是输入:
再查看源码
发现h2处的‘>’和’<‘被替换成了实体字符,而input处的‘<’和‘>’则没有被替换,同时‘script’被加上了’_’,证明script已经被屏蔽。与前几种情况都不完全相同,所以再输入:
forming" οnfοcus=javascript:alert(‘handsome’) //
判断一下
和刚刚情况一样,证明‘script’和’onfocus’都被屏蔽了。那么是时候请出另一种注入方式了,输入:
forming” >handsome
查看源码:
发现href没有被屏蔽,所以本质上是把有alert函数的文件以超链接的方式与网页连接,最终通过访问超链接的方式执行js脚本。
continue…