ChatGPT批量写原创文章软件

discuz低版本漏洞(Discuz! X34 漏洞)

【漏洞分析】Discuz!之前网上爆的的是Discuz!=3.4的任意文件删除漏洞,为什么这里变成3.3了呢?因为厂商已经把3.4的修复了,不过3.3版本还是存在问题的。 首先,在本地创建一个我们要删除的测试

本文目录一览:

  • 1、【漏洞分析】Discuz!
  • 2、Discuz 3.4漏洞
  • 3、discuz!6.0.0漏洞

【漏洞分析】Discuz!

之前网上爆的的是Discuz!=3.4的任意文件删除漏洞,为什么这里变成3.3了呢?因为厂商已经把3.4的修复了,不过3.3版本还是存在问题的。

首先,在本地创建一个我们要删除的测试文件

注册一个账号

然后点击保存,用burp抓个包,就可以得到我们的formhash,并在birthprovince中修改成我们要删除的文件路径(../../../test.txt)

然后可以在本地创建一个文件上传的表单

然后点击上传

就完成了删除文件了~

这里漏洞出现在/upload/source/include/spacecp/spacecp_profile.php

这里第182、183行有两个unlink()函数可以删除文件,但是需要formtype=file才可以,我们把这里的打印出来

发现并不是file,因此不能在这里进行删除,继续往下看,

第229行有一个unlink()函数,并且没有任何判断,也就是说只要程序运行到这里,就可以删除文件。看一下条件

这里向上回溯,看一下$space[$key]在哪里。

出现在第23行,发现这个就是用户的个人设置,我们可以选择birthprovince,修改成要删除的文件就好了,然后实现一个上传文件 的表单,就可以删除文件了。

Discuz 3.4漏洞

网上内容

首先在目录里建立test.txt

然后,获取formhash:7b2bf0ce

于是可以构建payload:

然后上传文件,就可以删除这个test.txt了

我们来看下源码,这里主要是spacecp_profile.php的问题

首先,我们从漏洞出发,我们先从删除函数开始:

可以看到,这个要求formtype是file,就会触发unlink

我们发现这次改动的228行有 @unlink(getglobal('setting/attachdir').'./profile/'.$space[$key]); ,也就是这次漏洞所在,我们看看语句成立的条件

也就是上传文件,那么现在就是看看这个 $space[$key] 了,回溯下变量,我们发现,key是可以被payload里的用户资料所操作的,我们看下payload里用的 birthprovince ,

可以看到这个就可以控制 $space[$key] ,而且没有什么限制,而一切的条件就是70行的 if(submitcheck('profilesubmit')) { 所以,我们的payload会有profilesubmit=1

discuz!6.0.0漏洞

____Discuz6.0__________injection __0day

// 允许程序在 register_globals = off 的环境下工作

$onoff = (function_exists('ini_get')) ? ini_get('register_globals') : get_cfg_var('register_globals');

if ($onoff != 1) {

@extract($_POST, EXTR_SKIP);

@extract($_GET, EXTR_SKIP);

}

$self = $_SERVER['PHP_SELF'];

$dis_func = get_cfg_var("disable_functions");

/*===================== 身份验证 =====================*/

if($admin['check'] == "1") {

if ($_GET['action'] == "logout") {

setcookie ("adminpass", "");

echo "meta http-equiv=\"refresh\" content=\"3;URL=".$self."\"";

echo "span style=\"font-size: 12px; font-family: Verdana\"注销成功......pa href=\"".$self."\"三秒后自动退出或单击这里退出程序界面 /a/span";

exit;

}

if ($_POST['do'] == 'login') {

$thepass=trim($_POST['adminpass']);

if ($admin['pass'] == $thepass) {

setcookie ("adminpass",$thepass,time()+(1*24*3600));

echo "meta http-equiv=\"refresh\" content=\"3;URL=".$self."\"";

echo "span style=\"font-size: 12px; font-family: Verdana\"登陆成功......pa href=\"".$self."\"三秒后自动跳转或单击这里进入程序界面 /a/span";

exit;

}

}

if (isset($_COOKIE['adminpass'])) {

if ($_COOKIE['adminpass'] != $admin['pass']) {

loginpage();

}

} else {

loginpage();

}

}

/*===================== 验证结束 =====================*/

// 判断 magic_quotes_gpc 状态

if (get_magic_quotes_gpc()) {

$_GET = stripslashes_array($_GET);

$_POST = stripslashes_array($_POST);

}

---------------------------------------------------------------------------------------------------------------------

可以跳到其它目录

注册登录后利用

可以进行injection……

只能手工注射

注意:showpath里必须包含用户自己的路径

如果限制的话,还可以向上跳,向上级传文件的时候,不能直接

. (注射语句)

就包含用户路径

... rNumber=1402257EE8F

不然不能进行注射。

文件漏洞代码如下

?

define('__SYSTEM_ROOT', '');

include dirname(__FILE__).'/framework_gb/framework.php';

using('System.Data.Data');

using('System.Data.Plugins.Option');

using('System.Page.Page');

using('System.Smarty.Smarty');

using('System.Functions.Functions');

require_once __SYSTEM_ROOT."global.php";

require_once __SYSTEM_ROOT."vars.php";

$db=new stdClass();

$db=$Data-getDB();

/*

echo 'pre';

print_r($Data);

*/

?

可以直接注射,拿到后台密码。

好象是跨脚本漏洞

discuz低版本漏洞(Discuz! X34 漏洞)

相关文章