【代码审计】对某BC老盘子的代码审计

渗透技巧 6个月前 admin
134 0 0

本篇文章作者YanXia,本文属i春秋原创奖励计划,未经许可禁止转载 地址https://bbs.ichunqiu.com/thread-63596-1-1.html

0x00 前言

这套老盘子现在公网上虽然还有些存活IP,不过应该没什么人实际在用。遂公开此文章。预与各位分享,共同学习代码审计技术。
本文章仅供安全人员学习攻防技术,请勿用于任何非法行为!!!
本文章仅供安全人员学习攻防技术,请勿用于任何非法行为!!!
本文章仅供安全人员学习攻防技术,请勿用于任何非法行为!!!

0x01 正文

1.去除验证

在本地搭建好后,发现下图爆了个错
【代码审计】对某BC老盘子的代码审计

去进入applicationcommon.php看看,发现是thinkcod()函数调用的该验证
【代码审计】对某BC老盘子的代码审计

它将NAV_NUM(thinkphplibrarythinkController.php)给调用出来组合成了个他们的后门域名并将当前系统程序的信息传到该域名中做记录。
【代码审计】对某BC老盘子的代码审计

由于该站点已经不可访问,所以我们只需要在file_get_contents前加上注释即可。

2.前台sql注入

该漏洞在网络上已有公开不过我发现大家都没正确的审计到存在注入的点~~
接下来跟着我分析。首先,该处漏洞用GET方式访问的时候路径为/index/goods/goods/pid/23
【代码审计】对某BC老盘子的代码审计

我们从代码层面看看。
【代码审计】对某BC老盘子的代码审计

我在网络上看到篇文章说三图GetProData()函数是导致sql注入的原因,但是在我调试之后发现并不是如此。我们根据去看看
下图这个写法会将pid变成字符串形式传参,而此处是不能用宽字节绕过的。所以说不会存在相关漏洞。具体形式为

1
SELECT `pi`.*,`pd`.* FROM `wp_productinfo` `pi` INNER JOIN `wp_productdata` `pd` ON `pd`.`pid`=`pi`.`pid` WHERE `pi`.`pid` = '23' LIMIT 1
【代码审计】对某BC老盘子的代码审计

而真正存在漏洞的其实是在下图的ChickIsOpen()
【代码审计】对某BC老盘子的代码审计

这个传参的方法会将pid以数字的形式带入到sql语句中,从而造成sql注入漏洞

1
SELECT * FROM `wp_opentime` WHERE ( pid=23 ) LIMIT 1
【代码审计】对某BC老盘子的代码审计

至于修复方法,这里就不便多说了。

1
    SELECT * FROM `wp_opentime` WHERE ( pid=23 and extractvalue(1,concat(0x7e,(select database()))) ) LIMIT 1
【代码审计】对某BC老盘子的代码审计

3.前台sql注入

这个洞在applicationindexcontrollerGoods.php 漏洞成因与上面的sql注入一致,我就不重复说了
【代码审计】对某BC老盘子的代码审计

【代码审计】对某BC老盘子的代码审计

4.前台XSS漏洞

下图画圈处,即为本此漏洞点。在经过echo前我们需要过一次checkSignature()
【代码审计】对某BC老盘子的代码审计

这里发现会判断我们传入的signature值是否与系统token值加密后一致。
【代码审计】对某BC老盘子的代码审计

那这里就简单了
【代码审计】对某BC老盘子的代码审计

我们不需要传入$timestamp, $nonce.这样就会直接将token值给sha1加密。
【代码审计】对某BC老盘子的代码审计

访问一下试试,成功弹窗 (PS:经过公网测试。基本上都没该这个地方的token)
【代码审计】对某BC老盘子的代码审计

5.管理员凭据伪造

这里我们先看看该网站cookie是什么样式的
可以发现除了token。其他看起来都是可以伪造的。
【代码审计】对某BC老盘子的代码审计

这里我们去源码里跟一下。可以发现这个开发6666了。将一段骂人的话硬编码给token。
【代码审计】对某BC老盘子的代码审计

在跟到BASE.php底下看看。发现他仅判断了userid是否为空以及token值是否一致。并未将cookie带入数据库去查询对应值
【代码审计】对某BC老盘子的代码审计

这里就可以造成个cookie伪造了
当然,在后台每个功能的时候”它”还会判断otype是否等于3不然就输出个骂人的脏话
【代码审计】对某BC老盘子的代码审计

最后来尝试访问一下,成功伪造
【代码审计】对某BC老盘子的代码审计

6.文件上传

该处在/admin/setup底下
找到editconf()函数,发现在move函数上没有做什么后缀限制。
【代码审计】对某BC老盘子的代码审计

跟进一下move(),重头戏在buildSaveName()函数,生成文件名和文件路径。
【代码审计】对某BC老盘子的代码审计

会以当前年月日(如20230101)/随机数的md5.php生成
【代码审计】对某BC老盘子的代码审计

不过由于这个地方在move下一行会$info->getSaveName();返回文件路径。并保存到数据库中。我们可以在前端就能看到。所以这里就不用爆破文件名去找文件了(实际上这个随机数也是可以爆破的,这里就无需多讲。后面有缘分我教大家怎么爆破。或者自行摸索一下)
【代码审计】对某BC老盘子的代码审计

7.文件上传

这个功能点是得纯靠代码审计了,前台已经删功能了。不过相关技术就不用多说了。跟上面如出一辙
【代码审计】对某BC老盘子的代码审计

虽然上传的时候会爆500,实际上已经传上去了
【代码审计】对某BC老盘子的代码审计

【代码审计】对某BC老盘子的代码审计
展示一下图片好了
【代码审计】对某BC老盘子的代码审计

0X02 结尾

最近发现有人搬文章不写来源啊喂。麻烦各位搬运的时候写一下归属。栓q~

 

原文始发于YanXia:【代码审计】对某BC老盘子的代码审计

版权声明:admin 发表于 2023年11月11日 下午2:24。
转载请注明:【代码审计】对某BC老盘子的代码审计 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...