文章目录
提前学习
后端代码 => 服务器所承担
前端代码 => 客户端承担(浏览器)ajax:Web数据交互方式,异步js和xml,使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。一句话概括就是不更新整个页面的前提下维护数据。比如搜索框的自动匹配
常用的事件:
onXXXX=XXXXX(满足XXX,触发XXX)
onerror(加载错误时触发)
onload(加载成功时触发)
oninput(输入框输入时触发)
HTML事件参考手册:https://www.w3school.com.cn/tags/html_ref_eventattributes.asp
同源策略:浏览器的同源策略,限制了不同源的Js,对当前页面的资源和属性的权限。同源策略保护了a.com域名下的资源不被来自其他网页的脚本读取或篡改
同源:同域名|ip、同端口、同协议
Cookie:用户的权限和身份。xss读取cookie方法:
<script>alert(document.cookie)</script>
Cookie注入和Cookie不是同一个东西;Cookie注入,只是因为目标站点滥用REQUEST接受传参
Cookie: 随机字符串 (多串);时效性:一次会话 或者 开发设定;浏览器不关闭,一次会话都存在(浏览器被关闭)
原则上而言Cookie需要完整的,但是实际上而言,Cookie不一定每一条都代表权限。
一、简介
-
XSS:跨站脚本攻击,是一种前端注入。
官方语言:XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
-
危害:盗取Cookie(用的最频繁的)、获取内网ip(攻击内网)、获取浏览器保存的明文密码、截取网页屏幕、网页上的键盘记录
-
成功执行的条件
用户可以控制输入,执行代码拼接用户输入数据
-
三种触发xss的JS:
- 标签风格:
<script>alert(1)</script>
- 伪协议:
<a href=Javascript:alert(1)>123</a>
- 事件:
<img src=# onxxx=alert(1) />
- 标签风格:
二、原理
- 官方语言解释:当动态页面中插入的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞。
- 口头语言解释:通过拼接恶意的html代码,js语句来执行攻击,实际上为html代码注入。
三、本质
- 本质:我们的传参被拼接进HTML页面,并且被执行
- 与SQL注入区别:SQL注入拼接的是操作数据库的SQL语句。XSS拼接的是网页的HTML代码,一般而言我们是可以拼接出合适的HTML代码去执行恶意的JS语句(总结:xss就是拼接恶意的HTML)
- xss是对输出过滤,不是输入
四、分类
检测是否存在XSS:在正常页面传参然后构建参数让他弹窗;经典的弹窗语句:
<script>alert(1)</script>
**测试网站是否存在XSS关键在于:**善于看网站源码,通过网站源码给你的信息来进行测试,并且要善于找输出点,这些地方都是需要重点排查的
xss平台:hk.sd
keepsession (保持会话) Cookie会过期(发包)
xss的过滤方法
进行转义实体编码输出,加标签,正则匹配替换
XSS一般在什么业务场景容易遇见?
重灾区:评论区、留言区、个人信息、订单信息等
针对型:站内信、网页即时通讯、私信、意见反馈
存在风险:搜索框、当前目录、图片属性等
功能:留言板、冲值渠道(冲X钱、冲X卡)、付款备注、发货备注(错误日志、登录日志、文章(不要审核的文章))
4.1 存储型:持久型xss,存入数据库,访问时触发
-
简介:你提交的数据成功的实现了XSS,存入了数据库,别人访问这个页面的时候就会自动触发
-
辨别方法:没有传递恶意参数的时候,如果能触发XSS就是存储型
-
易出现的地方:用户注册,上传文件的文件名处,管理员可见的报错信息,留言板等一些会存到数据库里的地方
-
在哪儿执行:服务器
-
存储型xss危害
用于盗取cookie,得到内网ip…和其他xss作用相同,只是触发和执行的方法原理不同
4.2 反射型:非持久型xss,只对本次访问有影响
-
简介:你提交的数据成功的实现了XSS,但是仅仅是对你这次访问产生了影响,是非持久型攻击
-
辨别方法:传参里面有恶意语句,如果能触发XSS就是反射型
-
易出现的地方:搜索框,页面跳转这些地方
-
在哪儿执行:浏览器
-
反射型XSS具体使用方法:欺骗用户去点击构造的链接
比如百度存在反射型XSS,然后你构建可以窃取Cookie的JS语句,然后传参点在URL那里,然后我们通过短链接将他变为短链接,然后发给想要获取别人信息的人。然后人家如果登陆状态访问了就会触发XSS
4.3 DOM型:不与后台服务器产生数据交互,通过DOM操作前端代码输出的时候产生的问题
-
DOM简介:DOM(文档对象模型)是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。
-
DOM型XSS:通过DOM可以让脚本动态的访问、控制网页
-
常用document对象属性:
document.domain (域名)
document.title
document.url
document.cookie 读取当前网页的Cookie [xss必备]
document.lastModified 获得当前页面的最后修改时间[识别伪静态必备]
document.write 向文档中写文HTML或者JS代码[Dom xss常见的存在方式]
补充:
-
静态网页 (纯前端代码HTML)不会随着访问改变最后一次修改的时间
动态页面加载静态页面,会造成伪静态的假象
-
动态网页 (有后端代码所参与的网页就是动态网页)
-
伪静态网页 动态网页假装成 静态页面(SQL注入)会随着访问改变最后一次修改的时间
eg:
http://lri45456.ia.aqlab.cn/news/detail/7.html
相当于http://lri45456.ia.aqlab.cn/news/?detail=7
一个伪静态的SQL注入 https://lri45456.ia.aqlab.cn/news/detail/8’ and 1=1 – qwe.html
-
-
Dom型XSS常见三种状态:
-
①document.write
可以接受一个独特的编码Native
eg:
<meta charset='utf-8'> <script> var pos=document.URL.indexOf("name=")+5; //取name=后面的值 var username = unescape(document.URL.substring(pos,document.URL.length)); //取name=后面的值 var r='<b>'+username+'</b>' document.write(r) </script>
-
②innerHTML:修改内容
eg:
<div id='zkaq'>NF</div> <input type="button" onclick=fun() value="点击有惊喜"> <script> function fun(){ var url=unescape(document.URL); var pos=url.indexOf("name=")+5; document.getElementById("zkaq").innerHTML="Hi, <b>"+url.substring(pos,url.length)+'</b>';} </script>
-
③eval
eg:
</h1>Hello World</h1> <script> var a =location.hash.substr(1); eval(a); // eval是高危函数。 把字符串当做代码进行执行 </script>
-
-
易出现的地方:在DOM位置上,不取决于输入环境上
-
Dom型XSS的优点:避开waf
因为有些情况Dom Xss的Payload,可以通过
location.hash
,即设置为锚部分从#
之后的部分,既能让JS读取到该参数,又不让该参数传入到服务器,从而避免waf检测。location.search
也类似,它可以把部分参数放在?
之后的部分。
五、xss检测
5.1 手工检测XSS
(考虑哪里有输入,输入的地方在哪里输出)
可得得知输出位置
输入敏感字符
<、>、"、'、()
,在提交请求后查看HTML源代码,看这些输入的字符是否被转义可输入一些便于查找的字符,如
AAAAA<>
,在ctrl+F时便于查找无法得知输出位置
在 web应用程序源代码不对外公开的情况下,在测试XSS是无法得知输入位置在何处显示
eg:一个留言板,
在div标签中:
<div>XSS TEST</div>
,在input标签中:
<input type="text" name="content" value="XSS Test"/>
,对于这种情况,通常会采用输入“/>XSS Test”来测试,本质:闭合
5.2 全自动检测XSS
XSSER、XSSF······
六、利用
6.1 XSS会话劫持
JS操作cookie
:不使用用户的账号密码就可登陆;
- 盗取用户的cookie,
document.cookie
;利用burpsuite替换cookie,或者利用浏览器自带的控制台(console)替换SWSSION会话
:维持会话状态的另一种形式,可能会存储在cookie中;
- cookie,session区别:cookie是将数据存储在客户端,而session则是保存在服务器端,仅仅是在客户端存储一个ID;session必cookie要安全
6.2 XSS Framework框架
6.3 XSS GetShell
6.4 XSS蠕虫
七、fineCMS v5.3.0
当你访问一个不存在的页面的时候 -> 记录你所访问的地址(错误日志)
https://blog.csdn.net/Fly_hps/article/details/84380485
八、防御
-
过滤(危险传参)
-
HTML实体化(HTML代码给编码,只有文本意义)
-
httponly (禁止JS代码获取Cookie)
①:ie浏览器不支持
②:让页面输出Cookie (探针文件:phpinfo());一键化搭建的网站容易有探针