bluecms
BlueCMS是一款專注於地方門戶網站建設解決方案,基於PHP+MySQL的技術開發,全部源碼開放。
復現版本爲bluecmsv1.6版本,各位可自行下載。
代碼審計
這次不用Seay挖xss漏洞,我們通過關鍵功能測試來審計xss漏洞。
在後臺->會員管理->會員列表處,管理員是可以查看會員信息的,要是此處信息能從前臺插入xss代碼,就能盜取管理員cookie。
來到會員資料修改處,嘗試進行資料的修改,
可以看到可控的有郵箱,msn,qq,電話,地址。
抓包分析得知,該功能在user.php的edit_user_info方法中實現。
//編輯個人資料
elseif($act == 'edit_user_info'){
$user_id = intval($_SESSION['user_id']);
if(empty($user_id)){
return false;
}
$birthday = trim($_POST['birthday']);
$sex = intval($_POST['sex']);
$email = !empty($_POST['email']) ? trim($_POST['email']) : '';
$msn = !empty($_POST['msn']) ? trim($_POST['msn']) : '';
$qq = !empty($_POST['qq']) ? trim($_POST['qq']) : '';
$mobile_phone = !empty($_POST['mobile_phone']) ? trim($_POST['mobile_phone']) : '';
$office_phone = !empty($_POST['office_phone']) ? trim($_POST['office_phone']) : '';
$home_phone = !empty($_POST['home_phone']) ? trim($_POST['home_phone']) : '';
$address = !empty($_POST['address']) ? htmlspecialchars($_POST['address']) : '';
if (!empty($_POST['face_pic1'])){
if (strpos($_POST['face_pic1'], 'http://') != false && strpos($_POST['face_pic1'], 'https://') != false){
showmsg('只支持本站相對路徑地址');
}
else{
$face_pic = trim($_POST['face_pic1']);
}
}else{
if(file_exists(BLUE_ROOT.$_POST['face_pic3'])){
@unlink(BLUE_ROOT.$_POST['face_pic3']);
}
}
if(isset($_FILES['face_pic2']['error']) && $_FILES['face_pic2']['error'] == 0){
$face_pic = $image->img_upload($_FILES['face_pic2'],'face_pic');
}
$face_pic = empty($face_pic) ? '' : $face_pic;
$sql = "UPDATE ".table('user')." SET birthday = '$birthday', sex = '$sex', face_pic = '$face_pic', email = '$email', msn = '$msn', qq = '$qq'," .
" mobile_phone = '$mobile_phone', office_phone = '$office_phone', home_phone = '$home_phone', address='$address' WHERE user_id = ".intval($_SESSION['user_id']);
$db->query($sql);
showmsg('更新個人資料成功', 'user.php');
}
地址處有過濾,不考慮;
郵箱,msn,qq,電話沒有過濾,但是在數據庫中,qq和電話有長度限制,排除;
最後剩下郵箱和msn似乎存在xss漏洞。
漏洞復現
回到會員資料修改處,郵箱和msn都插入xss代碼,點擊確認修改。
可以看到彈窗了。
後臺查看會員列表,也順利彈窗了。
可以看出,郵箱的xss插入成功,而msn的沒有,所以是郵箱處存在xss漏洞。