【xss基本介绍】

一、xss是什么

二、xss能做什么

三、xss分类及原理

反射型

存储型

DOM-based XSS



四、练习

反射型(reflected)

题目只给出了一个输入框,尝试输入任意值,发现会直接将输入打印在界面上

尝试输入来弹框:

存储型(stored)

题目有一个留言的功能,尝试在Message框中输入

点击Sign Guestbook来提交留言,提交之后查看网页源码,发现我们的输入没有被过滤,而且被
标签包裹着:

回到首页,点击Clear Guestbook清除所有留言

之后在Message中输入</div><script>alert(1)</script><div>

点击Sign Guestbook提交留言,之后就会触发存储型xss:

点击确认后关闭弹框,再次查看源码,发现我们写的js代码已经被插入到了页面中:

这样就触发了XSS

DOM型

页面中的js代码如下:

php 复制代码
<script>
if (document.location.href.indexOf("default=") >= 0) {
    var lang = document.location.href.substring(document.location.href.indexOf("default=")+8);
    document.write("<option value='" + lang + "'>" + decodeURI(lang) + "</option>");
    document.write("<option value='' disabled='disabled'>----</option>");
}

document.write("<option value='English'>English</option>");
document.write("<option value='French'>French</option>");
document.write("<option value='Spanish'>Spanish</option>");
document.write("<option value='German'>German</option>");
</script>

逻辑很简单,在获取url中defalult=之后的值后,将该值插入到<option value=后,而且该值没有经过任何的过滤

我们需要闭合标签,可以用下面的payload:

php 复制代码
'></option><script>alert(1);</script><!--

这样的话页面上原来的option标签就会变成下面这样:

php 复制代码
<option value=''></option><script>alert(1);</script><!--'>

完整的url如下:

php 复制代码
http://172.16.12.128/default='></option><script>alert(1);</script><!--

效果如下:

相关推荐
我命由我123456 分钟前
Element Plus 2.2.27 的单选框 Radio 组件,选中一个选项后,全部选项都变为选中状态
开发语言·前端·javascript·html·ecmascript·html5·js
Luna-player8 分钟前
第3章 Spring Boot的Web应用支持,个人学习笔记
前端·spring boot·学习
bugcome_com9 分钟前
【ASP.NET Web Pages】页面布局核心实战:从复用性到安全性,打造一致化网站界面
前端·后端·asp.net
Sylus_sui9 分钟前
Class 模型 + 跨组件状态(@Observed)+ 网络请求封装 + 本地存储全部是鸿蒙 Next/Stage 模型标准写法
前端
代码栈上的思考12 分钟前
消息队列持久化:文件存储设计与实现全解析
java·前端·算法
踩着两条虫19 分钟前
去“AI味儿”实操手册:从“机器脸”到“高级脸”,只差这三步!
前端·vue.js·ai编程
qq_2113874729 分钟前
基于LangGraph多agent
开发语言·前端·javascript·agent·langgraph
摸鱼仙人~1 小时前
Vue Todo 实战练习教程(简略版)
前端·javascript·vue.js
dzj8881 小时前
云朵字生成器-html
前端·css·html·云朵字
FlyWIHTSKY1 小时前
Vue 3 单文件组件加载顺序详解
前端·javascript·vue.js