PHP自动化白盒审计技能与完成

访客6年前黑客文章1316

国内揭露的PHP自动化审计技能资料较少,相比之下,国外现已呈现了比较优异的自动化审计完结,比方RIPS是依据token流为根底进行一系列的代码剖析。传统静态剖析技能如数据流剖析、污染传达剖析应用于PHP这种动态脚本语言剖析相对较少,可是却是完结白盒自动化技能中比较要害的技能点。今日笔者首要介绍一下最近的研讨与完结作用,在此抛砖引玉,期望国内更多的安全研讨人员将精力投入至PHP自动化审计技能这一有意义的领域中。
0x01 根底常识
自动化审计的完结办法有多种,比方直接运用正则表达式规矩库进行定位匹配,这种办法最简略,可是准确率是更低的。最牢靠的思路是结合静态剖析技能领域中的常识进行规划,一般静态剖析安全东西的流程大多是下图的方式:

静态剖析作业所要做的之一件作业便是将源码进行建模,浅显一点讲,便是将字符串的源码转为便利于咱们后续缝隙剖析的中心表明方式,即一组代表此代码的数据结构。建模作业中一般会选用编译技能领域中的办法,如词法剖析生成token,生成笼统语法树,生成操控流程图等。建模作业的好坏,直接影响到后续污染传达剖析和数据流剖析的作用。
履行剖析便是结合安全常识,对载入的代码进行缝隙剖析和处理。最终,静态剖析东西要生成判别成果,然后完毕这一阶段的作业。
0x02 完结思路
通过一段时间的尽力,笔者和小伙伴也大致完结了一款针对自动化的静态剖析东西。详细完结思路正是选用了静态剖析技能,假如想深化了解完结思路,能够阅览之前发过的文章。 在东西中,自动化审计流程如下:

首要载入用户输入的待扫描的工程目录中一切的PHP文件,并对这些PHP文件做判别,假如扫描的PHP文件是Main file,即实在处理用户恳求的PHP文件,那么对这品种型的文件进行缝隙剖析。假如不是Main file类型,比方PHP工程中的类界说,东西函数界说文件,则越过不做剖析。
其次进行大局数据的搜集,要点搜集的信息有待扫描的工程中类信息的界说,如类地点的文件途径、类中的特点、类中的办法以及参数等信息。一起对每个文件生成文件摘要,文件摘要中要点搜集各个赋值句子的信息,以及赋值句子中相关变量的净化信息和编码信息。
大局初始化之后,进行编译前端模块的相关作业,运用开源东西PHP-Parser对待剖析的PHP代码进行笼统语法树(AST)的构建。在AST的根底上,运用CFG构建算法构建操控流图,并实时地生成基本块的摘要信息。
编译前端的作业中,假如发现灵敏函数的调用,就停下来进行污染传达剖析,进行进程间剖析、进程内剖析,找到对应的污点数据。然后依据数据流剖析进程中搜集的信息,进行净化信息和编码信息的判别,然后判别是否为缝隙代码。
假如上一步是缝隙代码,则转入缝隙陈述模块进行缝隙代码段的搜集。其完结的根底是在体系环境中保护一个单例形式的成果集上下文目标,假如生成一条缝隙记载,则参加至成果会集。当整个扫描工程成果之后,运用Smarty将成果集输出到前端,前端做扫描成果的可视化。
0x03 初始化作业
在实在的PHP审计中,遇到灵敏函数的调用,比方mysql_query,咱们就会情不自禁地去手动剖析之一个参数,看是否可控。事实上,许多CMS都会将一些数据库查询的办法进行封装,使得调用便利且程序逻辑明晰,比方封装为一个类MysqlDB。这时,在审计中咱们就不会搜索mysql_query要害字了,而是去找比方db->getOne这品种的调用。
那么问题来了,在自动化程序进行剖析的时分,怎么获悉db->getOne函数是个数据库的拜访类办法呢?
这就需求在自动化剖析的初期就要对整个工程的一切类与界说的办法进行搜集,以便于程序在剖析的时分寻觅需求跟进的办法体。
关于类信息和办法信息的搜集,应该作为结构初始化的一部分完结,存储在单例上下文中:

一起,需求辨认剖析的PHP文件是否是实在处理用户恳求的文件,因为有些CMS中,一般会将封装好的类写入独自的文件中,比方将数据库操作类或许文件操作类封装到文件中。关于这些文件,进行污染传达剖析是没有意义的,所以在结构初始化的时分需求进行辨认,原理很简略,剖析调用类型句子和界说类型句子的份额,依据阈值进行判别,错误率很小。
最终,对每个文件进行摘要操作,这一步的意图是为了后续剖析时碰到require,include等句子时进行文件间剖析运用。首要搜集变量的赋值、变量的编码、变量的净化信息。
0x04 用户函数处理
常见的web缝隙,一般都是因为风险参数用户可控导致的,这种缝隙称之为污点类型缝隙,比方常见的SQLI,XSS等。 PHP内置的一些函数自身是风险的,比方echo可能会形成反射型XSS。但是实在代码中,没人会直接调用一些内置的功用函数,而是进行再次封装,作为自界说的函数,比方:
1
2
3
4
function myexec($cmd)
{
    exec($cmd) ;
}
在完结中,咱们的处理流程是:
使用初始化中获取的上下文信息,定位到相应的办法代码段
剖析这个代码片段,查找到风险函数(这里是exec)
定位风险函数中的风险参数(这里是cmd)
假如在剖析期间没有遇到净化信息,阐明该参数能够进行感染,则映射到用户函数myexec的之一个参数cmd,并将这个用户自界说函数作为风险函数寄存至上下文结构中
递归回来,发动污点剖析进程

[1] [2]  黑客接单网

相关文章

钓鱼攻击姿势老套,不明真相还是上当-黑客接单平台

近来,深服气安全团队捕获到一同高度个性化的垂钓进犯事情,进犯者针对用户企业假造了多份带有专业内容的进犯文档,经过邮件发送到方针邮箱,妄图诱导用户翻开附件中的文档。 经安全专家剖析,该文档其实为带有缝隙...

网络爬虫暗藏杀机:在Scrapy中利用Telnet服务LPE-黑客接单平台

网络抓取结构中运用最多的莫过所以scrapy,但是咱们是否考虑过这个结构是否存在缝隙妮?5年前曾经在scrapy中爆出过XXE缝隙,但是这次咱们发现的缝隙是一个LPE。 经过该缝隙能够获得shell,...

Web 服务器基准测验,nginx+php vs Apache+php

本次测验nginx+php与apache+php哪种组合的核算性能及稳定性更佳 操作系统:Centos6.4 x64 硬件环境:   服务器IP 硬件装备 人物 192.168.1.2 4中心 8G...

DedeCMS v 5.7 sp2 RemoveXSS bypass

DedeCMS 简称织梦CMS,当时最新版为 5.7 sp2,最近又去挖了挖这个CMS,发现过滤XSS的RemoveXSS函数存在缺点导致能够被绕过。 相关环境 源码信息:DedeCMS-V5.7-U...

好用的Google缝隙爬虫:Google Mass Explorer

这是一款根据谷歌搜索引擎的自动化爬虫。 爬虫介绍 爬虫大体机制便是: 先进行一次谷歌搜索,将成果解析为特定格局,然后再提供给exp运用。 我们能够测验运用–help来列出一切参数。 这个项目笔者会持...

针对非Webapp测验的Burp技巧(二):扫描、重放

在本系列连载的第一节中,笔者谈到了关于burp对非webapp的功用测验。原本我只想写点东西共享出来,并没想到会扯出那么多。现在嘛,我还会持续写下去。 在这一节中,我会讲一讲: Target >...