2024年最新【XSS漏洞-01】XSS漏洞简介、危害与分类及验证(2),经典网络安全开发教程

学习路线:

这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成黑客大神,这个方向越往后,需要学习和掌握的东西就会越来越多以下是网络渗透需要学习的内容:
在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

3.3.1 节点树模型

DOM全称Document Object Model,中文为文档对象模型,使用DOM可以使程序和脚本能够动态访问和更新文档的内容、结构及样式 。
HTML 的标签都是节点,而这些节点组成了 DOM 的整体结构一一节点树。通过HTML DOM,树中的所有节点均可通过JavaScript进行访问 。 所有HTML元素(节点)均可被修改,也可以创建或删除节点 。
在这里插入图片描述

3.3.2 DOM型XSS

定义:DOM型XSS比较特殊。owasp关于DOM型XSS的定义是基于DOM的XSS是一种XSS攻击,其中攻击的payload由于修改受害者浏览器页面的DOM树而执行的。其特殊的地方就是payload在浏览器本地修改DOM树而执行,并不会传到服务器上,这也就使得DOM型XSS比较难以检测。

网页的生成及修改

  • 在网站页面中有许多元素,当页面到达浏览器时,浏览器会为页面创建一个顶级的Document
    object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件 。
  • 可以通过JS脚本对文档对象进行编辑,从而修改页面的元素 。 也就是说,客户端的脚本程序可以通过DOM动态修改页面内容,从客户端获取DOM中的数据并在本地执行。由于DOM是在客户端修改节点的,所以基于DOM型的xss漏洞不需要与服务器端交互,它只发生在客户端处理数据的阶段。

攻击方式:用户请求一个经过专门设计的URL,它由攻击者提交,而且其中包含XSS代码。服务器的响应不会以任何形式包含攻击者的脚本。 当用户的浏览器处理这个响应时, DOM对象就会处理XSS代码,导致存在XSS漏洞 。

4 漏洞验证

本博客内容仅供学习探讨,请勿滥用乱用

4.1 漏洞验证相关概念

POC:全称 ’ Proof of Concept ',中文 ’ 概念验证 ’ ,常指一段漏洞验证的代码。
EXP:全称 ’ Exploit ',中文 ’ 利用 ',指利用系统漏洞进行攻击的工具,即从漏洞检测验证到利用的工具。
Payload:中文 ’ 有效载荷 ',指成功exploit之后,真正在目标系统执行的代码或指令。
Shellcode:简单翻译 ’ shell代码 ',利用漏洞时所执行的代码,是Payload的一种。Shellcode也有很多种,包括正向的,反向的,甚至meterpreter。

4.2 漏洞验证相关概念之间的区别

(1)POC与EXP对比
POC是用来验证漏洞存在的,EXP是用来完整利用漏洞(包括从验证到利用全过程)的,两者通常不是一类,或者说,PoC通常是无害的,Exp通常是有害的,有了POC,才有EXP。
(2)Payload与Shellcode
Payload有很多种,它可以是Shellcode,也可以直接是一段系统命令。
(3)Payload与EXP
同一个Payload可以用于多个漏洞,但每个漏洞都有其自己的EXP,也就是说不存在通用的EXP。
(4)Payload模块
在Metasploit Framework 6大模块中有一个Payload模块,在该模块下有Single、Stager、Stages这三种类型,Single是一个all-in-one的Payload,不依赖其他的文件,所以它的体积会比较大,Stager主要用于当目标计算机的内存有限时,可以先传输一个较小的Stager用于建立连接,Stages指利用Stager建立的连接下载后续的Payload。Stager和Stages都有多种类型,适用于不同场景。

4.3 常见POC

可以用一段简单的代码(POC)来验证与检查漏洞的存在,常见的用于验证XSS漏洞存在的POC如下:

<script>alert(/xss/)</script>  //弹框,最常用
<script>confirm('xss')</script>  //弹出确认框
<script>prompt('xss')</script>   //弹出输入框

我们发现提交的代码<script>alert(/xss/)</script> ,被当作字符串输出在HTML页面中,浏览器会根据<script>标签识别为JS代码语句,并会执行它,执行弹窗操作。也就是说,可以执行其他任意JS代码,因此我们验证了XSS漏洞的存在性。

5 XSS漏洞验证实例

5.1 反射型XSS漏洞验证实例

反射型XSS漏洞常存在于参数中。本实验在XSS-labs第一关做验证。具体步骤如下:
(1)访问win2008R2SP1虚拟机上的xss-labs靶场,页面如下。
在这里插入图片描述

(2)点击图片,进入xss-labs靶场的第一关,如下所示
在这里插入图片描述
(3)我们将URL中的参数修改为?name=a回车,可以看到弹出以下页面,并将我们的内容显示在页面上。输入什么网页则返回什么,说明可能是一个XSS漏洞注入点。
在这里插入图片描述

(4)我们将参数修改为?name=<script>alert(/xss/)</script>,测试是否触发弹窗。回车可以看到弹出窗口,说明网站后台未对输入参数进行过滤,存在xss漏洞。
在这里插入图片描述

(5)我们右键网页,点击查看源码,如下。由于该网页没有对输入输出内容做任何的检验与过滤,导致这种异常的内容输出到客户端浏览器,浏览器对内容做解析时,将内容按script标签进行解析,故弹窗。

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");
 window.location.href="level2.php?keyword=test"; 
}
</script>
<title>欢迎来到level1</title>
</head>
<body>
<object style="border:0px" type="text/x-scriptlet" data="http://xss.tv/themes/default/templates/head.html" width=100% height=50></object>
<h1 align=center>欢迎来到level1</h1>
<h2 align=center>欢迎用户<script>alear(/xss/)</script></h2><center><img src=level1.png></center>
<h3 align=center>payload的长度:29</h3></body>
</html>

5.2 存储型XSS漏洞验证实例

存储型XSS漏洞常存在于数据库内容中,如留言板等。此处利用之前搭建的论坛网站的留言功能作为实验平台,该平台的搭建过程参考《【(SQL+HTML+PHP)综合】一个简单论坛网站的综合开发案例》。具体过程如下:

(1)我们登录访问上述网站,使用我们之前住过的账号a,密码1。登录后返回首页,点击“我要留言”。
在这里插入图片描述

(2)使用留言功能,留下如下的内容:。点击提交
在这里插入图片描述

(3)再次返回首页,可以看到刚刚留下的留言。
在这里插入图片描述

(4)点击该留言,出现弹窗,这就是存储型XSS漏洞。

在这里插入图片描述
(5)右键该页面,查看网页源码,如下。我们看到因为我们搭建的平台没有对输入输出内容做任何的检验与过滤,导致这种异常的内容输出到客户端浏览器,浏览器对内容做解析时,将内容按script标签进行解析,故弹窗。

<html>
<head>
<meta charset = "utf-8">
<title>留言论坛</title>
</head>
<body>
<h1>留言内容</h1><a href = './index.php'>返回首页</a><hr />
a:存储型xss<hr/><script>alert(/xss/)</script></body>
</html>

5.3 DOM型XSS漏洞验证实例

我们将以下代码存在phpstudy网站的根目录下的DOM-XSS.php文件中,稍后进行测试。该代码中的script标签内的内容意思是,定义一个变量a并赋值为URL,为a解码,将message=后面的内容写入到DOM树中。

<html>
<head>
	<title>DOM-XSS</title>
	<meta charset="utf-8">
</head>
<body>
<script>
	var a = document.URL;  //将当前页面的url赋值给变量a
	a = unescape(a);       //url有些代码是经过url编码之后的,此为将url编码进行解码
	document.write(a.substring(a.indexOf("message=")+8,a.length));
	//a.indexOf:字符串首次出现的位置,+8("message="为8字符)为取message=之后的内容
	//document.write将内容写到html页面中
</script>
</body>
</html>



(1)我们通过浏览器访问该网页,因为我们还没有给URL传递参数message,此处将内容以存文本的形式输出。
在这里插入图片描述
解析为什么页面这样显示:

  • a此处为http://172.16.1.1/DOM-XSS.php;
  • document.write(a.substring(a.indexOf(“message=”)+8,a.length));
    ①a为变量也即为对象,对象的访问为[对象名称.属性];
    ②a.indexOf(“message=”)是指message=开始出现时的起始位置,此处没有message=,即为0;
    ③a.indexOf(“message=”)+8:即为8;
    ④a.substring(a.indexOf(“message=”)+8,a.length):取截取a的值为字符串,即"http://172.16.1.1/DOM-XSS.php",从第8位开始,截取a的长度个字符;

(2)修改参数为?message=good,回车时页面显示good。
在这里插入图片描述
(3)修改参数为?message=<script>alert(/xss/)</script>,回车时则出现弹窗。
在这里插入图片描述

本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。

最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。

最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。

学习路线图

其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。

相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。

网络安全工具箱

当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。

项目实战

最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~

面试题

归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 29
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值