XSS-Labs练习

xss-labs漏洞练习

上一次我们练习了文件上传的漏洞,今天我们来看看这个xss跨站攻击漏洞,这个漏洞的作用就是通过在web 站点,向客户端交付恶意脚本代码,实现对客户端的攻击。

xss漏洞分为反射型,存储型,DOM型

第一关:

我们先来查看这一关,看到链接后面有一个name=test,当我们改变后面的值,发现页面里面的值也改变了,所以页面的值是由get的链接后面的name值来控制的。我们尝试在name后面输入最简单的xss, ,发现直接过关了。说明已经触发了xss漏洞。这个是在get链接里面控制的,所以这是个反射性漏洞。

第二关:

这一关我们发现有一个输入框,那肯定是在输入框这儿有xss漏洞,我们尝试输入发现没有成功,那说明格式不对,我们查看源代码,发现可以使用闭合,我们输入的值被赋予给了value:<input name="keyword" value="1"> 所以我们可以闭合这个标签,使script语句可以执行,可以构造 "><script>alert(1)</script>,发现成功绕过。

我查看了一下源代码,发现这个函数,htmlspecialchars(),这个函数的作用是把预定义字符,包括&,“ ,‘ ,<,>这些。这两个符号转化为html实例,不会当成标签来执行。所以我们不能在h2标签的地方闭合。

第三关:

我们来到这一关,尝试输入之前的js语句,发现没有用,于是我们查看一下源代码,发现在value的地方也使用了 htmlspecialchars() 这个函数,也就是说会把<>变成实例来执行,不会当成脚本来执行,所以我们不能出现<>,所以我们可以使用下面的方法。

使用onfocus,onfocus是javascript中在对象获得焦点时发生的事件,最简单的实例就是网页上的一个输入框,当使用鼠标点击该输入框时输入框被选中可以输入内容的时候就是该输入框获得焦点的时候,此时输入框就会触发onfocus事件.因此点击当前页面的输入框就可以完成弹框了。所以我们构造的语句是 'onfocus=javascript:alert(1)',前后面的引号是为了闭合value的引号。

使用onclick,这个和上面的函数一样,只是需要点击一下才会触发,构造语句'onclick=javascript:alert(1);'

使用onmousemove , 和上面的一样,只是需要将鼠标移到对应的地方,构造语句'onmouseover='alert(1);还有很多函数都有效果,这里不一一列举了。

第四关:

这个和上关有些类似,上一关的闭合是用的单引号,而这一关闭合用的是双引号,直接使用上面的语句,成功绕过。

看来一眼有源代码,发现和上一关并不一样,这一关是将<>这两个符号给替换掉了所以只要没有<>就行了,上面个的语句依旧适用。

第五关:

在这一关我们照旧输入最原始的,查看网页代码,发现在from表单中,input的value值中,script变成了sc_ript所以说这里对于script做了过滤,那我们尝试其他方法,使用oncilck来构造,"onclick="alert(1);,结果还是没有成功,发现对于on也是做了过滤,将on变成了o_n,查看页面的源代码,发现果然是这样,将<script,和on做了过滤。

那我们就可以构造一个链接的形式来触发js脚本,这样构造语句,"><a href=javascript:alert(1);,只要我们点击这个链接,我们就成功过关了。

第六关:

这一关我们尝试了之前的一些方法,发现不仅过滤了script ,on, 还有,href, src , 和data,于是我们查看源代码,发现对于输入的值没有做大小写的过滤,而在第五关的时候是把所有的大写转换为小写了的,所以我们不能利用大小写来突破,但是这一关可以,不管是href, src ,<script,都可以,但是利用data这个我不是很清楚,花了点时间在网上搞清楚了。

首先我们来看利用href,构造语句,"><a Href="javascript:alert(1)"便可以达到效果。

我们来看使用src 的方法:因为src是标签img中的参数,所以我们构造语句,"><img Src="#" one rror="alert(1)"便可以达到效果,这里这个src是图片的地址,一个#就表明是返回到本页面,而后面的Onerror 表示的是当图片加载失败的时候,就执行这个脚本代码。

我们来看使用但是script 要大小写混用,方便绕过。

还可以使用svg/onload=setTimeout('alert(1)',0),这个是加载svg文件的一个函数,当这个函数被加载的时候,就会执行这个时间,settimeout()这个函数的意思是在多少毫秒之后在执行这个语句。

data这个形式的语句是这样写的,src加载data和执行是一样的。base64表明使用的是base64编码,后面是内容。这个data除了在iframe中可以执行,还有这些:

<object data=data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg></object>
<embed src=data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg></embed>
<script src=data:%26comma;alert(1)></script>
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg"></a>

XSS-Labs练习

第七关:

这一关首先我输入<script,href,src,data,SRC,然后看一下回显怎么样,判断这一关的限制是什么,结果发现都不见了,说明对于这些都直接过滤了,包括大小写。我们查看源代码,发现对于上面的这些,都是用空字符代替了,我们发现这个只是执行了一遍,所以我们可以使用双写绕过。

"><scriscriptpt>alert(1);</scriscriptpt>
"><a hrehreff='javascrscriptipt:alert(1);'>
"><iframe srsrcc='dadatata:text/html;base64,JTNDc2NyaXB0JTNFYWxlcnQlMjgxJTI5JTNDL3NjcmlwdCUzRQ=='></iframe>     //不知道为什么执行不成功
"><object dadatata=dadatata:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg></object>    //不知道为什么执行不成功
"><img srsrcc='#' oonnerror='alert(1)'></img>

双写大部分都可以绕过。

第八关:

这一关我们尝试之前的值,然后查看源代码,发现是往href中添加链接,当我们直接使用javascript:alert(1)发现script被限制了,然后我们使用data流来尝试,发现data,src,href都被过滤了。

那我们来尝试一下编码,将javascript:alert(1)进行unicode的编码,

XSS-Labs练习

python把语句转换一下,一定要转换成 &#x ;这种格式的。成功绕过。

第九关:

这一关我们直接查看源代码,发现这个是和上关一样的,唯一不一样的是在对于输入的地方有一个检测,检测里面有没有http://,也就是检测输入的是不是一个链接,那么我们就可以在javascript的语句后面加上一个http://,但是这个语句一定要被注释掉,确保它不会影响我们的js语句,js中的注释是//,哦,对了,既然和上关一样的话,我们还是要用编码的方式来插入我们的j语句。所以整体的语句是&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;//http://,然后完美插入语句。或者用另一种注释/**/

&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;/*http://*/

第十关:

这一关我们打开,映入眼帘的没有需要输入的框框,所以我还以为是get提交参数的xss,但是当我输入之后,却没有什么变化,按F12查看网页代码,发现表单里面有三个input标签被隐藏了,我们尝试在get中输入这三个参数,看看哪个参数是有效的,测试发现t_sort这个参数会把输入的值加入到value中,那么这个就是一个突破点,我们尝试输入">,结果发现提交的参数会把<>过滤掉,那我们就使用点击触动," onclick=javascript:alert(1); type="text",后面的type是为了把type=hidden这个参数给取消掉,因为在html中,如果在一个标签里面有两个参数的话,后面的参数不会被执行,把这个标签给显示出来,因为我们要点击它呀。当我们输入这个之后,页面出现一个输入框,点击它,成功过关。

这一关还可以用onmousemove,onmouseover,onfocus等这些都是可以的。

第十一关:

这一关我们查看网页代码,发现这一关多了一个被隐藏的标签,叫做t_ref ,当我们从上一关进来之后,发现t_ref的value是上一关的网址,所以我们猜测这个t_ref是获取网页的referer。但是我们尝试其他三个标签,发现t_sort还是有值的,我尝试了之前的payload,但是都没有用,一查看源代码,发现t_sort这儿的值也被htmlspecialchars()了,相反,在referer这里,倒是没有什么过滤,所以我们要从这里下手,我们使用hackbar工具来访问,可以添加referer,把referer的语句写为:" onclick=javascript:alert(1); type="text这时候的type也是来取消这个隐藏。发现成功绕过。

用onmousemove,onmouseover,onfocus等这些也都是可以的。

第十二关:

这一关和上一关一样,但是不是来自referer,而是user_agent,所以我们在ua这里构造语句,语句和上一关一样,而且onmousemove,onmouseover,onfocus这些都是可以的。

第十三关:

这一关和上面的一样,不同的是来自cookie的,使用hackbar来添加cookie ,但是这儿有一个要注意的,在javascript:alert(1)后面不能加上;号,加上后面的type执行不成功,所以添加的cookie语句是user=" onclick="javascript:alert(1)" type="text

第十四关:

这一关的网页调用上好像有问题,但是估计是关于iframe的xss漏洞,在第七关的时候我们提到过,所以我们就略过。

第十五关:

这一关我确实没有什么头绪,看源代码也没有想法,于是只能网上找writeup,看来一圈,发现突破点在ng-include指令,这个指令的作用是

1、ng-include 指令用于包含外部的 HTML文件。

2、包含的内容将作为指定元素的子节点。

3、ng-include 属性的值可以是一个表达式,返回一个文件名。

4、默认情况下,包含的文件需要包含在同一个域名下。

而src输入的值是添加到ng-include中去了。我们只需要包含一个之前有过漏洞的文件,所以语句为src='level1.php?name=<img src=1 one rror=alert(1);></img>'文件要用引号引起来,就成功执行了。但是不知道为什么src='level1.php?name=<script>alert(1)</script>'执行不了。文件是加载出来了。

第十六关:

当我们在keyword后面输入语句的时候,发现在网页中直接显现出来了,当我们查看页面源代码的时候,发下我们输入的语句被放到了

中,那我们直接输入看能不能执行,结果发现script和斜杠被过滤了,那我们在里面加上一个标签,加入一个链接,但是我们发现空格也被过滤了,那我们该如何绕过呢?在html中,%0a可以当作空格来用,因为script被过滤了,可以在script中加一个%0a,所以最后的语句是<a%0ahref="javas%0acript:alert(1)">111</a>成功绕过。因为/被过滤了,所以我们也可以找一个单标签,<img%0asrc=1%0aonerror=alert(1)>也可以绕过。

第十七关:

这一关有两个参数,这两个参数会拼接到一起,最后访问到swf文件上了,我们可以给第一个参数前面加一个空格,这样参数一就会变成一个参数,但是我们又看不到这个标签,所以我们不能聚焦,点击,所以只能使用鼠标移动这个事件,所以构造的语句是:arg01= onm ousemove&arg02=javascript:alert(2)由于这关没有自动跳转,但是我们看代码发现是欧克的,所以直接点击下一关。

第十八关:

这一关和上一关一模一样,呃呃呃。

第十九关:

这第十九关和第二十关是关于反编译的问题,现在我还是不太懂,所以先放在这里,以后学会了在做。

上一篇:apk反编译、smali修改、回编译笔记


下一篇:查找search