freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 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 128108
所属地 陕西省

一、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
文章目录