xss又名跨站脚本攻击,也是代码注入的易一种。跟我前面学的sql注入和命令注入有点像。

命令注入拼接的是系统命令,操作系统去执行,攻击对象是服务器的操作系统。注释符是&,可以拿到服务器控制权。

sql注入拼接的是sql查询语句,数据库在执行,攻击对象就是数据库。注释符是#,可以窃取数据库。

xss命令拼接的是HTML/JavaScrip,浏览器在执行,攻击对象是其他用户的浏览器。

三种核心思路完全一样,都是用户输入被当作代码执行,区别就是执行环境不一样。

反射型xss:

payload通过URL传递
攻击者把恶意脚本拼接到URL里,发给受害者
受害者点击链接,恶意脚本被执行
payload不会被保存到数据库
每次攻击都需要生成新的恶意链接
前段会限制字符输入长度,快速测试就用f12修改限制,如果不行就用bp抓包修改
<script>alert(1)</script>
script:脚本开始(前面加/就是脚本结束)
alert:弹出显示()内容的窗口

存储型xss:

相较于反射型xss,存储型xss是攻击者在留言板发了一条恶意脚本,任何人访问都会被攻击,会永久存在

DOM型xss

反射型和存储型都是把输入拼接到HTML里返回给浏览器。而DOM型是浏览器直接的JavaScript代码从URL里取了参数,然后拼接到HTML,整个过程服务器不知道。

DOM型可以跟反射型一样构造恶意URL诱导点击,或者先创造一个反射/存储型植入一个无害脚本,脚本被浏览后在被攻击者本地动态创建DOM。

xss绕过方法

前段绕过
pikachu前端用maxlength限制了长度
f12找到输入框代码,删除限制

大小写绕过
后端只过了了<script>小写形式

拼凑
 后端把<script>标签替换为空
一般只会替换一次 比如<scr<script>pt>这样替换一个<script>就剩下<script>了

使用注释符干扰
<scri<!--test-->pt>(这里!后面没有空格,输入法的问题)
利用注释符干扰后端匹配,但浏览器能正常解析

编码
后端过滤了<script>标签,但是没办法过滤HTML实体编码。浏览器在解析HTML实体编码的时候会转回原字符从而执行脚本

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐