记录某支付类源码代码审计流程-后台注入

admin 2026-01-20 01:32:16 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文章记录对某支付源码的后台代码审计流程:作者先排查前台RCE与SQL注入未果,转向分析Cookie鉴权逻辑,尝试利用PHP弱比较与0e开头MD5碰撞绕过失败;最终在后台发现未预编译的SQL注入点并完成验证,同时给出失败思路与细节供参考。 综合评分: 78 文章分类: 代码审计,漏洞分析,WEB安全,实战经验,安全培训


cover_image

记录某支付类源码代码审计流程-后台注入

原创

知名小朋友 知名小朋友

进击安全

2026年1月19日 10:00 北京

#

免责申明

本文章仅用于信息安全防御技术分享,因用于其他用途而产生不良后果,作者不承担任何法律责任,请严格遵循中华人民共和国相关法律法规,禁止做一切违法犯罪行为。

一、前言

最近做了有几个师傅们找我做一个对应的代码审计,要求前台RCE但是最终没有实现对应功能,只找到了一个后台的注入点,这里分享一下审计的思路。

二、鉴权分析

这个文件架构其实很清楚,就是非框架类型的,先来进行查看鉴权。

这里直接进行鉴权查看,是因为前台可以访问的地方基本看了下,排查了函数move_uploaded_file文件上传,copy\fwrite\fputs\copy\renamefile\file_put_contents这几个常见rce的函数,并没有找到,这里贴一张图。

于是想着进行前台寻找SQL注入的地方,但发现均存在预编译以及过滤。

例如这种方式,进行了转义,同时又进行排查对应的非字符型注入,尝试绕过这个函数没有结果,于是开始看鉴权,从鉴权地方看看能否做文章了。

这里可以看到调用对应的参数islogin变量,如果为1则放行,查看这个变量。

这里可以看到,获取我们Cookie当中的admin_token信息,并且进行解密,同时进行分割为user、id、以及时间三种格式,其中通过conf获取admin_user以及admin_pwd的信息,在进行添加一个密码的盐值进行md5加密,最后进行比较,查看加密的md5是否和sid相同,如果相同默认具备后台权限。

这里是鉴权的地方,在进行查看登录赋权的地方。

可以看到一个解密,一个加密,加解密函数就不看了,这里我们来推测一下。

三、鉴权绕过(失败)

这里首先鉴权的admin_user是就是管理员账号,admin_pwd是管理员密码,后面password_hash是加密的盐值,三个组合在一起进行md5加密,并且与Cookie当中admin_token当中通过\t分离出来的第二个参数来进行md5比对,这里写一个小demo来生成一个正常的值。

这是加密的代码,固定对应的账号密码等信息,加密结果如下:

7dc74lFTKXYo0ULE69Uax+mhT3RRcC/AfaE86rtGZIiFdAn73K2HDtiY2LWC8yFAiWr1YrZHY2rbSK18rW9bVVgBSk5L1ZF9Ip0dlwxj

然后再编写一个小demo来进行解密。

解密出来的数据如下:

admin  5e2f212328fea275e18ce8714e71b18c  1771332095

这里就想到了一个办法,可以尝试进行php经常在CTF题目中喜欢考的PHP弱比较,这里查阅资料可以知道,MD5当中弱比较如果两个M5是0e开头的那么比较结果为true。

刚好这里进行的是弱比较的方式,尝试验证一下。

于是我这里开始赌,就进行加密赌对方网站账号密码在进行md5之后是0e开头的,我进行伪造,于是我这里自己搭建网站把自己密码更改为md5加密之后是0e开头的。

最终实现如下,可以正常加解密,第二个字段也是0e开头,于是这里进行验证是否可以直接进入后台。

但是直接失败了,这里也找到了失败原因。

这里人家进行校验的时候,账号+密码+密码盐值进行md5加密,我在赌这三个加起来的md5加密之后是0e开头的。

况且后面查资料表示:

QNKCDZO110e8304004519934940580242199033912406107080e462097431906509019562988736854s878926199a0e545993274517709034328855841020s155964671a0e342768416822451524974117254469s214587387a0e848240448830537924465865611904s214587387a0e848240448830537924465865611904s878926199a0e545993274517709034328855841020s1091221200a0e940624217856561557816327384675s1885207154a0e509367213418206700842008763514s1502113478a0e861580163291561247404381396064s1885207154a0e509367213418206700842008763514s1836677006a0e481036490867661113260034900752s155964671a0e342768416822451524974117254469s1184209335a0e072485820392773389523109082030s1665632922a0e731198061491163073197128363787s1502113478a0e861580163291561247404381396064s1836677006a0e481036490867661113260034900752s1091221200a0e940624217856561557816327384675s155964671a0e342768416822451524974117254469s1502113478a0e861580163291561247404381396064s155964671a0e342768416822451524974117254469s1665632922a0e731198061491163073197128363787s155964671a0e342768416822451524974117254469s1091221200a0e940624217856561557816327384675s1836677006a0e481036490867661113260034900752s1885207154a0e509367213418206700842008763514s532378020a0e220463095855511507588041205815s878926199a0e545993274517709034328855841020s1091221200a0e940624217856561557816327384675s214587387a0e848240448830537924465865611904s1502113478a0e861580163291561247404381396064s1091221200a0e940624217856561557816327384675s1665632922a0e731198061491163073197128363787s1885207154a0e509367213418206700842008763514s1836677006a0e481036490867661113260034900752s1665632922a0e731198061491163073197128363787s878926199a0e545993274517709034328855841020

好像常见的只有这几个md5加密之后才是0e开头的。

最后我顺手给他代码改了,固定加密后是0e开头的。

这个点比较可惜,但是好在也是一个学习的过程,这里记录一下失败的过程,有大佬想到好的方法可以dd一起交流一下。

四、SQL注入

最后就是SQL注入了,这种漏洞还是比较好审计。

后台挺多这种可以直接注入的,但是前台却都进行了过滤,这里验证一下吧。

验证的时候发现没能成功,报这个错误。

发现这里还需要在session当中获取密码什么的,那咱就换一个点,也不从数据库当中看了,本身鉴权就让我更改了再去操作session等鉴权一类的信息而去审计出来的漏洞准确率就不高了。

可以验证一下这个点。

成功验证。

广告区域

目前第四期进阶课程已经开始,课表如下:

同时报名第四期基础课程同样可看,课表如下:

同时具备内部资料以及靶场相关福利,想要了解的师傅可以冲了。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:进击安全 知名小朋友 知名小朋友《记录某支付类源码代码审计流程-后台注入》

评论:0   参与:  0