SfTian XSS-Labs WP # XSS-labs WriteUp > XSS跨站脚本攻击是属于代码注入的一种,允许攻击者将代码注入到网页使其影响其他用户,例如:攻击者利用浏览器的动态展示数据功能,在HTML页面里嵌入恶意代码,当用户浏览该页时,这些潜入在HTML中的恶意代码会被执行,用户浏览器被攻击者控制,从而达到攻击者的特殊目的,如 cookie窃取等 ## XSS分类 - 反射型(非持久型XSS) > 这种攻击属于一次性攻击,只是简单的把用户输入的数据“反射”给浏览器恶意代码一般存放于链接当中,攻击者将包含XSS代码的恶意链接发送给目标用户,当目标用户访问该链接时,服务器接受该目标用户的请求并进行处理,然后服务器把带有XSS代码的数据发送给目标用户的浏览器,浏览器解析这段带有XSS代码的恶意脚本后,就会触发XSS,也就是说攻击者往往需要诱使用户点击恶意链接才能攻击成功 - 储存型(持久型XSS) > 攻击脚本会永久的存储在目标服务器的数据库或文件中,具有一定的隐蔽性,多见于论坛、博客和留言板,攻击者在发帖的过程中,将恶意脚本与正常信息一起注入到留言中,随着留言被服务器存储下来,恶意脚本也被存储到存储器中,当其他用户浏览这个被注入恶意脚本的留言时,恶意脚本就会在用户的浏览器被执行 - DOM型 > DOM型的XSS是通过修改页面DOM节点数据信息而形成的XSS跨站脚本攻击。不同于反射型XSS和存储型XSS,基于DOM的XSS跨站脚本攻击往往需要针对具体的 Javascript DOM代码进行分析,并根据实际情况进行XSS跨站脚本攻击的利用,DOM型XSS基于JS不需要和服务器交互,当用户请求一个包含XSS恶意代码的URL,服务器的响应不会以任何形式包含攻击者的脚本,当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码。 - 突变型(MXSS) > 一串看似没有任何危害的HTML代码,将逃过XSS过滤器的检测,最终进入某个DOM节点中,浏览器的渲染引擎会将本来没有任何危害的HTML代码渲染成具有潜在危险的XSS攻击代码 - 通用型(UXSS) > 不同于常见的XSS,UXSS是一种利用浏览器或者浏览器扩展漏洞来制造产生XSS的条件并执行代码的一种攻击类型 ## 常见漏洞点 - 数据交互的地方 - GET、POST、Cookies、headers - 反馈与浏览 - 富文本编辑器 - 各类标签插入和自定义 - 数据输入的地方 - 用户资料 - 关键词、标签、说明 - 文件上传 ## XSS常见的触发标签 ### 无过滤情况 ```html qq test aa a aa aa xss ``` ### 存在过滤情况 ```html < pt>alert("hello world!")pt> > ``` ### Level 1 访问Level1可以发现浏览器地址栏后面有个```?name=test```的传参,那就可以从这里入手,因为没有任何过滤所以直接用``````注入即可 ### Level 2 访问Level2再用刚才的XSS放到输入框里发现没有什么用,打开源代码阅读,找到有```没有找到和<script>alert("test")</script>相关的结果.```可知'<>'被实体化的HTML转义符取代了,那么我们就需要通过闭合绕过,输入框是``````那么payload就可以写```"> <"``` ### Level 3 本关没有转义单引号,所以用单引号来构造闭合,尝试后发现会被复制到value中,那么就需要调用JavaScript的onmouseover事件来绕过 ```' onmouseover=javascript:alert(1) '``` ### Level 4 本关没有转义双引号,做法和Level3一样 ```" onmouseover=javascript:alert(1) "``` ### Level 5 > **Javascript伪协议** 不同于应用层的http:// https:// ftp:// ,他们是真实存在的协议,而伪协议就是假装成一个协议来调用相关应用程序而来,最典型的例子就是```javascript:alert('js')```实际是把javascript:之后的内容当作JavaScript来执行 本关添加了关键词检测,使用```on```和`````` ### Level 7 本关会把script替换成空值,直接双写绕过即可```">alert('xss')``` ### Level 8 本关对以上关卡的绕过方式都做了过滤,就需要使用编码绕过,a标签的href属性可以解析OCT/HEX/Unicode编码,这里就可以用Unicode进行绕过把```javascript:alert()```直接用Unicode转换为```javascript:alert()``` ### Level 9 这关会判断传入的“友情链接”是否包含http://,他不会管你是不是http://开头,但如果不包含就会被过滤,这个时候需要把payload加入http://并注释掉```javascript:alert()/* http:// */``` ### Level 10 本关过滤了```<>```导致不能不和插入标签,输入框也被hidden,所以需要手动t_sort的标签修改为```type="text"```,并在payload后面也把输入框给显示出来,构造payload ```demo" onfocus=javascript:alert() type="text``` ### Level 11 > HTTP-referer,是只想指向来源的url的头 通过先前方法都没用,bing后发现是修改referer头,用burp抓包之后看到有referer头,直接修改```Referer: " onfocus=javascript:alert() type="text``` ### Level 12 上一关在input框给了t_ref的类,这关给了t_ua的类,那么就和User-Agent有关,那还是同样的方式```User-Agent: " onfocus=javascript:alert() type="text``` ### Level 13 是Cookie头这里做cookie修改 ### Level 14 > exif是可交换图像文件格式,可以记录数码照片的属性信息和拍摄数据 本关涉及exif xss漏洞,随便找一个图片然后在属性里面加入payload上传即可 ### Level 15 `ng-include`指令是文件包含的意思,可以用来包括外部html,那么就可以狗仔payload ```?src='/level1.php?name=哈哈哈'``` 点击引入的level1的哈哈哈即可绕过 ### Level 16 本关传入的参数会在第一个``````标签中出现并且会过滤空格及关键字等内容,那么就可以用url编码中的回车`%0A`来绕过空格```?keyword=``` ### Level 17 Flash不能搞了,搜了一下只是熟悉点击事件的```?arg02= onclick=alert()``` ### Level 18 和上题一样```?arg02= onmousedown=alert()``` ### Level 19 ```?arg01=version&arg02=here``` ### Level 20 ```?arg01=id&arg02=xss\"))}catch(e){alert(1)}//%26width=123%26height=123``` 取消回复 发表新评论 提交评论