关于php代码审计一

深知自己不足,努力啃各种知识,实在是走了太多坑,前一阵子粗读了《代码审计》,结合一下案例做一些总结,思路为主。

个人觉得代码审计的本质可以总结为,两大类,危险函数,逻辑类。关于代码审计的方法,有针对性的搜寻危险函数(或是敏感操作文件)或者通读全文理解整个代码的流程,找出相应的问题。想提升代码审计除了啃代码,无它法。(知识面决定攻击面)

关于搜寻危险函数不用多言,例如命令执行函数eval assert执行数据库的mysql_quert()函数,select,update关键字 等等,

这种方法在我前不久就实战用上了

url='{$val}'中的$val并没有经过过滤,直接传了进去。

跟踪$val参数

发现来自$match参数的遍历。

跟踪$match参数

来自以[br]标签分割的$url。继续跟踪$url

可以看出,当我们执行文件导入任务的时候,他会直接读取文本内容,并没有过滤任何关键字,直接插入到sql语句中,所以这里我们先下sql断点测试一下。

这是经过构造的注入exp

从这里我们的确可以看到exp已经被执行。

查看网站根目录

可以看到数据库目录已经写出来了,如果能知道目标网站的绝对路径,那么我们就可以写shell了。

第二种就是通读全文然后理解网站的逻辑再去找寻相应的漏洞。

我在网上随便找了一个cms,来做案例。

首先查看程序目录

可以很清楚的看到一些配置文件,函数文件等等,我们先从index.php(入口文件看起),

代码很简单首先定义一个常量,然后包含common.php顾名思义,common为公共的一些变量或者函数,我们等会跟进,然后返回当前的时间并且调用了$phpcom这个实例化的inie函数,可以很清楚的看到我们这个index.php中并没有这个函数所以,而且下面也大量调用application的静态函数,我们跟进common.php看看

定义了很多环境变量并且包含了class/phpcom.php,跟进

就会发现里面定义了超级多的类,这样子我们再看看index刚才的操作 究竟做了什么,首先看第一个

我们在common.php中发现$phpcom是phpcom_init类中调用的instance静态方法,跟进

然后我们就找到了正主

代码意思很简单首先设置$_instance为

然后判断是否为空$_instance则会赋值一个新建一个phpcom_init对象,并且赋值给$_instance,最后返回。

一句话就是初始化上面的变量。

所以其他的也是一样的,按照这个思路,一直读取下去就ok了。

下周具体开始web的漏洞。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180910G21UNO00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券