对某PHP发卡系统代码审计记录

最近都是PWN,审计,渗透并行,好久没看取证了…

Local Env Setup

有几个点说一下:

第一个是cms要求php_curl扩展,当我修改了php.ini的扩展后,程序检测还是有点问题,所以把当前php的路径添加到环境变量中即可(或者换了php版本后就好了)。

第二个就是php7.3.4运行该cms有问题,其他的测试了5.2、5.5、7.4均可。

Code Excute Path Analysis

首先看到index.php

根据包含了 if/common.php ,先来看一下:

首先是关闭报错,之后定义了一系列常量,然后设置了时区并获取了时间。然后把$_SERVER[‘SCRIPT_NAME’]中的\\替换为/,然后根据端口跳转https或http,之后下面有一个password_hash进行了md5运算并赋值给$fpj。

包含了web根目录下的config.php以及当前目录的function.php

再往后就是测试config.php中的$dbconfig是否定义过了来确定是否安装,再包含当前目录下的db.calss.php来连接数据库判断是否安装。后面还判断了是否是在QQ内打开的,不贴代码了,直接看重要一点的:

包含了当前目录下的member.php,然后设置了默认页面。

接着去看if/common.php里面包含的几个文件,首先是if/function.php

daddslashes()这个函数,首先是判断开没开GPC,如果开了或者$force为0则直接返回,否则对数组或者字符串进行addslashes()处理,也就是特殊字符转义。

然后是这个_if()以及_if2(),对一些特殊字符进行了替换空的处理。

还有很多,先不看了,把这两个比较重要的看完就可以了,再来看if/member.php

身份验证,因此我们关注的比较重要的执行流程图如下:

Possible LFI

index.php

这种其实已经见的很多了,一般情况下无法造成LFI,但是如果存在以下情况:

  • php<5.3 && GPC=off 00截断
  • php<5.3 长文件名截断
  • url_allow_include && url_allow_fopwn url问号截断

修复建议:关闭allow_url_include以及升级php版本至7.x。

Arbitrarily File Upload

admin/set.php

两个mod分别是upimg以及upBgimg都有问题,判断后缀名如果是常见的图片类型就把扩展名统一为png,其他的都未做检测。

把文件保存到了/assets/img/log.$ext

另外一个mod也是一样的,就不演示了。

修复建议:对扩展进行白名单验证。

Unauthorized Visit

通过对代码的阅读发现admin下的php判断登陆是包含admin/head.php

admin/export.php

并没有进行登陆验证,直接可以下载剩余卡密、已使用卡密以及全部卡密。

修复建议:在头部引入/admin/head.php进行登陆验证。

SQL Injection

first

第一个点:/ajax.php

首先先在HTTP头加上上面的东西过掉判断。

create这个分支的$out_trade_no并没有对POST数据进行_if()或intval()以及addslashes()处理。

根据SQL查询语句构造payload,效果如下:

second

/other/submit.php

这里验证了$conf[epay_id],所以要从首页购买后跳转:

third

/if/function.php

看到上面没有过滤双引号以及括号,可以注入的- – 只要不是需要单引号闭合即可。

其实还有一些,我就不一一列出了。

修复建议:对应修复,建议数字型数据进行intval()处理,字符型进行addslashes()处理,对_if()函数,添加对括号以及双引号的替换。

Leave a Reply

Your email address will not be published. Required fields are marked *

eighteen − 1 =