本篇文章由团队成员YanXia,首发于i春秋原创奖励计划,未经许可禁止转载 地址https://bbs.ichunqiu.com/thread-63596-1-1.html
这套老盘子现在公网上虽然还有些存活IP,不过应该没什么人实际在用。遂公开此文章。预与各位分享,共同学习代码审计技术。
本文章仅供安全人员学习攻防技术,请勿用于任何非法行为!!!
本文章仅供安全人员学习攻防技术,请勿用于任何非法行为!!!
本文章仅供安全人员学习攻防技术,请勿用于任何非法行为!!!
在本地搭建好后,发现下图爆了个错
去进入applicationcommon.php看看,发现是thinkcod()函数调用的该验证
它将NAV_NUM(thinkphplibrarythinkController.php)给调用出来组合成了个他们的后门域名并将当前系统程序的信息传到该域名中做记录。
由于该站点已经不可访问,所以我们只需要在file_get_contents前加上注释即可。
该漏洞在网络上已有公开不过我发现大家都没正确的审计到存在注入的点~~
接下来跟着我分析。首先,该处漏洞用GET方式访问的时候路径为/index/goods/goods/pid/23
我们从代码层面看看。
我在网络上看到篇文章说三图GetProData()函数是导致sql注入的原因,但是在我调试之后发现并不是如此。我们根据去看看
下图这个写法会将pid变成字符串形式传参,而此处是不能用宽字节绕过的。所以说不会存在相关漏洞。具体形式为
SELECT `pi`.*,`pd`.* FROM `wp_productinfo` `pi` INNER JOIN `wp_productdata` `pd` ON `pd`.`pid`=`pi`.`pid` WHERE `pi`.`pid` = '23' LIMIT 1
而真正存在漏洞的其实是在下图的ChickIsOpen()
这个传参的方法会将pid以数字的形式带入到sql语句中,从而造成sql注入漏洞
SELECT * FROM `wp_opentime` WHERE ( pid=23 ) LIMIT 1
至于修复方法,这里就不便多说了。
SELECT * FROM `wp_opentime` WHERE ( pid=23 and extractvalue(1,concat(0x7e,(select database()))) ) LIMIT 1
这个洞在applicationindexcontrollerGoods.php 漏洞成因与上面的sql注入一致,我就不重复说了
下图画圈处,即为本此漏洞点。在经过echo前我们需要过一次checkSignature()
这里发现会判断我们传入的signature值是否与系统token值加密后一致。
那这里就简单了
我们不需要传入$timestamp, $nonce.这样就会直接将token值给sha1加密。
访问一下试试,成功弹窗 (PS:经过公网测试。基本上都没该这个地方的token)
这里我们先看看该网站cookie是什么样式的
可以发现除了token。其他看起来都是可以伪造的。
这里我们去源码里跟一下。可以发现这个开发6666了。将一段骂人的话硬编码给token。
在跟到BASE.php底下看看。发现他仅判断了userid是否为空以及token值是否一致。并未将cookie带入数据库去查询对应值
这里就可以造成个cookie伪造了
当然,在后台每个功能的时候"它"还会判断otype是否等于3不然就输出个骂人的脏话
最后来尝试访问一下,成功伪造
该处在/admin/setup底下
找到editconf()函数,发现在move函数上没有做什么后缀限制。
,
跟进一下move(),重头戏在buildSaveName()函数,生成文件名和文件路径。
会以当前年月日(如20230101)/随机数的md5.php生成
不过由于这个地方在move下一行会$info->getSaveName();返回文件路径。并保存到数据库中。我们可以在前端就能看到。所以这里就不用爆破文件名去找文件了(实际上这个随机数也是可以爆破的,这里就无需多讲。后面有缘分我教大家怎么爆破。或者自行摸索一下)
这个功能点是得纯靠代码审计了,前台已经删功能了。不过相关技术就不用多说了。跟上面如出一辙
虽然上传的时候会爆500,实际上已经传上去了
展示一下图片好了
文章来源:None安全团队
黑白之道发布、转载的文章中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途及盈利等目的,否则后果自行承担!
如侵权请私聊我们删文
END