Web运用代码自动化审计浅谈 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

Web运用代码自动化审计浅谈

申博_安全预警 申博 213次浏览 已收录 0个评论

从零开始java代码审计系列(三)

这篇文章将会学习java中的OGNL表达式注入,并分析实例s2-045,并且所有环境都会打包放到附件中,提供给有需要的,本文如果有理解错误的地方,麻烦师傅们斧正。 什么是OGNL 从语言角度来说:它是一个功能强大的表达式语言,用来获取和设置 java

0. 序

代码审计是找到运用缺点的历程。自动化审计一样平常有白盒、黑盒、灰盒等多种体式格局。白盒指经由过程对源代码的剖析找到运用缺点;黑盒一样平常不涉及到源代码,多运用隐约测试等体式格局来找到破绽;而灰盒则是诟谇连系的体式格局,应用黑盒特征来削减白盒的盘算庞杂度,运用白盒的信息来权衡破绽的有效性。

1. 基础观点

1.1 输入 (Source)

Web运用的输入,可所以要求的参数(GET、POST等)、上传的文件、Cookie、数据库数据等用户可控或许间接可控的处所。

比方PHP中的 $_GET / $_POST / $_REQUEST / $_COOKIE / $_FILES / $_SERVER 等,都能够作为运用的输入。

1.2 处置惩罚函数 (Filter)

处置惩罚函数是对数据举行过滤或许编解码的函数。这些函数会对输入形成影响,为破绽应用带来不确定性。

一样以PHP为例,如许的函数多是 mysqli_real_escape_string / htmlspecialchars / base64_encode / str_rot13 等,也多是运用自界说的过滤函数。

1.3 风险函数 (Sink)

风险函数又常叫做Sink Call、破绽点,是能够触发风险行动如文件操纵、敕令实行、数据库操纵等行动的函数。

在PHP中,多是 include / system / echo 等。

1.4 题目界说

一样平常以为一个破绽的触发历程是从输入经由过滤到风险函数的历程(Source To Sink),而自动化审计就是寻觅这个链条的历程。自动化审计的难点重要在于以下几个方面。

1.4.1 输入多样化

对Web运用来讲,能够的输入能够来自GET/POST的参数、Cookie、Url等多个处所,这些输入花样不流动,输入空间很大。

1.4.2 过滤函数庞杂

在审计的历程当中,从输入没有经由任何过滤函数就抵达风险函数的历程较少。然则自动化推断一些过滤数是不是能够绕过较为难题。

1.4.3 代码自身的庞杂度

古代Web框架,代码庞杂度极高,有相当多的动态加载和挪用的历程,为自动化剖析带来了难题。

2. 手艺基础

2.1 笼统语法树

笼统语法树,望文生义,是一种树形的数据结构。组织AST树的基础要领是将表达式的操纵数作为树结构的叶子,将表达式的操纵标记作为树结构的根,顺次轮回迭代举行组织。

————————————-

申博网络安全巴士站

申博-网络安全巴士站是一个专注于网络安全、系统安全、互联网安全、信息安全,全新视界的互联网安全新媒体。

————————————-

比方在JavaScript中, a=1 的笼统语法树以下:

{
    "type": "Program",
    "body": [
    {
        "type": "ExpressionStatement",
        "expression":
        {
            "type": "AssignmentExpression",
            "operator": "=",
            "left":
            {
                "type": "Identifier",
                "name": "a"
            },
            "right":
            {
                "type": "Literal",
                "value": 1,
                "raw": "1"
            }
        }
    }],
    "sourceType": "script"
}

2.2 程序掌握流图

AST树照旧是对照高层次的情势,个中模块之间的挪用、轮回等照旧不利于数据流的处置惩罚,因而引入了更底层的程序掌握流图来举行剖析。

程序掌握流图(Control Flow Graph,CFG)是静态剖析历程当中的另一种状况,能够反应程序代码掌握流程。实在,程序掌握流图是由一个进口、若干个出口构成的有向图,图中的每个节点代表一个基础块,基础块中能够有一系列递次实行的语句;图中的有向边,代表从动身节点到目的节点的掌握依靠干系。

3. 处理方案

3.1 风险函数婚配

白盒审计最常见的体式格局是经由过程查找风险函数来定位破绽,对照有代表性的对象是Seay开辟的审计对象。这个对象直接找出一切风险函数的地位,这类体式格局没有对挪用流程举行深入剖析,相对误报率会对照高。

不外一样的,这类体式格局在一些情况下能做到险些无漏报,只需审计者有耐烦,能够发明运用大部分的破绽,然则在高度框架化的代码中,这类体式格局能找到的破绽相对有限。

3.2 代码相似性比对

一些开辟者会复制其他框架的代码,或许运用种种框架。若是事前有竖立对应的破绽图谱,则可运用相似性要领来找到破绽。

3.3 掌握流剖析

在2012年,Dahse J等人设想了RIPS,该对象引入AST举行数据流与掌握流剖析,连系历程内与历程间的剖析获得审计效果,相对风险函数婚配的体式格局来讲误报率少了许多,然则一样的也增加了开支。RIPS初始的版本开放源代码,然后闭源举行商业化。

3.4 基于图的剖析

基于图的剖析是对掌握流剖析的一个革新,其应用CFG的特征和图盘算的算法,肯定程度上简化了盘算,对照有代表性的是微软的Semmle QL和NDSS 2017年宣布的文章Efficient and Flexible Discovery of PHP Application Vulnerabilities。

3.5 灰盒剖析

基于掌握流的剖析开支较大,因而有人提出了基于运行时的剖析体式格局,对代码举行Hook,当实行到风险函数时自动回溯输入,找到输入并推断是不是可用。

这类体式格局处理了掌握流剖析完成庞杂、盘算途径开支大的题目,在推断过滤函数上也有肯定的打破,然则灰盒的体式格局并不肯定会触发一切的破绽。fate0大佬开辟的prvd就是基于这类设想思绪。

5. 结语

在进修自动化审计的历程当中做了一点整顿,因而形成了这篇文章,程度有限,这篇文章讲得也对照浅。以后有时机再就各个手艺的细节做进一步剖析,不当之处还请列位师傅不惜指出。

反-反汇编patch学习(一)

最近在学习反-反汇编技巧,以此记录,patch的实例程序在附件中 仅仅是新手的学习记录,大佬轻喷 编写一个测试程序 这个程序没有什么意义,在IDA中把puts函数patch成nop用于添加我们自己的指令 肯定有更好的方法,但是这里只是为了练习 vi


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明Web运用代码自动化审计浅谈
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址