xss学习

本文详细介绍了XSS攻击的三种主要类型(反射型、存储型和DOM型),包括攻击原理、过程以及常见的检测和防御方法,如使用array_key_exists、str_replace、mysqli_real_escape_string等函数。同时讨论了不同级别的XSS实训案例,强调了代码审查和输入验证的重要性。
摘要由CSDN通过智能技术生成

1、xss相关知识

原理:

跨站脚本攻击。恶意攻击者常向web页面中插入恶意Script代码,当用户浏览该页时,嵌入其中web里面的Script代码被执行,达到恶意攻击的目的。

分类:

1、反射型xss:称为非持久xss,往往具有 一次性

2、存储型xss:称为持久型,攻击脚本存储在目标服务器的数据库中,具有更强隐蔽性

3、DOM型xss:使用DOM动态访问更新文档的内容、结构及样式

(服务器响应不会处理攻击者脚本,而是用户处理器处理)

过程:

            1.用户登录

            2.攻击者将自己准备的url提交给用户

            3.用户请求攻击者的url

            4.服务器对攻击者的js做出回应

            5.攻击者的js在用户浏览器执行

            6.用户的浏览器向攻击者发送会话令牌

            7.攻击者劫持用户

最常见的XSS检测代码:

<script>alert(1)</script> // 调用JavaScript语句

<img src=x οnerrοr=alert(1)> // src是错误的 就会调用error函数

<a href=javascript:alert(1)> // 点击a即可触发

2、实训:

1、DVWA XSS (Reflected)(low)

array_key_exists() 函数:

array_key_exists() 函数检查某个数组中是否存在指定的键名,如果键名存在则返回 true,如果键名不存在则返回 false。

观察代码发现未对变量进行限制,可以用script标签。输入<script>alert("XSS")</script>

内容与alert("")一致,说明成功。

2、XSS (Reflected)(medium)

str_replac函数:str_replace(‘A’,‘B’,‘C’)将C中的A替换成B

该函数区分大小写。请使用 str_ireplace() 函数执行不区分大小写的搜索。

代码意思为:将变量中的<script>替换为空,因为区分大小写则可以用大写绕过输入<Script>alert("XSS")</script>

3、XSS (Reflected)(high)

此题用了正则表达式来将script替换为空,过滤了script标签可以用img来替代输入<img src=0 οnerrοr=alert("XSS")>

4、XSS Store(low)

打开时表单格式尝试在两个单元只能进行注入测试,发现name栏有最大长度限制,可在前端进行修改,修改后发现代码无限制,两个单元都可注入。

is_object() 函数用于检测变量是否是一个对象

mysqli_real_escape_string() 函数转义在 SQL 语句中使用的字符串中的特殊字符。

刷新会显示尝试过的注入,且有注入记录,是存储型特点。

5、XSS Store(medium)

对name进行限制,将<script>标签替换为空值,可用双写或大写来绕过。

对message进行限制:

addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。

预定义字符是:

  • 单引号(')
  • 双引号(")
  • 反斜杠(\)
  • NULL
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。

预定义的字符是:

  • & (和号)成为 &
  • " (双引号)成为 "
  • ' (单引号)成为 '
  • < (小于)成为 <
  • > (大于)成为 >

提示:如需把特殊的 HTML 实体转换回字符,请使用 htmlspecialchars_decode() 函数。

因此考虑在name中进行注入。

6、XSS Store(high)

对name进行过滤,过滤<script>标签,用<img>标签绕过。

7、XSS(DOM(low)

代码审计后发现无特变限制,但是限制了输入方式,可以用hackbar直接构造注入

8、XSS(DOM) (medium)

stripos() 函数查找字符串在另一字符串中第一次出现的位置(不区分大小写)。

注释:stripos() 函数是不区分大小写的。

过滤关键词,尝试替换

尝试后无反应,发现没有完全闭合,构造payload:</ select><img src=1 οnerrοr=alert(“xss”)>

9、XSS(DOM) (high)

先判断defalut值是否为空,如果不为空的话,再用switch语句进行匹配,如果匹配成功,则插入case字段的相应值,如果不匹配,则插入默认的值。

在URL中添加注释#注释的内容不会提交到服务器,而是在浏览器执行:

English#< script >alert(“x”);尝试成功

        

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值