经过上期皮卡丘靶场的暴力破解模块的学习,大家或许有了自信,原来网络安全也不难嘛,其实皮卡丘靶场是一个新手靶场,内容很基础,但是仍然希望大家怀有自信,继续学习
本期内容如果有前端基础更好,没有也没关系,对于用到的内容,本文大部分都有解释
本期软件使用:火狐浏览器(插件请看下图)(插件为可选内容)
介绍:
XSS(跨站脚本)概述
Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型: 1.反射性XSS; 2.存储型XSS; 3.DOM型XSS;
XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。因此在XSS漏洞的防范上,一般会采用“对输入进行过滤”和“输出进行转义”的方式进行处理: 输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入; 输出转义:根据输出点的位置对输出到前端的内容进行适当转义;
特点:
持久性:恶意脚本存储在服务器端,可以长期存在,对用户造成长期的危害。
大规模影响:恶意脚本会在多个页面上被执行,可以影响大量的用户。
隐蔽性:恶意脚本通常隐藏在数据库中,难以被检测到。
个人评价:给我的感受是作为增值漏洞比较好,最好的情况是拿到较高的权限后进行内容发布来扩大危害性
适用场景:适用于那些防护不严,可以进行内容发布的网站。比如相亲网站,校园留言墙等可以让大家都看到的东西
实际反馈:看个人能力,对新手比较鸡肋,甚至很难理解,但是仍然值得了解,便于后期提升(不要觉得没必要学,这个攻击如果遇到的话至少要知道怎么做,黑客会通过钓鱼或其他方式让你进入特点网站获取你的cookies(可以看作你的信息,你浏览器保存的密码)导致信息泄露)
给你们举一下例子(别真进去)
所以多了解没坏处,至少可以保护自己
一,反射型XSS(GET)
介绍
在反射型XSS(GET)中,攻击者通过一个恶意的链接(比如网址后面带有一些奇怪的代码),把恶意代码传递给服务器。(类似于恐怖片里的镜子,照过后会有可怕的事情发生)服务器就像一面镜子,把恶意代码反射回用户的浏览器,浏览器执行了恶意代码,用户就受到了攻击。
实践
先构建一个XSS(GET)攻击内容
<script>alert('xss')</script>
注释:这是一个前端语法语句意思是在用户浏览器弹出内容为"xss"的窗口
很明显,有长度限制,我们通过F12可以看到
更改限制
这下可以了
其实还有第二种方法(稍微有些麻烦,但是方便我们学习max hackbar插件)
使用max hackbar插件
先加载页面
然后添加攻击内容,提交即可
二,反射型XSS(POST)
介绍
和XSS的GET方式差不多,但是,是通过POST表单的方式进行,相比起GET,更加隐蔽,因为他不会在你的搜索栏出现,内容更加多,因为POST表单不会像GET方式一样有内容大小限制(这一点我们可以通过上一期的yakit抓到的包中看到,标有POST)
实践
根据上一期内容,我们可以知道账号密码为admin/123456
进入后仍然加入上面的XSS攻击内容(<script>alert('xss')</script>)提交即可
三,存储型XSS
原理:攻击者将恶意脚本存储在服务器的数据库或文件系统中,当这些存储的数据被正常用户访问时,恶意脚本会被自动执行,从而达到攻击的目的(类似于有一块公告留言板,但是黑客在上面写了催眠咒,你看到以后就中招了)
实践:
先输入些正常内容看看
加入XSS攻击内容
四,DOM型XSS
原理
我们先了解一下DOM是什么
可以把DOM想象成一个“网页的树状地图”。网页的每一个部分(比如标题、段落、按钮、图片等)都是这棵树上的一个“节点”。通过DOM,我们可以找到这些节点,并对它们进行操作,比如修改内容、改变样式、添加新的元素等。(对于不了解前端内容的朋友来说可能很抽象,可以理解为像是医学中的人体解刨图,DOM就是人体的神经系统,虽然没有很大的体积,但是贯穿全身,调动全身)
DOM型XSS就是有病毒或药物使"神经信号"被篡改,危害显而易见
实践
还是那个攻击内容,放进去试试
可以看到没反应,打开F12看看
我们先翻译一下这段内容(不懂前端的朋友可以跳过,本期内容理解起来确实比较有门槛)
<a href="<script>alert(" xss')<="" script="">'>what do you see?</a>
<a href="
这是HTML代码,表示一个超链接的开始。
<a> 是超链接标签,
href 是属性,用于指定链接的目标地址。
<script>
这是HTML中的脚本标签,通常用于嵌入JavaScript代码。
alert(" xss')
这是JavaScript代码,
alert() 是一个函数,用于在浏览器中弹出一个警告框。这里的警告框内容是
" xss'),这是一个字符串,但它的格式是错误的,因为它没有正确闭合。
<="" script=">
这部分代码是错误的HTML和JavaScript混合。
<="" 是无效的HTML代码,
script="> 也是错误的,可能是试图结束
<script>标签,但写错了。
'>这是HTML实体编码,
> 表示大于号(>)。
' 是单引号。
what do you see?
这是普通文本,表示“你看到了什么?”
</a>
这是超链接标签的结束。
由此可知,我们的攻击被化解了
我们根据反馈再做一个攻击内容
' onclick=alert('xss')>
看一下反馈
成功了
我们再来分析一下新的攻击内容
闭合后的内容:
<a href="" onclick="alert('xss')">'>what do you see?</a>
<a href=""
<a> 是HTML中的超链接标签,用于创建一个可以点击的链接。
href="" 是超链接的属性,用于指定链接的目标地址。这里的
href 属性值为空,意味着点击这个链接不会跳转到其他页面。
onclick="alert('xss')"
onclick 是HTML元素的一个事件属性,用于指定当用户点击该元素时要执行的JavaScript代码。
alert('xss') 是JavaScript代码,表示当用户点击这个链接时,会弹出一个警告框,警告框的内容是字符串
'xss'。这里的 'xss' 是一个提示信息,通常用于表示这是一个XSS(跨站脚本攻击)的测试。
>'>
> 是HTML中的大于号(>)。
> 是HTML实体编码,表示大于号(>)。在这里,> 被错误地写在了 > 之后,可能是为了混淆代码的意图。
what do you see?
这是链接的文本内容,用户在浏览器中看到的链接文字是“what do you see?”(你看到了什么?)。
</a>这是超链接标签的结束。
由此,我们可以知道,XSS攻击中,了解前端内容很重要,有利于我们制作XSS攻击内容,当然大家的时间有限,但是还是希望大家先继续学习皮卡丘靶场,之后,学习相对应的前端内容也会更加敏感
五,DOM型XSS-X
其实和DOM型XSS差不多,流程也差不多,但是区别是DOM型XSS是POST表单发送,DOM型XSS-X是GET方式,我们可以在浏览器的地址栏中看到内容
在此就不过多赘述了
六,XSS之盲打
原理
XSS盲打是一种特殊的攻击场景,而不是一种新的XSS漏洞类型。它的核心特点是攻击者无法直接看到自己输入的内容是否被前端页面执行,而是通过“盲狙”的方式,尝试让后台管理员触发XSS攻击(这个原理类似于上面说过的镜子,但是这里是一面可以看见,另一面看不见的单向镜)
由此我们可以知道,盲打对网站后端的管理员有危害,但是很佛系,因为如果管理员很长时间不看后台的话就难受了
实践
攻击内容仍然是
<script>alert('xss')</script>
根据提示,进入http://localhost:8080/vul/xss/xssblind/admin.php可以查看后端内容
可以看到刚进入就弹窗了,说明XSS盲打成功了,而且弹出两次说明两个输入框都有问题
七,XSS之过滤
原理
XSS过滤就像是一个“安全网”,用来防止恶意代码(比如`<script>`标签)进入网站,从而保护用户和网站的安全。(就像建筑上可以看到用个滤板把大块石头过滤掉,只留下建筑用的细沙)
实践
攻击内容还是
<script>alert('xss')</script>
可以看到被过滤了
通过F12我们可以看到这里过滤了<script>标签
我们先来分析一下这个过滤原理
未攻击前
攻击后
我们无法从F12中看出,那就需要一个一个尝试(有前端基础的朋友可以直接看源代码)
正则过滤测试
<scri<script>pt>
没反应
HTML实体编码测试
<script>
没反应
关键词过滤测试
<SCRIPT>alert(xss)</SCRIPT>
成功了
经过测试,我们可以知道很可能是关键词过滤,为什么呢,因为`<script>`标签作为HTML语言是不区分大小写的,而他的过滤又是过滤<script>,所以和我的</SCRIPT>有什么关系呢
或者了解前端语言的朋友已经想到了的,通过其他标签事件来弹出(不懂的朋友不要灰心,慢慢都会学到的,面包会有的,牛奶也会有的)所以我们可以看到有图标的标志出现
<img src=x onerror="alert(xss)">
至此,XSS过滤完成
八,XSS之htmlspecialchars
原理
首先我们要知道什么是htmlspecialchars,htmlspecialchars 是一种常用的XSS防御函数,主要用于对用户输入的数据进行转义处理,防止恶意代码被浏览器执行。(就像人体的肾脏一样,脏东西经过后就被过滤掉了)
了解以后,我们就应该差不多想到攻击的特点了,通过用htmlspecialchars难以招架的符号或组合攻击(类似于肾小球滤过功能受损,难以像正常一样过滤)
实践
还是用(<script>alert('xss')</script>)
可以看到没有反应,但是我们可以从里面看到全部内容,那么我们就来分析一下
<a href="<script>alert(" xss')<="" script>'=""><script>alert('xss')</script></a>
<a href="...">:
这是一个HTML的<a>标签,通常用于创建超链接。
<script>alert(" xss')<="" script>'=""><script>alert('xss')</script>:
这部分代码试图嵌入JavaScript代码。其中包含<script>标签,这是HTML中用于嵌入JavaScript代码的标签。
alert(" xss')和alert('xss')是JavaScript的弹窗函数,用于弹出一个对话框显示内容(这里是"xss")。
我们从分析中可以看出它已经被编码和格式化,使其无法直接执行
所以,我们用
' onclick='alert("xss")
闭合后的内容是
<a href="" onclick="alert("xss")">' onclick='alert("xss")</a>
1. HTML标签和属性
<a>:这是一个HTML超链接标签,通常用于创建可点击的链接。
href="":
href属性为空,表示这个链接不会导航到任何页面。
onclick:这是一个事件处理器属性,用于在用户点击链接时触发JavaScript代码。
2. onclick属性中的JavaScript代码
onclick="alert("xss")":
这是一个合法的onclick事件处理器,其中alert("xss")是一个JavaScript弹窗函数,
"是HTML实体编码的双引号(")。当用户点击这个链接时,浏览器会弹出一个对话框,显示内容为xss。
3. 恶意注入部分
>' onclick='alert("xss"):
这部分代码是恶意注入的,它试图在第一个onclick属性之后插入额外的代码。
':这是一个单引号,用于结束第一个onclick属性的值。
onclick='alert("xss"):这是另一个onclick事件处理器,它也会在用户点击时弹出一个对话框,显示内容为xss。
完成
九,XSS之href输出
原理
同样,我们首先要知道href是什么东西
href是前端用于创建超链接的标签
href输出是指将用户输入的内容插入到HTML的<a>标签的href属性中。如果用户输入的内容没有经过适当的转义或过滤,就可能被浏览器解析为恶意代码,从而导致XSS攻击(herf就像时修仙小说里面的传送法阵,但是魔道也就是黑客偷偷加入了坏的东西,不会让你传送到指定的位置,而是窃取你的修为也就是个人信息)
实践
还是老样子,先分析
<a href="<script>alert('xss')</script>"> 阁下自己输入的url还请自己点一下吧</a>
1. HTML标签和属性
<a>:这是一个HTML超链接标签,通常用于创建可点击的链接。
href="<script>alert('xss')</script>":
href属性被设置为一个包含<script>标签的字符串。
<script>标签是HTML中用于嵌入JavaScript代码的标签,而
alert('xss')是一个JavaScript弹窗函数,用于弹出一个对话框显示内容为xss。
链接的文本内容是“阁下自己输入的url还请自己点一下吧”,这是一种诱导用户点击链接的文本。
2. 恶意代码的作用
当用户点击这个链接时,浏览器会尝试解析href属性中的内容。
如果浏览器直接解析<script>alert('xss')</script>,它会执行其中的JavaScript代码,弹出一个对话框显示xss。
为什么没有反应
由于浏览器的HTML解析机制:
浏览器在解析HTML时,会严格按照HTML规范处理标签和属性。
在HTML中,
<script>标签通常不能嵌入在href属性中。浏览器会将<script>标签视为普通文本,而不是可执行的JavaScript代码。
因此,
<script>alert('xss')</script>会被当作href属性的普通文本值,而不是可执行的脚本。
那(' οnclick='alert("xss"))呢
很遗憾,也不行
为什么呢
<a href="' onclick='alert("xss")"> 阁下自己输入的url还请自己点一下吧</a>
1. HTML标签和属性
<a>:这是一个HTML超链接标签。
href="':
href属性的值被设置为单引号('),这是一个不完整的属性值。
onclick='alert("xss")':这是一个onclick事件处理器,用于在用户点击链接时触发JavaScript代码。
"是HTML实体编码的双引号("),因此实际执行的JavaScript代码是alert("xss")。
2. 为什么没有反应
HTML属性的语法错误:
href="':
href属性的值以单引号(')结束,这会导致HTML解析器认为href属性已经结束。
由于href属性的值不完整,浏览器会将其视为无效的属性值,不会尝试解析或执行任何内容。
onclick属性的解析问题:
onclick='alert("xss")':虽然onclick属性看起来是完整的,但由于href属性的语法错误,浏览器可能会将整个
onclick属性视为无效的HTML内容。
浏览器在解析HTML时,会严格按照HTML规范处理标签和属性。如果某个属性的值不完整或格式错误,浏览器可能会忽略整个标签或部分属性。
所以要重新构造攻击内容
javascript:alert(xss)
再看看,成功了
我们再次分析
<a href="javascript:alert(xss)">阁下自己输入的url还请自己点一下吧</a>
HTML标签和属性
<a>:这是一个HTML超链接标签,用于创建一个可点击的链接。
href="javascript:alert(xss)":这是<a>标签的
href属性,其值是一个JavaScript代码片段。
javascript::这是一个伪协议(pseudo-protocol),用于在
href属性中直接执行JavaScript代码,而不是导航到一个URL。
alert(xss):这是JavaScript代码,用于弹出一个对话框,显示xss。
点击行为
当用户点击这个链接时,浏览器会解析href属性中的内容。
由于href属性的值以javascript:开头,浏览器会将其视为JavaScript代码并执行。
因此,alert(xss)会被执行,弹出一个显示xss的对话框。
为什么这段代码能够成功
合规的HTML结构
<a>标签的href属性可以包含javascript:伪协议,这是一种常见的前端开发技术,用于在点击链接时执行JavaScript代码,而不是跳转到其他页面。
浏览器支持
所有现代浏览器都支持Javascript:伪协议。当浏览器解析到href="javascript:alert(1)"时,它会按照HTML规范执行alert(xss)代码。
没有语法错误
与之前提到的代码不同,这段代码没有语法错误。
href属性的值是完整的,且格式正确,浏览器能够正确解析并执行其中的JavaScript代码。
十,XSS之js输出
原理
首先什么是js:JavaScript(简称“JS”)是一种广泛使用的编程语言,主要用于实现网页的交互功能(同样是一种常用的前端语言,你浏览网页,用的小程序就用到了这个语言)
XSS攻击中的JS输出,是指攻击者通过用户输入的内容,让浏览器执行恶意的JavaScript代码。这种攻击通常发生在用户输入的内容被动态插入到JavaScript代码中时。(还是以修仙为背景,js相当于一个聚集了天地灵气,指哪打哪的圣物,但是就在于指哪打哪,魔道获取后用js把你的修为吸走,甚至拿走你的至尊骨)类似于之前提到的herf但是是另一种方式,属于殊途同归了
实践
攻击内容
<scirpt>alert('xss')</script>
很明显,没有反应
我们甚至看不到输入后包裹起来的代码,因为输入内容被JS语言动态生成了
但我们知道他是js方式进行的xss攻击,可是我们平时怎么知道呢,我们可以通过以下方式来检测
1,如果输入某些特殊字符(如<
、>
、"
等)时,输入框立即阻止输入或自动删除这些字符,很可能是通过JavaScript实现的过滤。(有时候可以通过上期的禁用JavaScript的方式防止过滤)
2,如果输入后没有任何即时反应,但提交后发现内容被过滤,可能是服务器端过滤
在这里可以告诉大家答案是(当然答案不唯一)
</script><script>alert('xss')</script>
因为,通过右键看得源代码可以发现闭合掉第一个</script>就可以了,但是本期内容对于从来没有接触过前端的朋友来说本来就很抽象了,所以为了方便学习,我们只通过F12查看内容,之后有时间我会单门出一期关于分析前端代码的文章
至此,XSS模块全部内容完成
经过本期的学习,我们可以知道XSS攻击需要细致的分析,同样我们可以知道,学习网络安全是一个慢活,你需要待在那里一行一行的分析他的代码更别说到了后面的前期信息收集的时候十天半个月可能都没盼头,甚至得一个月才能勉强获取到有用信息,但是这不代表我们就要放弃,正如伟大领袖毛主席说过的