XSS-DOM
Low等级
查看源码
无任何保护措施,直接尝试注入。
查看页面源码
1.document和windows对象:
1)document表示的是一个文档对象,window表示的是一个窗口对象,一个窗口下可以有多个文档对象。所以一个窗口下只有一个window.location.href,但是可能有多个document.URL、document.location.href
2)window对象:它是一个顶层对象,而不是另一个对象的属性即浏览器的窗口。
3)document对象:该对象是window和frames对象的一个属性,是显示于窗口或框架内的一个文档。
4)document 只是属于window 的一个子对像。
5)window.location 包含 href 属性,直接取值赋值时相当于 window.location.href
6)window.location.href 当前页面完整 URL
7)document.location 包含 href 属性,直接取值赋值时相当于 document.location.href
8)document.location.href 当前页面完整 URL
9)document.href 没有这个属性
10)document.URL 取值时等价于 window.location.href 或 document.location.href。在某些浏览器中通过对 document.URL 赋值来实现页面跳转,但某些浏览器中不行。
2.indexOf()可返回某个指定的字符串值在字符串中首次出现的位置。对大小写敏感。如果要检索的字符串值没有出现,则该方法返回-1
3.substring()用于提取字符串中介于两个指定下标之间的字符。
4.选择下拉列表内容,其值会赋给default再添加到url的末尾,再将其传给option标签的value结点,由于没有任何过滤,我们输入xss语句即可触发,例如等
构造攻击语句
Medium等级
查看源码
1.array_key_exists() 函数检查某个数组中是否存在指定的键名,如果键名存在则返回 true,如果键名不存在则返回 false。
2.stripos() 函数查找字符串在另一字符串中第一次出现的位置(不区分大小写),stripos(string,find,start)
3.header() 函数向客户端发送原始的 HTTP 报头,header(string,replace,http_response_code)
使用img标签试试
无弹窗
查看网页源代码,发现我们的语句被插入到了value值中,但是并没有插入到option标签的值中,所以img标签并没有发起任何作用。先闭合前面的标签,构造语句闭合option标签
尝试直接闭合标签
无弹窗
因为闭合了option标签,所以img标签并没有插入。于是继续构造语句去闭合select标签,这下img标签就是独立的一条语句了
尝试闭合option标签试试
查看源代码,可以看到语句已经插入到页面中了
High等级
查看源码
传入的参数如果不是French、English、German、Spanlish这四种字符串的话,就会直接跳到?default=English。白名单只允许传的default值为French English German Spanish其中一个。
构造攻击语句
English#
English#
Impossible等级
查看源码
不需要做任何事,在客户端处理