php代码访问记录系统,对某PHP发卡系统代码审计记录

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

e60adbf4b53cc1d385d91f67d581e550.png

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

b682aa862acba1110deb25fa45683a1a.png

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

667f953c56ec80162d6b89a27b262a11.png

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

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

955240ab28d1fa966eeb9f4037af5d3a.png

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

a82a341c7b5f3c4c9cac066d88ea914a.png

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

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

0ef2cee92b04fadd56a06d5ce15b3441.png

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

2444700b555127108b517085d4f596ed.png

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

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

5feda644c6b9b8bb34eb3ded538e20e8.png

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

a3448270e150063b8886a0f92f795cc2.png

Possible LFI

index.php

43dca1403ddc83dda95e0bf6f71dc473.png

这种其实已经见的很多了,一般情况下无法造成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

8e859c0f54934755d10453b4c7137020.png

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

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

bbbfd4e8f61434c2d13ea1c7dfa1d120.png

1babbcde83eb3a583b84e258993f03c1.png

149a81fac5c1b8742216ea14a09759a6.png

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

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

Unauthorized Visit

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

admin/export.php

b67a9e7f0b89e6351a64e6fdbd0634e2.png

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

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

SQL Injection

first

第一个点:/ajax.php

428865b7dfe9813e95fbb8798ab22b4a.png

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

d95dc3a5eea5226486790279b2ae44bb.png

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

1b26d2b6bac9ca67b083164bcf22bdd4.png

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

1442a7d89d7e4b538c1aa38921946fe3.png

second

/other/submit.php

c354da264927fb7afc5ea647bc168042.png

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

a098918d5c85b82cc9711f82b77e0e37.png

fb2e2c29b7c7e34fddeac2eb566a9a65.png

third

/if/function.php

e1502bac278d181e7264133ea2ef2754.png

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

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值