(基础)php代码审计思路

570934591   ·   发表于 2020-03-26 16:26:47   ·   代码审计

一、根据敏感关键字回溯参数传递过程。
二、直接通读全文代码。
三、查找敏感功能点,通读功能点代码。

一、根据敏感关键字回溯参数传递过程" class="reference-link">一、根据敏感关键字回溯参数传递过程

HTTP_CLIENT_IP
HTTP_X_FORWORDFOR




二、通读全文代码" class="reference-link">二、通读全文代码

主目录有哪些文件,模块目录有哪些文件,插件目录有哪些文件,注意文件的大小,创建时间。根据文件的命名大致知道这个程序实现了哪些功能,核心文件是哪些。
discuz程序
1)函数集文件,命名包含functions或common等关键字,这些文件里面是一些公共的函数,提供给其他文件统一调用,大多数文件都会在文件头部包含到其他文件。寻找这些文件一个非常好用的技巧是去打开index.php或一些功能性文件,在头部一般都能找到。
2)配置文件,命名包括config关键字,配置文件包括web程序运行必须的功能性配置选项以及数据库等配置信息。参数值是用双引号可能会存在代码执行漏洞。
3)安全过滤文件(至关重要,关系到挖掘到的可以点能不能利用),命名中有filter、safe、check等关键字,这类文件主要是对参数进行过滤,比较常见的是针对SQL注入和XSS过滤,还有文件路径、执行的系统命令的参数,其他的则相对少见。而目前大多数应用都会在程序的入口循环对所有参数使用addslashes()函数进行过滤。
4)index文件是一个程序的入口文件,通常只要读一遍index文件就可以大致了解整个程序的架构、运行的流程、包含到的文件,其中核心的文件又有哪些。建议先将几个核心目录的index文件都简单读一遍。




======74cms审计案例============================================
1、哪些重要文件或文件夹中名称里有没带api、admin、manage、include一类关键字,有个include的文件夹(一般比较核心的文件在这个文件夹中)。
2、查看关键文件代码,common.fun.php是本程序的核心文件,查看关键函数,发现有一大堆过滤函数(这是应该关心的地方),

  • 首先是一个SQL注入过滤函数;
  • 然后是XXS过滤;有个获取IP地址的函数(可以伪造IP地址的),在获取IP时没有验证IP格式,而存在注入漏洞;
  • SQL查询统一操作函数inserttable()和updatetable()函数,大多数SQL语句执行会经过这里,所以要关注这个地方是否有过滤等问题;
  • wheresql()函数是SQL语句查询的Where条件拼接的地方,可以看到参数都使用了单引号进行包裹;
  • 访问令牌生成的函数asyn_userkey(),拼接用户名、密码salt以及密码进行一次md5,访问的时候只要在GET参数key的值里面加上生成的这个key即可验证是否有权限,被用在注册、找回密码等验证过程中,也就是找回密码链接里面的key;
    3、查看配置文件,文件名通常带有config关键字(通过搜索该关键字即可),搜索出的文件结合所在目录可以判断出data目录下面的config.php以及cache_config.php才是真正的配置文件,查看/data/config.php代码。
  • 可能存在双引号解析代码执行的问题,通常这个配置是在安全系统的时候设置的,或者后台也有设置的地方;
  • QISHI_DBCHARSET常量,这里配置的数据库编码是GBK,可能存在宽字节注入,不过需要看数据库连接时设置的编码,找到连接MySQL的代码(include\mysql.class.php)文件的connect()函数,存在安全隐患,判断MySQL版本是否大于4.1,在版本小于5的情况下会执行“set names gbk”,这个作了三件事,等同于:SET character_set_connection=’gbk’,haracter_set_results=’gbk’,character_set_client=’gbk’,因此在MySQL版本大于4.1小于5时,基本所有跟数据库有关的操作都存有宽字节注入;
    4、跟读首页文件(index.php),看看程序运行时会调用哪些文件和函数。
  • 首页index.php文件首先判断安装锁文件是否存在,如果不存在则跳转到install/index.php,
  • 接下来包含/include/common.inc.php文件,跟进该文件查看,该文件包含了三个文件(data/config.php数据库配置文件,include/common.fun.php文件为基础函数库文件,include/74cms_version.php为应用版本文件),include/common.fun.php文件里的addslashes_deep()函数对GET/POST/COOKIE参数进行了过滤,
  • 又一个包含文件(include/tpl.inc.php),该文件首先包含了include/template_lite/class.template.php文件(映射程序模板的类),其中一段代码实例化了这个类对象赋值给$smarty变量,继续跟进则转会到index.php文件代码,判断是否已经缓存,然后调用display()函数输出页面,
    审计到这里是否对整个程序的框架比较熟悉了?接下来像审计index.php文件一样跟进其他功能入口文件即可完成代码通读。



    三、查找敏感功能点,通读功能点代码" class="reference-link">三、查找敏感功能点,通读功能点代码

    根据经验介**绍几个功能点经常会出现的漏洞:
    1)文件上传
    2)文件管理功能
    3)登录认证功能
    4)找回密码功能



用户名金币积分时间理由
admin 100.00 0 2020-03-30 09:09:04 初投稿奖励!

打赏我,让我更有动力~

1 条回复   |  直到 2022-5-16 | 1751 次浏览

jx
发表于 2022-5-16

总结的很到位,赞一个

评论列表

  • 加载数据中...

编写评论内容
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.