ESPCMS-Seay自动加手工代码审计

ESPcms代码审计

源码下载地址:http://yesky.91speed.org.cn/sw/180001_190000/rar/espcms_utf8_5.4.12.05.14.rar

1.自动审计

打开审计目录,点击自动审计,找到一条SQL注入的漏洞提示,进行验证分析

 

2.手工验证

双击进来,在选中该变量后,在下方可以看到该变量的传递过程,并且点击下方的变量传递过程也可以直接跳转到该项代码处,可以非常直观地帮助我们看清整个变量在该文件的传递过程。另外我们可以看到Sparentid变量是在如下代码段获得的:

$parentid = $this->fun->accept('parentid', 'R');

 

2.1定位函数

右键选中,定位到accept函数

跳转到class_function()函数

 

可以看到这是一个获取GET、POST、COOKIE参数值的函数

我们传入的k=parentid,var=R,表示以POST和GET方式都可以获取parentid参数

最后经过daddslashes函数对单引号进行过滤

原始语句为$sql = "select * from $db_table where parentid=$parentid";

并不需要单引号来闭合,于是可以直接注入。

 

2.2搜索分析

再回来看。

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

发现在首页index.pnp里面存在实例化

 

 

看到一个include文件的操作,但是经过addslashes()函数单引号过滤,故无法截断使其包含任意文件。

只能包含本地的PHP文件。

 

2.3分析思路

但实际我们想

通过创建一个对象,随着oncitylist函数调用,传递一个parentid变量

在传递的$action与'on'拼接,组合成新的$action,所以我们传入的$action=citylist,这里我们令$archive也为citylist即可。

 

之后可以看到城市列表,存在注入。

2.4验证注入

进一步构造payload

这里需要先登陆到后台,再修改URL构造

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

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

 

http://127.0.0.1/espcms/adminsoft/index.php?archive=citylist&action=citylist&parentid=2

 

返回结果为:北京

接着手工注入。

http://127.0.0.1/espcms/adminsoft/index.php?archive=citylist&action=citylist&parentid=2 union select 1,2,user(),4,5

 

 

 

 

到此确定了这里存在SQL注入漏洞。

 

posted @ 2020-04-04 21:37  lingzhi_sec  阅读(375)  评论(1编辑  收藏  举报