这是我参与「第五届青训营 」笔记创作活动的第18天。
一、本堂课的重点内容
- 跨站脚本攻击XSS
二、详细知识点介绍
跨站脚本攻击XSS
攻击者将恶意脚本注入到前端页面,用户访问页面时,恶意脚本被执行,可能导致用户隐私泄露或变成矿机。
原因:开发者盲目信任用户提交的内容,将用户提交的字符串当做DOM。
特点:
- 难以从UI上感知
- 主要是窃取用户信息,cookie、token
- 绘制UI,如弹窗,诱骗用户点击或填写表单
类型:
- 存储型XSS:会存到数据库中,用户访问页面会涉及数据库的读写,只要用户访问页面就可以触发XSS。
- 反射型XSS:通过URL攻击,不会存到数据库中,如
host/path?param=<script>alert(1)</script>,前端直接将param中的数据写入DOM中则会触发xss - 基于DOM的XSS,不需要服务器参与,恶意攻击的发起和执行全在浏览器中完成。也是从URL内插入,但反射型XSS是从服务器端注入,而基于DOM的完全在前端注入。
- Mutation-based XSS,利用了不同浏览器渲染DOM的特性,按浏览器进行攻击
跨站请求伪造CSRF
在用户不知情的情况下,利用用户的权限如cookie,构造http请求,窃取或修改用户敏感信息。
- 用户打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
- 用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
- 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
- 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
- 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
注入攻击
注入不局限于SQL注入,还包括命令行注入、OS命令注入
SQL注入:
- 服务器读取请求字段
- 直接以字符串形式拼接SQL语句
重要文件:
- /etc/passwd
- /etc/shadow
- ~/.ssh
- /etc/apache2/httpd.conf
- /etc/nginx/nginx.conf
服务端请求伪造 SSRF
如果“请求伪造”发生在服务器端,那么这个漏洞就叫做“服务器端请求伪造”即SSRF。
- 服务器接收了来自于客户端的URL地址,并由服务器发送该URL请求
- 对用户输入的URL没有进行恰当的过滤,导致任意URL输入
- 没对响应的结果进行检验,直接输出。
可能导致:
- 端口扫描
- 内网web应用指纹识别
- 攻击内网应用
- 读取本地文件
拒绝服务攻击 DoS
通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而雪崩效应。
正则表达式-贪婪模式
const greedyRegExp='/a+/' 贪婪模式,有多少匹配多少
const greedyRegExp='/a+?/' 有一个就可以了
基于正则表达式的DoS
/^((ab)*)+$/,如果输入字符串是ababababababa则会回溯式匹配,先匹配最长的,即最多的若干ab重复,发现最后一个a匹配不上,然后就减少一个ab尝试,不断尝试减少一个ab,发现最终也匹配不上。
攻击者可以利用这一点,传入一个容易发生回溯行为的字符串,导致服务器回溯匹配,影响性能。
DDoS
短时间内发送大量僵尸设备的请求流量,服务器无法及时响应
一般不限制在域名访问,而是直接的IP访问,也不区分接口,主要就是想耗尽资源。
传输层的攻击
中间人攻击,可以实现窃取信息,篡改信息等,双方进行明文传输,且未进行身份校验。
三、实践练习例子
XSS
存储型
// 服务端
...
await db.save({
content,
id
})
...
// 客户端
...
ctx.body=`<div>${content}</div>`
...
// 攻击者提交的content
content:`<script>alert("xss")</script>`
Mutation
<noscript><p title="</noscript><img src=x onerror=alert(1)>">
//会被浏览器解析为
<div>
<noscript><p title="</noscript>
<img src=x onerror=alert(1)>
">
<div>
四、课后个人总结
本节课学习了Web攻击的常见场景,包括XSS、CSRF、注入和拒绝服务攻击等,Web攻击场景非常多样,本节课只是展示了一些典型案例,当前Web漏洞复杂多样,以钓鱼攻击和逻辑漏洞攻击的方式更加难以察觉,造成的危害也更加严重。
五、参考链接
跨站点请求伪造(CSRF)_悠然予夏的博客-CSDN博客_跨站请求伪造
【SSRF01】服务器端请求伪造——漏洞基础原理及攻防_Fighting_hawk的博客-CSDN博客