记录一下学习和打XSS靶场的一些思路和经验
当前靶场来源于GithubXSS-labs
0x01
看到url有参数可以尝试利用,修改参数,直接插入XSS语句
0x02
尝试将XSS语句插入输入框,发现没有效果,原因是这关插入的是在标签里,而第一关是在标签外。标签中的内容会直接输出不会被解析,需要加入”>完成闭合后再执行XSS语句。
1 | ><script>alert(1)</script># |
后面的#是为了注释掉>
0x03
使用上一关的payload,发现不行,打开F12查看。
发现是过滤了双引号,可以使用单引号闭合,发现html对value的内容进行了实体化编码
可以使用点击事件,构造payload
‘onclick=’alert(1)’
0x04
使用第三关的payload发现不行,查看源码
不仅对<>括号进行了过滤,而且还进行了htmlspecialchars()函数过滤。尝试不添加<>并根据input标签构造payload。
0x05
尝试上一关的payload,F12查看,发现这关对on进行了过滤,尝试大小写,仍然不行。
试试最原始的方法插入>查看结果
发现没有屏蔽掉>闭合,尝试构造payload
1 | "/><a href="javascript:alert(1)"/> |
发现有个类似超链接的>,尝试点击。
0x06
尝试使用上一关的payload,结果当然是失败的,看看失败原因
发现对href进行了过滤,使用大小写混合,尝试一下结果。
1 | /><a hREf='javascript:alert(1)'> |
0x07
使用第六关的payload发现没有效果,F12查看内容
发现是过滤了href、script字符
在偶然的尝试中发现通过复写html事件的敏感字符可以绕过,尝试插入复写的XSS的payload
1 | "/><scrSCRIPTipt>alert(1)</scrSCRIPTipt> |
onclick等html事件也可以绕过
0x08
输入123,点击按钮,发现跳转到名为123的页面,实际上就是url的跳转。
试试使用
1 | javascript:alert(1) |
发现系统过滤了script字符,使用复写,发现也被过滤了
试试将payload编码
成功弹窗
0x09
继续使用上一关的百度链接,发现返回错误提示
尝试随便输入字符123
仍然不行,尝试加入http或者https,发现http可以生成链接https不行
查看源码发现加入了php的strpos函数,该函数的作用是对该字符串进行目的字符的搜索,若搜索不到则出现错误页面。
payload仍然使用上一关进行unicode编码,
尝试在unicode编码后的payload加入http://
发现可以成功转成我们想要的payload,但是有一个http的阻挡,仍然不成功。只需在http前面加入一个//
1 | javascript:alert(1)//http://www.baidu.com |
0x10
这关发现好像没有可以注入的点,打开F12,查看有参数keyword,尝试从url注入。同时发现了隐藏的输入框,并附带各自的参数。
尝试输入参数变量,查看页面返回的结果。
1 | http://192.168.1.106/xss-labs/level10.php?keyword=123&t_link=1&t_history=2&t_sort=3 |
发现sort变量的3被填入页面,猜测可能是sort有注入点,尝试插入XSS语句
1 | http://192.168.1.106/xss-labs/level10.php?t_sort=3"onclick="alert(1)" |
但是好像没有变化,可能是隐藏属性影响了语句的执行,因为需要通过点击,但是页面是不显示输入框,所以无法点击,在url后面写入 type=text
点击输入框