反射型XSS、存储型XSS和DOM型XSS的简介及XSS常见payload构造及变形

渗透学习

XSS跨站脚本之XSS基础



前言

本系列用于记录本人渗透学习的过程,主要内容围绕Owasp TOP 10展开。

XSS跨站脚本之XSS基础将用实验案例的形式记录学习三大常见的跨站脚本攻击:反射型XSS、存储型XSS和DOM型XSS,借此来掌握XSS攻击的基础知识。另外还会介绍到几种payload的构造以及变形来绕过一些简单的过滤。

本文只做学习用途,严禁利用本文提到的技术进行非法攻击,否则后果自负,本人不承担任何责任。

一、XSS漏洞原理

XSS指跨站脚本攻击,主要基于javascript语言完成恶意的攻击行为,因为javascript可以非常灵活的操作html、css和浏览器。XSS利用网页开发时留下的漏洞,巧妙的将恶意代码注入到网页中,因为浏览器不会判断代码是否恶意,只要代码符合语法规则,浏览器就会解析这段XSS代码,以达到攻击的效果。
XSS攻击
微博、留言板、聊天室等收集用户输入的地方,都有遭受XSS的风险。

前提条件:
1.需要向Web页面注入精心构造的恶意代码
2.对用户的输入没有做过滤,恶意代码能够被浏览器成功的执行

XSS危害:
1.盗取各种用户账号
2.窃取用户Cookie资料,冒充用户身份进入网站
3.劫持用户会话,执行任意操作
4.刷流量,执行弹窗广告
5.传播蠕虫病毒
6.攻击者能在一定限度内记录用户的键盘输入

接下来就通过几个实验分别了解和感受一下几种XSS跨站脚本

二、XSS分类

1.反射型XSS

反射型XSS是一种非持久型XSS,是最容易出现的一种XSS漏洞。用户在请求某条URL地址的时候,会携带一部分数据。当客户端进行访问某条链接时,攻击者可以将恶意代码植入到URL,如果服务端未对URL携带的参数做判断或者过滤处理,直接返回响应界面,那么XSS攻击代码就会一起被传输到用户的浏览器,从而触发反射型XSS。

流量走向:浏览器——>后端——>浏览器

实验:
在文本框中输入然后提交,在没有过滤的情况下直接被攻击。
测试结果
查看网页源代码,发现提交的payload被写进了页面的代码中
源代码
网页切换后再次进入没有触发弹窗,源码处也没有之前的语句,说明反射型注入是非持久的。

危险的PHP语句:

<?php
$XssReflex = $_GET['input'];
echo 'output:<br>'.$XssReflex;
?>

2.存储型XSS

存储型XSS是持久型XSS,它是危害最大的一种。该类型的XSS漏洞是由于恶意攻击代码被持久化保存在服务器上,然后显示到HTML页面之中。攻击者精心构造XSS代码,保存到数据库中,当其他用户再次访问这个页面,就会触发并执行恶意的XSS代码,从而达到攻击者想要的目的。

流量走向:浏览器——>后端——>数据库——>后端——>浏览器

实验:
输入和之前相同的注入语句,触发弹窗,源代码中同样有我们的恶意代码。与之前不同的是,这串代码被存储到了服务器的数据库中,当我们再次进入时还会触发弹窗,说明存储型XSS是持久型XSS。

危险的PHP语句:

if(isset($_POST['user'])&&isset($_POST['desc'])){
$log=fopen("sql.txt","a");
fwrite($log,$_POST['user']."\r\n");
fwrite($log,$_POST['desc']."\r\n");
fclose($log);
}
...

3.DOM型XSS

DOM型XSS与之前两种在原理上有本质区别,它的攻击代码并不需要服务器解析响应,触发XSS靠的是浏览器端的DOM解析。客户端上的JavaScript脚本可以直接访问浏览器的DOM并修改页面的内容。在客户端直接输出DOM内容的时候极易触发DOM型XSS漏洞。

流量走向:URL——>浏览器

在这里插入图片描述
在URL的defult值上构造payload

攻击完成后触发弹窗,但在查看源代码时并没有改攻击语句,说明这是在浏览器端实现的攻击。

危险语句:
document.getElementByld(“x”).innerHTML、document.write等
还有<img src=1 onerror=alert(1)>这样的payload,服务器返回包含上面脚本的HTML静态文本时,浏览器会把HTML文本解析成DOM。

4.XSS payload构造以及变形

1.利用【<>】构造HTML标签和标签

<h1 style="color:green;">XSS</h1>
<script>alert(/xss)</script>

2.利用HTML标签的属性值(伪协议)

<a href="javascript:alert(/xss/)">touch me!</a>

3.利用事件

img src='./smile.jpg'οnmοuseοver='alert(/xss/)'>
<input type="text" onclick="alert(/xss/)">

payload变型
1.改变大小写
2.双写关键词
3.用反引号代替单引号
4.用/代替空格
5.Tab与回车绕过关键词
6.使用HTML实体编码或URL编码

另外,还有用Burpsuite修改输入绕过前端检测、闭合标签和用注释符绕过服务端检测等方法,这些可以在自己学习碰到的时候进行尝试。


总结

以上罗列了XSS跨站脚本的三种类型,每种不同类型XSS都依据不同的PHP语句。通过这些实验案例了解到了XSS跨站脚本攻击的基础知识,在实际运用过程中会需要很多变种,可以在XSS跨站脚本的通用缺陷列表深入了解。

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
XSS漏洞是一种常见的网络安全漏洞,攻击者可以通过在网页中注入恶意的脚本代码来获取用户的敏感信息或者执行恶意操作。手工构造XSS payload是指攻击者通过编写特定的恶意代码来利用XSS漏洞。 在构造XSS payload时,攻击者通常会利用一些特殊的字符或者代码来绕过网站的过滤机制,使恶意代码能够被执行。一些常见XSS payload包括但不限于以下几种: 1. `<script>alert('XSS')</script>`:这是最简单的XSS payload,它会在网页中弹出一个提示框。 2. `<img src="x" onerror="alert('XSS')">`:这个payload利用了`<img>`标签的`onerror`事件,当图片加载失败时会执行其中的代码。 3. `<svg/onload=alert('XSS')>`:这个payload利用了SVG标签的`onload`事件,当SVG图像加载完成时会执行其中的代码。 4. `javascript:alert('XSS')`:这个payload利用了JavaScript伪协议,直接在URL中执行JavaScript代码。 需要注意的是,构造XSS payload是一种攻击行为,严禁利用这些技术进行非法攻击。本文提到的payload仅供学习和研究用途,请遵守法律法规,不要进行任何违法行为。 #### 引用[.reference_title] - *1* *2* *3* [反射XSS存储XSSDOMXSS简介XSS常见payload构造变形](https://blog.csdn.net/bwxzdjn/article/details/123645177)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bwxzdjn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值