今天开始着手分析第一个漏洞,找了一上午靶机,发现一个含有成人内容的违法网站是用dz6.0搭的,今天就看看dz这个版本的洞了
问题函数位置:my.php第623行
if(is_array($descriptionnew)) {//动态初始化$descriptionnew foreach($descriptionnew as $buddyid => $desc) {//buddyid=key if(($desc = cutstr(dhtmlspecialchars($desc), 255)) != addslashes($buddyarray[$buddyid]['description'])) { $db->query("UPDATE {$tablepre}buddys SET description='$desc' WHERE uid='$discuz_uid' AND buddyid='$buddyid'");//buddyid被带入sql语句,跟踪变量处理过程,发现此变量没有被安全函数过滤。 } } }
问题原因:动态生成的数组的key没过滤就传入sql语句中,攻击者可以构造特殊请求为$buddyid赋值,从而构造注入攻击。
复现过程:(后续补上)