• 2019.11.9读书笔记


    1. 一个应用程序可能通过使用 HTTP Referer 消息头实施访问控制,但它的正常

    行为并没有公开表露这一点。如何检测出这种缺陷?选择一系列你有权访问的重要应用程序功能。通过提交经过修改的 Referer消息头或不带该消息头的请求访问以上每一项功能。如果应用程序拒绝这些请求,则说明它很可能易于受到攻击。然后,尝试通过另一个不具有相关权限的用户提出相同的请求,但每次提交原始的 Referer 消息头。如果应用程序现在接受这些请求,则说明应用程序肯定易于受到攻击。
    2. 登录一个应用程序后,被重定向到以下 URL:
    https://wahh-app.com/MyAccount.php?uid=1241126841
    应用程序似乎向 MyAccount.php 页面提交一个用户标识符。已知的唯一标识符是
    自己的标识符。如何测试应用程序是否使用这个参数以不安全的方式实施访问控
    制?应测试以下测试(按效率排序):(1) 使用相同的语法格式将 uid 值修改为其他值。如果应用程序仍然返回你自己的账户资料,则说明应用程序可能不易于受到攻击。(2) 如果能够注册或以其他方式访问另一个用户账户,可以使用该账户登录以获得其他用户的 uid 值。然后使用自己的原始用户权限,并用这个新 uid 值替代自己的 uid 值;如果这时应用程序显示有关其他用户的敏感数据,则说明应用程序易于受到攻击。(3) 使用一段脚本从自己的 uid 获得数千个值,并确定(如果提交这些值)应用程序是否会返回任何其他用户的资料。(4) 使用一段脚本请求介于 0 和 9999999999 之间的随机 uid 值(在本示例中),并确定应用程序是否会返回任何其他用户的资料。
    3. 因特网上的一个 Web 应用程序通过检查用户的来源 IP 地址实施访问控制。为
    什么这种行为可能存在缺陷?攻击者可以假冒其他用户的 IP 地址,虽然实际上要做到这一点可能极其困难。更重要的是,如果因特网上的多个终端用户位于同一 Web 代理服务器或 NAT防火墙之后,则这些用户可能共享同一 IP 地址。在这种情况下,要使基于 IP 的访问控制发挥效率,一种方法是将其作为深层防御措施,以确保尝试访问管理功能的用户位于组织的内部网络中。当然,那些功能还应由强大的身份验证和会话处理机制进行保护。
    4. 某应用程序的唯一用途是为公众提供可搜索的信息仓库。该应用程序并未使
    用任何验证或会话管理机制。该应用程序应执行何种访问控制?该应用程序并未对访问权限进行任何水平或垂直划分,因此没有必要实施访问控制来区分不同的个体用户。即使所有用户均属于同一类别,应用程序仍然需要限制用户可以执行的操作。一个强健的解决方案是应用最低权限原则,以确保应用程序体系架构中的所有用户角色具有运行应用程序所需的最小权限。例如,如果用户只需要对数据的读取访问权限,则应用程序应使用一个低权限账户(仅具有对相关表的只读权限)来访问数据库。
    5. 在浏览一个应用程序的过程中遇到几个应防止未授权访问的敏感资源,它们
    的文件扩展名为.xls。这种情况为何应立即引起注意?这些文件为 Excel 电子表格,它们属于静态资源,应用程序无法对其实施任何访问控制(如通过动态脚本)。应用程序可能会通过其他方法(如 Web 服务器层)来保护这些资源,但通常情况下并非如此。应立即检查是否可以不经验证而访问这些资源。

    解释性语言是一种在运行时由一个运行时组件解释语言代码并执行其中包含的指令的语言,包括SQL,LDAP,Perl和PHP.
    编译型语言是这样一种语言:它的代码在生成时转换成机器指令,然后在运行时直接由使用该语言的计算机处理器执行这些指令。
    SQL查询结构中最常见的注入点是ORDER BY子句。ORDER BY关键字接受某个列名称或编号,并根据该列中的值对结果集进行排序。
    在ORDER BY子句中实施SQL注入与其他注入情形有很大区别。此时,数据库不会接受查询中的UNION,EHERE,OR或AND关键字。通常,实施注入攻击需要攻击者指定一个嵌套查询来替代参数,如用(select 1 where<<condition>> or 1/0=0)替代品名称。
    常用数据库如何构建services字符串:
    Oracle:'serv' || 'ices'
    MS-SQL:'serv'+'ices'
    MySQL:'serv' 'ices'[注意中意有空格]
    如果注入数字数据,则可以使用下面的攻击字符串来识别数据库。每个数据项在目标数据库中的求值结果为0,在其他数据库中则会导致错误。
    Oracle:BITAJND(1,1)-BITAND(1,1)
    MS-SQL:@@PACK_RECEIVED-@@PACK_RECEIVED
    MySQL:CONNECTION_ID()-CONNECTION_ID()
    MS-SQL和Sybase数据库起源相同,因此他们在表结构,全局变量和存储过程方面存在许多相似之处。实际上,后门描述的绝大多数针对MS-SQL的攻击技巧同样也曾适用于Sybase.
    在识别数据库时,MySQL如何处理某些行内注释也是一个值得关注的问题。如果一个注释以感叹号开头,接着是数据库版本字符串,那么只要数据库的实际版本等于或高于那个字符串,应用成序就会将注释内容解释为SQL;否则,应用程序就会忽略注释忽略注释内容,将他作为注释处理。
    SQL使用UNION操作符将几个SELECT语句组合到独立一个结果中。

    NULL值可被转换成任何数据类型。因此,如果不知道某个特殊字段的数据类型,只需在那个字段输入SELECT NULL即可。
    例如:' UNION SELECT NULL--
    'UNION SELECT NULL, NULL--

  • 相关阅读:
    N25_复杂链表的复制
    N24_二叉树中和为某一路径
    N23_判断是否为二叉搜索树的后序遍历序列
    N22_从上到下打印二叉树
    win7桌面小工具已停止工作解决办法
    C3P0数据库连接池使用
    js中的页面跳转
    怎么用js代码禁止浏览器的前进与后退?
    怎么在 Dos 下运行 PHP 和 MySQL 命令
    80端口被system 占用解决方法
  • 原文地址:https://www.cnblogs.com/wangtanzhi/p/11828227.html
Copyright © 2020-2023  润新知