第十篇 XSS漏洞学习和使用技巧

XSS漏洞

XSS攻击全称为跨站脚本攻击,允许恶意用户将将代码植入到web网站里,供其他用户访问,当其他用户访问到恶意代码的网友就会产生xss攻击

危害

  1. 盗取用户账号,比如普通用户账号、管理员账号、银行用户账号等
  2. 控制企业数据,包括读取、篡改、添加、删除企业数据,盗取企业核心数据
  3. 非法转账
  4. 强制发送电子邮件
  5. 网站挂马
  6. 控制受害者机器向其他网站发起攻击

漏洞类型

  1. 反射型

非持久化,需要用户去点击链接才会触发xss代码

正常访问页面:http://www.xss-labs.com/level1.php?name=admin

image

进行xss注入:http://www.xss-labs.com/level1.php?name=<script>alert('xss')</script>

image

  1. 存储型

持久化,代码是存储在服务器中,比如个人信息或发表文章等地方,加入代码,如果过滤不严,那么这些代码将存储到服务器中,用户只要访问该页面就会触发代码执行

  1. Dom型

是一个平台和语言都中立的接口,可以是程序和脚本能够动态访问和更新文档的内容、结构以及样式,是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞

常用注入关键词

script、on、src、data、href、"

靶场练习

靶场地址:https://github.com/do0dl3/xss-labs

leve2: "> 括号闭合

输入:http://www.xss-labs.com/level2.php?keyword= 发现页面正常显示

image

增加 "> 作为闭合

image

level3:input-onclick,onfocus事件触发

正常情况:

image

构建onfocus事件触发

http://www.xss-labs.com/level3.php?keyword=' onfocus=javascript:alert('xss') > 

在使用onfocus的时候,因为input需要重新获取焦点,才能触发弹窗

image

同时,我们查看源码,也发现<,>字符被htmlspecialchars函数进行替换了

level4:事件触发弹窗

测试注入,正常显示

image

仔细观察发现输入框对<,>进行了删除,可以尝试用事件触发的方式

image

level5: a标签注入

尝试注入

image

从输入框中发现script变成了scr_ipt,尝试使用事件注入

image

发现也对onfocus进行了转换,通过构建a标签来执行:http://www.xss-labs.com/level5.php?keyword="> <a href=javascript:alert('xss') > xss,需要对链接进行点击才能触发弹窗

image

level6: 大小写绕过

经过测试,发现都对script和事件触发都做了和level5一样的处理,尝试使用a标签的方式,发现也做了处理

image

尝试进行大小写绕过:http://www.xss-labs.com/level6.php?keyword="> <a Href=javascript:alert('xss') > xss

image

level7: 双写绕过

发现都对script和href进行了替换,同时尝试大小写绕过也一样被替换

image

构造双写:http://www.xss-labs.com/level7.php?keyword=" oonnfocus=javasscriptcript:alert('xss') >

image

level8: html编码绕过

常见编码

1. URL编码:将不安全的字符使用URL方式传输; 比如%20(空格)
2. html编码:防止特殊字符比如<>对页面造成影响,一般以&开头,分号结果.
    分为十进制编码和十六进制编码
3. javascript编码: 可以识别8进制/16进制和Unicode编码
    分为:三个八进制数字、两个十六进制数字、四个十六进制数字,如果不够个数,前面补0
4. base64编码: 一般需要配合data协议使用

尝试大小写,双写,发现都会被替换成下划线

image

尝试对html进行实体编码,找到一个比较好的工具:https://www.qqxiuzi.cn/bianma/zifushiti.php

分析页面,直接将input的输入填充到href里面,所以我们只需要对javascript进行实体编码就可以了:javascript:alert('xss')

image

image

level9: http绕过

测试发现提示链接不合法,应该是对链接做了校验

image

在添加http之后,发现链接添加成功,同时也对常用注入关键进行了替换

image

同时也发现,校验判断的是http:// 是否存在,所以可以采用level8的方式,进行编码,并将http:// 放到后面, 输入

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;:alert('xss') // http://

image

level10: 利用隐藏标签

尝试攻击:http://www.xss-labs.com/level10.php?keyword=<script>alert('xss')</script>

image

发现页面正常返回,但是没有出现弹框,分析控制台查看source,发现对<,>做了替换

image

发现有三个隐藏的input标签,尝试对其进行赋值:http://www.xss-labs.com/level10.php?keyword=keyword&t_link=t_link&t_history=t_history&t_sort=t_sort, 发现t_sort赋值成功了

image

将t_sort值改为:" type="text" onmouseover="alert('xss'),当鼠标移动到name='t_sort'的时候,就会发生弹窗

image

image

level11: 还原双引号

输入:http://www.xss-labs.com/level11.php?keyword=<script>alert('xss')</script>,

image

同样发现<,>也是被替换了,尝试和level10一样发起攻击,发现有四个隐藏标签:http://www.xss-labs.com/level11.php?keyword=keyword&t_link=t_link&t_history=t_history&t_sort=t_sort&t_ref=t_ref, 同样也只是有t_sort进行了赋值

在修改:t_sort=" type="text" onmouseover="alert('xss') 发现页面并没有发生任何变化,查看源码发现 " 被替换了

image

直接在通过控制台对将替换过的双引号进行还原,发现成功攻击了

image

image

level12: ua注入

和上面两关一样,也是<,>被替换

image

也是有4个隐藏标签,但是只有t_sort赋值成功,同样对t_sort进行值修改:" type="text" onmouseover="alert('xss') ,发现引号也是被替换了

image

采用level11的方式,发现也是可以攻击的

image

发现t_ua这个标签,尝试修改这个值,看是否存在攻击点:" type="text" onmouseover="alert('xss')"

image

发现也是可以实现攻击的

level13: cookie攻击

进行对cookie攻击:

image

image

image

level14: iframe攻击

发现进入level14的页面,发现页面加载出来了一个新的页面,应该是iframe导致的

image

ifame攻击主要用于嵌入第三方钓鱼网站

level15: src变量攻击

level15的页面十分干净,发现从level14跳过来自带了src变量:http://www.xss-labs.com/level15.php?src=1.gif

image

可以利用level1.php的直接攻击:src="level1.php?name=<img src=x onerror=alert('xss')>"

image

level16: 回车符%0a攻击

输入:http://www.xss-labs.com/level16.php?keyword=<script>alert('xss')</script>

image

发现对script,/进行替换,使用换行符:%0a进攻击:<a%0atype="text"%0aonclick="alert('xss')"

image

image

level17: 利用swf文件参数组合攻击

火狐不支持swf,chrome显示不支持该插件,但是页面至少还是可见的

image

电脑只有chrome,所以直接用这个来测试

从level16跳转过来携带两个参数:arg01=a&arg02=b,所以我们的攻击点主要集中在两个参数上

image

分析页面发现两个变量的值赋值到标签embed的src中:src="xsf01.swf?a=b",这样就可以通过对第二个参数进行闭合攻击:http://www.xss-labs.com/level17.php?arg01=a&arg02= onmouseover=alert('xss')

image

image

level18: 利用swf文件参数组合攻击

从level17进来的页面:http://www.xss-labs.com/level18.php?arg01=a&arg02=b, 所以攻击也主要集中在这两个变量,发现页面结构和level17,尝试使用level17的攻击方式:http://www.xss-labs.com/level18.php?arg01=a&arg02= onmouseover=alert('xss')

image

发现成功了

带着疑问,level17和level18的源码区别

level17

<!DOCTYPE html>
<!--STATUS OK-->
<html>
	<head>
		<meta http-equiv="content-type" content="text/html;charset=utf-8">
		<script>
			window.alert = function() {
				confirm("完成的不错!");
			}
		</script>
		<title>
			欢迎来到level17
		</title>
	</head>
	<body>
		<h1 align=center>
			欢迎来到level17
		</h1>
		<?php ini_set( "display_errors", 0); echo "<embed src=xsf01.swf?".htmlspecialchars($_GET[
		"arg01"]). "=".htmlspecialchars($_GET[ "arg02"]). " width=100% heigth=100%>";
		?>
			<h2 align=center>
				成功后,
				<a href=level18.php?arg01=a&arg02=b>
					点我进入下一关
				</a>
			</h2>
	</body>

</html>

level18

<!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 = "level19.php?arg01=a&arg02=b";
			}
		</script>
		<title>
			欢迎来到level18
		</title>
	</head>
	<body>
		<h1 align=center>
			欢迎来到level18
		</h1>
		<?php ini_set( "display_errors", 0); echo "<embed src=xsf02.swf?".htmlspecialchars($_GET[
		"arg01"]). "=".htmlspecialchars($_GET[ "arg02"]). " width=100% heigth=100%>";
		?>
	</body>

</html>

发现源码也没有什么区别

posted @   垒月  阅读(522)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示