关于XSS跨站的一些笔记
一.XSS的原理
1.XSS的本质
XSS的本质是一种前端漏洞,用户的数据被当成前端代码的一部分来执行,从而混淆了原本的语义,产生了新的语义.
比如在这里输入xiaodi,页面回显了xiaodi,如果把这换成js脚本那么就可以实现一些目的。(当然现实远远没有这么简单)
2.XSS的产生层面
如果网站使用MVC架构,那么XSS就发生在VIEW层,即在应用拼接变量到HTML页面时产生.在有用户提交数据进行输入检查的方法,其实并不是在真正发生攻击的地方防御.比如在线购物平台会将购买人的信息返回到服务器查看,这是如果使用注入语句填写在购买人信息中,工作人员在查看信息时注入语句就会执行,就可以实现一些功能了。
3.XSS的危害
或者说学会XSS攻击后咱能干啥呢,啊不,能避免坏分子干啥呢:
• 窃取管理员帐号或Cookie,入侵者可以冒充管理员的身份登录后台。使得入侵者具有恶意操纵后台数据的能力,包括读取、更改、添加、删除一些信息。
• 窃取用户的个人信息或者登录帐号,对网站的用户安全产生巨大的威胁。例如冒充用户身份进行各种操作,查看用户记录,真实ip,开放端口等。或者控制受害者机器向其它网站发起攻击。
• 进行大量的客户端攻击,DDOS攻击。
• 网站挂马。先将恶意攻击代码嵌入到Web应用程序之中。当用户浏览该挂马页面时,用户的计算机会被植入木马。
• 发送广告或者垃圾信息。攻击者可以利用XSS漏洞植入广告,或者发送垃圾信息,严重影响到用户的正常使用。
4.XSS的检测
• 检测WEB应用程序是否存在XSS漏洞,最重要的就是搞清楚在哪里可以进行注入,信息又在哪里输出。
• 在知道输入和输出位置时, 可以输入一些敏感字符,比如” ’ ()<>等,在提交请求后 查看HTML源代码,看这些输入的字符是否被转义,再进行相应的绕过。
• 无法得知输出位置时,看不到源码时,有可能无法得知输入数据到底在哪里显示。比如留言本, 留言之后要经过审核才显示,这时候就无法得知输入的数据在后 台管理页面是何种状态。
二.XSS的分类
1.反射型XSS
反射型跨站脚本也称作非持久型、参数型跨站脚本。这种类型的跨站脚本是最常见的,也是使用最广的一种,主要用于将恶意脚本附加到URL地址的参数中,参数作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。反射型跨站脚本经过后端不经过数据库。
比如说网站让我们输入最喜欢的球员:
提交后在url回显中发现message值被修改了
那么用检查是否存在XSS漏洞,如果有弹窗那么证明存在XSS漏洞。
2.储存型XSS
存储型XSS和反射型XSS的差别仅在于,提交的代码会存储在服务器端(数据库、内存、文件系统等),下次请求目标页面时不用再提交XSS代码(是一种持续的攻击)。最典型的例子就是留言板XSS,用户提交一条包含XSS代码的留言存储到数据库,目标用户查看留言板时,那些留言就会从数据库中加载出来并显示,于是出发了XSS攻击
如果存在储存型
留言储存在了对方的服务器中
那么在留言中就可以写入注入语句了
3.Dom型XSS
DOM型XSS是特殊的XSS,页面中有很多元素,浏览器会为这些元素创建对应的文档对象,每个对象都有属性和方法。通过构造js编辑文档对象,修改页面,获取DOM中的数据,DOM XSS代码并不需要服务器参与,出发XSS靠的是浏览器的DOM解析。
我们可以通过查看页面源代码来发现注入点所属的文件,然后通过修改变量或文件达到注入效果。
三.XSS的攻击手法
攻击手法
链接: 虽然没啥人看但是我还是会更新,因为这是我自己的笔记.
这里给下一篇关于XSS靶场的通关记录链接留个位置(i kill you 靶场),在下一篇同时会通过靶场通关的方式讲攻击手法和一些绕过waf的方法。
四.XSS的绕过方式
1.绕过httponly
httponly开启的表现:XSS攻击成功但获取不到cookie
httponly的作用:防止js读取cookie
在此之前说下,我们获取cookie的目的是为了获取用户身份,以此来登陆后台,httponly是防止js读取cookile,我们可以转而寻找后台管理员的账户密码。
浏览器未保存账户密码:需要xss产生登陆地址,利用表单劫持(需要登陆界面有跨站漏洞,利用有难度)。
浏览器保存账户密码:借助在后台的xss,使用存储型xss或者其他方式获取账户密码。
攻击思路
①以进入后台做为我们的目标
那么除了获取cookie之外,还可以直接账号密码登录,但是账号密码又分为两种情况,保存读取和没保存读取,也就是是否让浏览器记住密码了。
②保存读取:
攻击思路:读取保存的数据
③没保存读取:
攻击思路:表单劫持
前提:XSS跨站漏洞要产生在登录框那里
原理:管理员输入账号密码之后,一份发给服务器,另一份发给攻击者。
2. 绕waf
链接: 虽然没啥人看但是我还是会更新,毕竟这是我自己的笔记.
这里给下一篇关于XSS靶场的通关记录链接留个位置(i kill you 靶场),在下一篇同时会通过靶场通关的方式讲攻击手法和一些绕过waf的方法。
五.XSS漏洞的修复
对用户输入的数据进行全面安全检查或过滤,尤其注意检查是否包含HTML特殊字符。这些检查或过滤必须在服务器端完成,建议过滤的常见危险字符如下:
|(竖线符号)
& (& 符号)
;(分号)
$(美元符号)
%(百分比符号)
@(at 符号)
'(单引号)
"(引号)
'(反斜杠转义单引号)
"(反斜杠转义引号)
<>(尖括号)
()(括号)
+(加号)
CR(回车符,ASCII 0x0d)
LF(换行,ASCII 0x0a)
,(逗号)
\(反斜杠)
六.XSS的简单实战——pikachu靶场记录
1. 反射型XSS(get)
让cookie显示在弹框中
在url的message中注入:
<script>alert(document.cookie)</script>
2. 反射型XSS(post)
爆破完密码后和get一样
<script>alert(document.cookie)</script>
3. 储存型:注入后刷新页面
<script>alert(document.cookie)</script>
4. DOM
输入123
因为数据在herf中,所以构造js语句
javascript:alert(document.cookie)
点击what do you see
5. DOM2
查看源代码一样的在herf里还是用上面的句子用两次
6. XSS盲打
盲打就是没有实时回显,也不知道一些关键字有没有被屏蔽,注入成功的话效果也是会有的,就像用下面这句话会在后台管理员界面中弹出cookie。
<script>alert(document.cookie)</script>
登录后台后
7. XSS过滤
采用大小写混合绕过,其实不止这一种方法(会下下一篇靶场练习中细细道来)
8. Xss htmlspecialchars
储存在了herf里,那么用js
javascript:alert(document.cookie)