Web安全-攻击 | 青训营笔记

183 阅读4分钟

这是我参与「第五届青训营 」笔记创作活动的第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请求,窃取或修改用户敏感信息。

image.png

  1. 用户打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
  2. 用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
  3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
  4. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
  5. 浏览器在接收到这些攻击性代码后,根据网站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博客

服务端请求伪造(SSRF) - 知乎 (zhihu.com)

Web 开发的安全之旅.pptx - 飞书云文档 (feishu.cn)