基础知识
XSS全称Cross-site script(跨站脚本攻击),是在允许使用html和script标签作为输入时未进行编码和过滤显示在页面时导致的漏洞
-
分类
1.反射性
攻击者将包含恶意代码的连接发送给受害者(利用社工技术),受害者在点击链接后将恶意代码提交给服务器,服务器将将恶意脚本显示在页面上导致恶意代码在浏览器执行,使得攻击者窃取受害者数据或控制浏览器
2.存储性
攻击者将包含恶意代码的数据提交给服务器进行存储,当用户访问显示恶意代码数据的页面时,导致恶意代码在浏览器执行,使得攻击者窃取受害者数据或控制浏览器
3.DOM-based
发生在js写入到html过程中,使用js将用户提交的恶意内容写入html时,导致恶意代码执行,与反射型xss攻击手法类似,区别在于恶意脚本直接被js执行而不是通过提交到服务端再通过响应结果执行 -
常见攻击位置
回显用户数据的搜索框
回显用户数据的输入框
显示用户输入的错误信息
包含用户数据的隐藏标签
显示用户数据的任何页面,例如留言框和自由格式的评论框
HTTP header -
危害
窃取会话的cookie信息
创建虚假的请求
创建虚假字段用户收集用户的凭据
重定向页面到其他页面
创建伪造用户的请求
窃取机密信息
在用户系统上执行恶意脚本
在网页插入恶意代码
网络钓鱼(在url中插入合法的域名) -
防御
对(服务器端和客户端js)输出到html/script标签中的数据进行编码(不要使用黑名单过滤)
server->html:使用html encoder编码为html实体
server->js:使用js encoder进行编码
js->html:使用html encoder编码为html实体
题解
- 0x02
两次获得一样的cookie - 0x07
字段是否容易受到XSS攻击的简单方法是使用alert()或console.log()方法。 - 0x10
发现路由存在参数传递
test路由调用了lessonController控制器模块下的testHandler()函数
定位到lessonController控制器
testHandler()调用lessonContentView.showTestParam(param)函数
再次定位
发现该函数直接将test路由传递过来的参数直接显示到页面上,存在XSS
- 0x11
利用方式 < img src="" οnerrοr=‘alert(webgoat.customjs.phoneHome())’>