espcms代码审计第一弹

以前的代码审计都是在CTF比赛题里面进行对于某一段代码的审计,对于后端php整体代码和后端整体架构了解的却很少,所以有空我都会学习php的代码审计,以提高自己

环境就直接用的是phpstudy,学习的前期对于环境的搭建以能够满足我们学习的需求即可,没有必要将每个组件分开安装,反而本末倒置了。

使用的代码审计工具是 Seay源代码审计系统

同时参考书籍也是尹毅的 《代码审计-企业级web代码安全架构 》

作者的博客:

https://seay.me/

espcms是2014版本的。

我们使用seay代码审计工具

常见的代码审计思路有以下四种:

1,根据敏感关键词回溯参数传递过程 2,查找可控变量,正向追踪变两个传递过程 3,寻找敏感功能点,通读功能点代码 4,直接通读全文代码

espcms的代码审计,我们跟书中一样,使用对于敏感函数回溯参数过程。

先按照书上审计的过程走一遍,我们再自己根据敏感函数寻找一些漏洞

我们找到

22条提示我们可能存在sql注入漏洞,继而我们点击该条

可以看到这里将我们传入的$parentid代入$sql语句中进行查询,而$parentid变量的值是在oncitylist()函数里面没有进行设么过滤,传参过来的函是accept()

这里仅对$parentid变量进行了是否为空的检测。

右键定位accept()函数

可以看到accept函数里面的内容

在这个位置对于输入的$k进行了daddslashes函数,daddslashes函数实际上是包装之后的addslashes函数

即对于我们输入的parentid参数输入的单引号等预定义字符进行过滤,不过之前的$sql语句里面我们发现

我们可以可以发现对于$parentid参数没有单引号进行闭合,所以 daddslashes 实际上没有起到任何作用。

如果这个语句写成下边这种情况:

$sql = "select * from $db_table where parentid='$parentid'";

同时还是像之前一样使用了addslashes()函数,那么除非有宽字节注入或者其他的特殊情况,不然我们就不能进行注入了。

我们发现这里有注入之后,可以看到该函数在important这个类里面

于是我们全局变量搜索出现了important类的位置,重点关注的是new 了important类的地方

可以看到在adminsoft/index.php这个页面new 了important这个类

点击之后可以看到在index.php页面$archive和$action这两个变量都有默认的值,我们在本地搭建的网站不输入参数直接访问就可以看到(当然在代码的逻辑里面也可以很清楚看出)

可以看到当我们没有任何参数输入的时候,archive=adminuser&action=login

但是实际上我们是想

调用important类里面的oncitylist函数,同时传递一个parentid的值。

在这里传入的$action与’on’字符串进行连接,组合成为新的$action,所以我们传入的$action=citylist,这里我们令$archive也为citylist,本来觉得archive为何值不重要,不过用其他array组里面的值就会报错,应该是代码里面其他地方做了限制。

因为是在admin的界面下进行的注入,所以我们需要先登录,再在url输入我们构造的payload

现在可以看到已经出现了citylist

不过我们的目的是传递parentid参数,

因为我们访问成功之后实际上已经调用了important类里面的oncitylist方法,不过因为我们没有主动传递parentid的值,所以其默认为1而已。

于是我们手动使用get方法传递parentid的值

构造payload之后,我们可以看到现在返回页面的citylist只剩下了北京,根据我们之前的分析,此处parentid存在不需要单引号闭合的sql注入漏洞,于是我们开始常规注入

字段数为5

回显位置: 3

在3的位置查询数据库名字和用户名

OK,跟着书上的漏洞复现成功,第一弹结束,第二弹的分析过程就自己分析吧,站在巨人的肩膀上固然会看的很远,但是更需要自己向上攀登才能到达更远的地方


__EOF__

本文作者春告鳥
本文链接https://www.cnblogs.com/Cl0ud/p/12180435.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   春告鳥  阅读(704)  评论(5编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示