杂文4

NOTE-2020/3/1

明天上班,今天啥也不想学

读论文

帮女朋友看毕设,就得读论文,来总结一下吧:

  • 《A Survey on Web Application Security.》

    我们使用三个组件来组织调查,以评估Web应用程序(或配备防御机制)的安全性:系统模型,威胁模型和安全性。系统模型描述了Web应用程序的工作方式及其独特特性。威胁模型描述了攻击者拥有的力量和资源;安全属性定义了开发人员想要的Web应用程序行为的方面。在给定威胁模型的情况下,如果一个Web应用程序在所有情况下都无法保留某些安全属性,则该应用程序将不安全或容易受到相应攻击。

    1. web应用程序:
      • 语言:**一个PHP文件可能同时包含静态HTML标记和PHP函数,而一个网页可能嵌入了可执行的JavaScript代码。通过非结构化的字节序列表示应用程序数据和代码是Web应用程序的独特功能,可帮助提高开发效率。**
      • 状态:**会话状态可以在客户端(通过cookie,隐藏表单或URL重写)或服务器端维护。**
      • 逻辑:**身份验证和授权是许多Web应用程序中控制流的常见部分,通过Web应用程序可以限制其敏感信息和未授权用户的特权操作**
    2. web安全属性:
      • 输入有效性 意味着用户输入应先经过验证,然后才能被Web应用程序使用。*状态完整性*** 意味着应保持应用程序状态不受干扰;*逻辑正确性*** 意味着应按照开发人员的预期正确执行应用程序逻辑。
      1. 输入:一句话 “控制输入,过滤输出”
      2. 状态:没啥好说的,就是防止篡改,”检查源头,高度随机”
      3. 逻辑:**用户只能访问授权的信息和操作,并被强制遵循Web应用程序提供的预期工作流。**
    3. 防御:
      • 输入有效性:大概就是过滤,控制
        1. 用户输入标识,这要求可靠地标识所有不受信任的用户数据并将其与受信任的Web内容分开。(寻找危险输入点)
        2. 用户输入跟踪,要求用户数据在应用程序内的整个流中以一定的粒度可靠地被识别;(全局可控,就像代码审计我们第一步都是找可控的输入点,然后查询这个输入点的运动轨迹)
        3. 用户输入处理,这要求正确处理用户数据,并因此由应用程序以安全方式使用。(过滤呗)(各种过滤:白名单,过滤函数,waf)
        • 后面都是具体实现,,我也没特别看明白。比如强类型语言haskell开发的框架,可以很好的区分输入和web内容
          (百度了一下根本没人用)
      • 验证:
        1. 分析:静态,动态和混合分析。
          • 静态:就是单纯从代码层分析危险的地方。会有很多误报。比如 rips (服务器里有)
        2. 动态:顾名思义,不分析代码,分析运行时的信息流。
      • 测试:
        • 黑盒:web扫描。**“从已知的攻击模式库中生成输入向量”**
          • fuzz(模糊测试):**传统的模糊测试方法将随机输入反馈到Web应用程序中。** (就是也知道程序怎么写的,就随机去尝试,比如爆破,明白了吧)
      • 逻辑正确性:

        用户只能访问授权的信息和操作,并被强制遵循Web应用程序提供的预期工作流。

        1. 构造安全:就构造的时候注意安全行呗。
        2. 验证安全:一样的,静态动态,机制差不多
          1. 静态:

            首先,分析每个模块(在本例中为PHP文件)以提取“状态视图”,该视图表示此模块对状态变量的影响。然后,将单独的状态视图连接起来以导出预期的工作流图。他们在工作流图上应用模型检查,以识别可能发生的违反图遍历的情况,这表明存在违反工作流的漏洞

          2. 动态:

            首先,他们通过动态执行在每个程序功能上为会话变量和函数参数得出基于值的可能不变量,从而推断出应用程序的规格。然后,他们对应用程序源代码执行模型检查并与符号执行相结合,以识别对推断不变式的违反。特别是,它们仅利用“可靠的”不变量,这些不变量由沿代码内控制路径的显式检查支持,并捕获会话变量和数据库对象之间的关系。

          • EAR(重定向后执行漏洞): 当一个web应用返回重定向头给用户时,没有停止而是继续执行之后的代码
            1
            2
            3
            4
            if (!(request.getParameter(“pass”).equals(adminPswd))) {
            response.sendRedirect(“login.jsp”); }

            admin.critFunc();
            比如上面的代码,如果验证失败,跳转到login页面,但是还会执行critFunc()。

渗透阿里案例

  • 时间:2014年

    安全在其特性上是强烈依赖业务的,因为如果没有业务,安全的价值就不复存在。

  • 思路:

    • 利用二级域名在github尝试搜索相关代码。

      最直接的就是用户账号密码、以及入口点

    • 代码里会放密码的主要是邮件等相关,关键词:smtp,jdbc

    • 业务post的值是一个url,url=http://example.com 将http协议改为file协议可以读文件。

      • redhat系统可以读文件夹名,内容为文件夹内的文件。

算是一个思路的拓宽吧,大型目标渗透要依据业务!!


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!