freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

XSS跨站脚本攻击新手教程(靶场实例)
可闻椿湫 2025-02-15 14:00:35 115011
所属地 陕西省

一、XSS漏洞原理

XSS属于客户端攻击,受害者最终是用户,但特别要注意的是网站管理人员也属于用户之一。这就意味着XSS可以进行“服务端”攻击,因为管理员要比普通用户的权限大得多,一般管理员都可以对网站进行文件管理,数据管理等操作,而攻击者一般也是靠管理员身份作为“跳板”进行实施攻击。


XSS的重点不在于跨站点,而在于脚本的执行。那么XSS的原理是:

恶意攻击者在web页面中会插入一些恶意的script代码。当用户浏览该页面的时候,那么嵌入到web页面中script代码会执行,因此会达到恶意攻击用户的目的。那么XSS攻击最主要有如下分类:反射型、存储型、及 DOM-based型。 反射性和DOM-baseed型可以归类为非持久性XSS攻击。存储型可以归类为持久性XSS攻击。

1.XSS漏洞出现的原因

1739597154_67b02562f2e0a36075f45.png!small?1739597154500

程序对输入和输出的控制不够严格,导致"精心构造“的脚本输入后,在输到前端时被浏览器当作有效代码解析执行从而产生危害。

2.XSS的分类

1、反射型XSS或不持久型XSS(中危)

2、储存型XSS 或持久型 XSS(高危)

3、DOM XSS

3.测试方法

1、工具扫描:APPscan、AWVS

2、手工测试:Burpsuite、firefox(hackbar)、XSSER XSSF

使用手工检测Web应用程序是否存在XSS漏洞时,最重要的是考虑那里有输入,输入的数据在什么地方输出。在进行手工检测XSS时,人毕竟不像软件那样不知疲惫,所以一定要选择有特殊意义的字符,这样可以快速测试是否存在XSS。

(1)在目标站点上找到输入点,比如查询接口,留言板等;

(2)输入一组"特殊字符+唯一识别字符",点击提交后,查看返回的源码,是否有做对应的处理;

(3)通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行js的条件(构造闭合);提交构造的脚本代码,看是否可以成功执行,如果成功执行则说明存在XSS漏洞;

二、反射型XSS

反射型xss攻击( Reflected XSS)又称为非持久性跨站点脚本攻击,它是最常见的类型的XSS。漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的非持久性XSS包含一个带XSS攻击向量的链接( 即每次攻击需要用户的点击)。

JavaScript 是互联网上最流行的脚本语言,这门语言可用于 HTML 和 web,更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。JavaScript 是一种轻量级的编程语言。

JavaScript 是可插入 HTML 页面的编程代码。

JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。

Javascript语法格式:

<script>

[Javascript代码]

</script>

<!DOCTYPE html>
		<html>
			<head>
				<meta charset="utf-8">
				<title></title>
			</head>
			<body>
				<script type="text/javascript">
				alert('第一个javascript程序');
				</script>
			</body>
		</html>

在XSS中常用的是以下这些标签

alert                        alert()方法用于显示带有一条指定消息和一个确认按钮的警告框

window.location      window.location对象用于获得当前页面的地址(URL) ,并把浏览器重定向  到新的页面

location.href            返回当前显示的文档的完整URL

onload                     一张页面或一幅图像完成加载

onerror                    在加载文档或图像时发生错误

onchange                HTML 元素改变

onclick                     用户点击 HTML 元素

onmouseover          鼠标指针移动到指定的元素上时发生

onmouseout            用户从一个 HTML 元素上移开鼠标时发生

onkeydown              用户按下键盘按键

三、DOM型XSS

通过JavaScript,可以重构整个HTML文档,就是说可以添加,移除等等,对页面的某个东西进行操作时,JavaScript就需要获得对HTML文档中所有元素进行访问的入口。这个入口就是DOM,所以在DOM型的xss漏洞利用中,DOM可以看成是一个访问HTML的标准程序接口。

特征:整个过程都是在前端完成的,没有后端的参与(纯前端的操作!)

四、存储型XSS

存储型XSS是指应用程序直接将攻击者提交的恶意代码存储到服务端保存,然后永久显示在其他用户的页面上。

比较常见的就是,黑客写下一篇包含恶意JavaScript代码的博客文章,文章发表后,所有访问该博客的用户,都会在它们的浏览器中执行这段恶意的JavaScript代码.黑客把恶意的脚本保存到服务端,所以这种XSS攻击就叫做"存储型XSS"。

1739597375_67b0263f8b28f3be54653.png!small?1739597375226

存储型XSS可能出现的位置:

(1)用户注册

(2)留言板

(3)上传文件的文件名处

(4)管理员可见的报错信息

(5)在线聊天框

(6)客服

(7)问题反馈区

(8)邮件信箱

理论上,见框就插。

满足存储型XSS的条件: 能够插入数据,插入的JS代码能够正常执行


存储型XSS的作用:获取Cookie,内网IP等等


JS恶意代码可以获取浏览器的Cookie,访问植入了XSS的网站,如果使用Burp抓包检查,会发现第一次访问正常页面,第二次会GET传参访问XSS平台。如果访问正常页面的时候修改Cookie,XSS是获取不到正确Cookie的。


获取Cookie之后,可以Burp抓包直接修改Cookie,登录他人账户,也可以在浏览器修改,当然,Cookie是有时效性的。


存储型XSS在SRC属于中危漏洞,在项目上属于高危漏洞,杀伤力较大。

三、XSS绕过

1.双引号,单引号

第二关

1739597450_67b0268a6b23a8b3e12cb.png!small?1739597450052


发现没有

查看源码发现有实体函数

1739597474_67b026a26050bda0c41c5.png!small?1739597474243

1739597488_67b026b04b3cf9906a9e8.png!small?1739597488059

再闭合一下

1739597509_67b026c50534f2d1deb8a.png!small?1739597508533

2.事件

1739597549_67b026ed5f2423695593c.png!small?1739597549125

第三关

单引号闭合发现被转义

1739597572_67b0270414b4569fae313.png!small?1739597571683

onclick

1739597588_67b02714b71a9e0662a3f.png!small?1739597588390

多了个单引号

1739597608_67b027285035198cf472b.png!small?1739597607945

试试onmouseover

1739597629_67b0273d095e8205fc844.png!small?1739597628768

第四关

1739597654_67b027560bf042075c601.png!small?1739597653727

可以看出过滤了<>

还是用事件" onmouseover="alert(1)

1739597675_67b0276bb9f41da058b87.png!small?1739597675432

3.JavaScript伪协议

第五关

1739597724_67b0279cb9772960864e4.png!small?1739597724318

发现过滤是在script中加“_”,同样的方法用事件试试


1739597745_67b027b18f0240dbc0fcd.png!small?1739597745244

发现还是过滤

使用JavaScript伪协议

"><a href=javascript:alert(1)>你好</a>

1739597761_67b027c170f61fa414246.png!small?1739597761323

第六关

1739597788_67b027dc78909177ad620.png!small?1739597788145

同样发现script被过滤,用上一关的方法

1739597802_67b027eac70ace1ca6685.png!small?1739597802439

发现href也被过滤,这时候优先考虑简单的大小写过滤

"><a Href=javascript:alert(1)>你好</a>

1739597822_67b027fe7635288d219bf.png!small?1739597822252

双写

第七关

1739597876_67b02834ea2166aa0d280.png!small?1739597876570

发现script被删除那么我们用双写

1739597860_67b028245c8ca9e6f0fb1.png!small?1739597866964

发现已经绕过,那再闭合一下就好了

"><scrscriptipt>alert(1)</scrscriptipt>

1739597877_67b0283502d0591695df5.png!small?1739597876571

16进制实体

第八关

1739597897_67b02849d5ea3a5257e4d.png!small?1739597897481

其中有两个注入点

1739597917_67b0285da20a73a50af1d.png!small?1739597917291

发现script和伪协议都被过滤

用16进制实体将t转为J但要告诉电脑用的是16进制所以将t改为t

1739597939_67b0287343c51ec5fd118.png!small?1739597938792

1739597959_67b02887cc02f615001ac.png!small?1739597959489

输入javascript:alert(1)

1739597975_67b0289761fe50e282ea7.png!small?1739597974987

换行

第九关

1739598011_67b028bbc60ee64145602.png!small?1739598011411

1739598018_67b028c285253a120c729.png!small?1739598018144

首先发现',"无法发生闭合,说明已经被过滤且第二注入点没有输出位,查看源代码发现第二注入点必须为http://

1739598034_67b028d26675ebcdb71fe.png!small?1739598034038

1739598048_67b028e0402b6617610a1.png!small?1739598047826

发现还绕过了javascript那么用16进制实体进行绕过

avascript:%0dhttp://%0dalert(1)

1739598066_67b028f27897502c9b7c7.png!small?1739598066316

隐藏

第十关

打开网页发现没有注入点,打开源代码发现是keyword和t_sort

1739598091_67b0290beca5c278f279a.png!small?1739598091693

在url栏上进行这两个参数的注入

1739598109_67b0291dae5f3d726c0f6.png!small?1739598109599

发现只有t_sort有用,经测试16进制失败所以试试实体

1739598139_67b0293b43946aada7dc3.png!small?1739598139105

发现还是没有弹窗但是注入进去了,是因为type="hidden"给隐藏了

输入type="text"给后面顶掉

1739598157_67b0294dda1800b82fe5d.png!small?1739598157655

第十一关

1739598205_67b0297dde22687636915.png!small?1739598205631

使用burp将Referer改为同第十关

1739598221_67b0298d8e685f3aa4b38.png!small?1739598221495


第十二关

为user-agent头

第十三关

为cookie

操作同十一关

第十五关

本关主要考点是ng-include

1739598815_67b02bdfd98095464b8ed.png!small?1739598815738

注意:1、地址外面得加单引号括起来

2、不执行script里面的代码

2、所以我们可以包含一下第一关的文件

http://127.0.0.1/xss-labs/level15.php?src='./level1.php'

1739598889_67b02c290ede3df69b3f8.png!small?1739598888681

3、由于不执行script里面的代码,所以我们可以用其他方法来触发level1.php中的xss漏洞:

http://127.0.0.1/xss-labs/level15.php?src='./level1.php?name=<img src="x" οnerrοr=alert(1)>'

1739598928_67b02c50c289de232216b.png!small?1739598928424


第十六关

<script>被过滤,用imag标签

1739598298_67b029da24d7c31a4795b.png!small?1739598297667

发现又把空格过滤了

1739598325_67b029f5f3a3b02ef8ce3.png!small?1739598325581

用url编码代替一下%0d

1739598341_67b02a0594fc3169d5f91.png!small?1739598341124

十七—二十关已经不支持了

# xss # xss攻击 # XSS漏洞 # xss挑战 # xss-labs
本文为 可闻椿湫 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
漏洞管理
可闻椿湫 LV.3
这家伙太懒了,还未填写个人描述!
  • 5 文章数
  • 2 关注者
C++编程
2025-02-17
SQL注入
2025-02-17
web运行原理
2025-02-15
文章目录