php代码审计【17】代码审计总结

常见的代码审计思路有以下四种:

  1. 根据敏感关键字回溯参数传递过程;
  2. 查找可控变量,正向追踪变量传递过程;
  3. 寻找敏感功能点,通读功能点代码;
  4. 直接通读全文代码。
  5. 敏感函数回溯参数过程

根据敏感函数来逆向追踪参数

        是目前使用的最多的一种方式,因为大多数漏洞是由于函数的使用不当造成的。另外非函数使用不当的漏洞,如SQL注入,等以后学习再详细介绍。这种方式的优缺点如下:

优点:只需搜索相应敏感关键字,即可快速挖掘想要的漏洞,可定向挖掘,高效、高质量;
缺点:由于没有通读代码,对程序整体架构了解不够深入,在挖掘漏洞时定位利用会花点时间,另外对逻辑漏洞挖掘覆盖不到。
espcms注入挖掘案例:

下载网址:http://down.chinaz.com/soft/27695.htm
打开seay源代码审计系统,点击左上角新建项目,选择下载的espcms文件夹,点击自动审计,开始审计,得到可能存在漏洞,漏洞文件的路径,和漏洞代码列表。

我们挑选其中的一条代码

双击直接定位到这行代码,选中该变量后,可以看到变量的传递过程,在左侧点击$parentid函数,在下面详细信息的地方可以看到$parentid变量获得。

右键选中这行代码,定位函数主体accept,点击右键,选择定位函数

可以看到跳转到了class_function.php文件,代码如下:

 

可以看到这是一个获取GET、POST、COOKIE参数值得函数,我们传入的变量是parentid和R,则代表在POST、GET中都可以获取parentid参数,最后经过一个daddslashes()函数,实际上是包装的addslashes()函数,对单引号等字符进行过滤。看前面的SQL语句是这样的:

$sql = “select * from $db_table where parentid=$parentid”;

并不需要单引号来闭合,可以直接注入。

在citylist.php文件看到oncitylist()函数在important类中,选中该类名右键点击,选择全局搜索

可以看到index.php文件有实例化该类,代码如下:

$archive = indexget(‘archive’, ‘R’);
$archive = empty($archive) ? ‘adminuser’ : $archive;
$action = indexget(‘action’, ‘R’);
$action = empty($action) ? ‘login’ : $action;
$soft_MOD = array(‘admin’, ‘public’, ‘product’, ‘forum’, ‘filemanage’, ‘basebook’, ‘member’, ‘order’, ‘other’, ‘news’, ‘inc’, ‘cache’, ‘bann’, ‘logs’, ‘template’);
if (in_array($point, $soft_MOD)) {
include admin_ROOT . adminfile . “/control/$archive.php”;
$control = new important();
$action = ‘on’ . $action;
if (method_exists($control, $action)) {
$control->$action();
} else {
exit(‘错误:系统方法错误!’);
}

        这里可以看到一个include文件的操作,可惜经过了addslashes()函数无法进行阶段使其包含任意文件,只能包含本地的PHP文件,往下是实例化类并且调用函数的操作,根据代码可以构造出利用EXP(需要登录后才能用):http://192.168.189.129/espcms/adminsoft/index.php?archive=citylist&action=citylist&parentid=-1%20union%20select%201,2,user(),4,5


通读全文代码

       通读全文代码也有一定的技巧,否则很难读懂Web程序的,也很难理解代码的业务逻辑。首先我们要看程序的大体结构,如主目录有哪些文件,模块目录有哪些文件,插件目录有哪些文件,另外还要注意文件的大小,创建时间,就可以大概知道这个程序实现了那些功能,核心文件有哪些。
在看目录结构的时候,特别注意以下几个文件:
1. 函数集文件
函数集文件通常命名中包含functions或者common等关键字,这些文件里面是一些公共的函数,提供给其他文件统一调用,所以大多数文件都会在文件头部包含到其他文件。寻找这些文件的一个技巧就是打开index.php或者一些功能性文件。

2. 配置文件
配置文件通常命名中包含config关键字,配置文件包括Web程序运行必须的功能性配置选项以及数据库等配置信息。从这个文件可以了解程序的小部分功能,另外看这个文件的时候注意观察配置文件中参数是用单引号还是双引号,如果是双引号,则很可能会存在代码执行漏洞。

3. 安全过滤文件
安全过滤文件对我们做代码审计至关重要,通常命名中有filter、safe、check等关键字,这类文件主要是对参数进行过滤,比较常见的是针对SQL注入和XSS过滤,还有文件路径、执行的系统命令的参数。

4. index文件
index是一个程序的入口文件,所以我们只要读一遍index文件就可以大致了解整个程序的架构、运行的流程、包含到的文件。

根据功能点定向审计

根据经验我们简单介绍几个功能点会出现的漏洞:
1. 文件上传功能
这里说的文件上传在很多功能点都会出现,比如像文章编辑、资料编辑、头像上传、附件上传,这个功能最常见的漏洞就是任意文件上传了,后端程序没有严格地限制上传的格式,导致可以上传或者存在绕过的情况,而除了文件上传功能外,还经常发生SQL注入漏洞。

2. 文件管理功能
在文件管理功能中,如果程序将文件名或者文件路径直接在参数中传递,则很有可能会存在任意文件的操作漏洞,比如任意文件读取等,利用的方法是在路径中使用../或者..\跳转目录。
除了任意文件操作漏洞外,还可能会存在XSS漏洞,程序会在页面中输出文件名,而通常会疏忽对文件名进行过滤,导致可以在数据库中存入带有尖括号等特殊符号的文件名,最后在页面显示的时候就会被执行。

3. 登录认证功能
登录认证功能不是指一个过程,而是整个操作过程中的认证,目前的认证方式大多是基于Cookie和Session,不少程序会把当前登陆的用户账号等认证信息放到Cookie中,或许是加密方式。进行操作的时候直接从Cookie中读取当前用户信息,这里就存在一个算法可信的问题,如果这段Cookie信息没有加salt一类的东西,就可以导致任意用户登录漏洞,只要知道用户的不扥信息,即可生成认证令牌,甚至有的程序会直接把用户名放到Cookie中,操作的时候直接读取这个用户名的数据,这也是常说的越权漏洞。

4. 找回密码功能
找回密码虽然看起来不像任意文件上传这种可以危害到服务器安全的漏洞,但是如果可以重置管理员的密码,也是可以间接控制业务权限甚至拿到服务权限的。找回密码功能的漏洞有很多利用场景,最常见的是验证码爆破。目前特别是APP应用,请求后端验证码的时候大多是4位,并且没有限制验证码的错误次数和有效时间,于是就出现了爆破的漏洞。
————————————————
总结:我个人还是比较喜欢功能定向审计和敏感关键字回溯,哈哈哈,纪念自己又一天的坚持。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值