|
首先,热烈庆祝中华人民共和国成立六十周年,普天同庆;其次,祝各位路过本blog的孩子们节日快乐,玩的开心~下面开始放两者的漏洞。
这个事情一直没在blog上说,因为有一些顾忌。趁着祖国六十周年大庆,利用揭露漏洞的机会稍微说一下:本人无党派,在私企工作,与gov无任何联系;本人所作所为无任何政治色彩,只是一个愤懑的中国人的软弱反抗。当然,如果我没去碰这两个站,也会有人去搞,坊间爱国的黑客太多了,我只是侥幸碰巧关注的早些从而把它们拿下来而已。
没太多技术含量,高手别见笑~好了,不多说,谈谈漏洞:
一、墨尔本电影节官网(http://www.melbournefilmfestival.com.au/):
墨尔本电影节官网貌似给一个开发CMS的company(MeccaMedialight Pty Ltd.)做的,那一套CMS(名称是Wrangler 8.0.0)写的很不错。
虽然写的很好,但明眼人一眼就看出了网站有注入,确实有注入,而且权限蛮大,可以load_file;mysql版本大于5.0,所有数据都可以猜出来;robots.txt可以知道后台目录是:wrangler8。也许很多人觉得这样子已经很容易拿了,可是我却绊在这里很久,问题是,1、mysql猜到的密码一个都破不了,虽然看上去很像MD5;2、这个服务器貌似就这一个站,根本没旁注的机会。
实在没办法了,还是从源码下手吧。花费时间半天拿到源码(这里不说了,业内人士都知道怎么去搞源码),然后大概读了下源码,基本没找到漏洞。整体系统是没啥严重的漏洞,为什么有注入呢,也许前台是后来写的。执行代码与包含的漏洞没找到,只好还是回归后台,从后台下手吧,看看是什么加密,原来是mysql的password函数,不过我没mysql的库,指定破不了了。不过,后台验证那我发现了问题:Cookie Manipulation。
看源码(不知道是否开源,为了保护开发者利益,cookie名称用xxxxxxxxxxxxx替代):
function ValidateUser () {
$this->UserLvl = 0; $uid = inQuery('user_login'); $pwd = inQuery('password'); $logout = inQuery('logout'); $stay = false; //inQuery('createCookie'); // check for logout if ($logout) { setcookie('xxxxxxxxxxxxx','',time()-60000); header("location:index.php"); exit; } if (!empty($_COOKIE['xxxxxxxxxxxxx']) and !$logout) { // cookie exists @list($c_uid,$cookie_hash) = split(',',$_COOKIE['xxxxxxxxxxxxx']); $q = "SELECT nonce, level, enabled FROM cw_administrators WHERE name='$c_uid'"; $r = db_getarray($q); if (count($r) < 1) { $enabled = false; } else { $nonce = $r[0]['nonce']; $enabled = $r[0]['enabled']; } if ($enabled <> '1') { $this->UserID = ''; $this->UserLvl = 0; setcookie('xxxxxxxxxxxxx','',time()-60000); $this->LoginMsg = 'This account ('.$c_uid.') has been disabled.'; LogEvent('Admin access', 'Login rejected (account disabled). Someone from '. $_SERVER['REMOTE_ADDR']. " could not log in with supplied credentials ('$uid')"); return false; } elseif ((md5($c_uid.$nonce) === $cookie_hash) && $nonce) { // check nonce //这里满足就OK了,来源:http://www.oldjun.com $this->UserID = ($c_uid); // cookie is good, create $user $this->UserLvl = $r[0]['level']; $safe_user = addslashes($c_uid); $q = "UPDATE cw_administrators SET last_access = now() WHERE name = '$safe_user'"; $r = db_query($q); return true; } else { // something's gone wrong $this->UserID = ''; $this->UserLvl = 0; $ok = setcookie('xxxxxxxxxxxxx','',time()-60000); if (!$ok) $this->LoginMsg = 'Please enter your username and password (unable to delete bad cookie)'; else $this->LoginMsg = 'Please enter your username and password (bad cookie)'; return false; } } elseif ($uid and $pwd) { sleep(3); $userdata = $this->HandleLogin($uid,$pwd); if (is_array($userdata)) { extract($userdata); if ($stay) { setcookie('xxxxxxxxxxxxx', $uid.','.md5($uid.$userdata['nonce']), time()+3600*24*365); } else { setcookie('xxxxxxxxxxxxx',$uid.','.md5($uid.$userdata['nonce'])); setcookie('xxxxxxxxxxxxx_nostay','1', time()+3600*24*365); } $this->UserID = $uid; $this->UserLvl = $userdata['level']; RecordEvent('Admin access', 'Successful login by <strong>'.$uid.'.</strong> Remote address is '.$_SERVER['REMOTE_ADDR'], $uid); return true; } else { $this->UserID = ''; $this->UserLvl = 0; $this->LoginMsg = ('Could not log in with supplied credentials. <a href="'.ADMIN_URL.'?frm=rpwd"> Can\'t remember your password?</a>'); LogEvent('Admin access', 'Login rejected. Someone from '. $_SERVER['REMOTE_ADDR']. " could not log in with supplied credentials ('$uid')"); return false; } } else { $this->UserID = ''; $this->UserLvl = 0; $this->LoginMsg = 'Please enter your username and password'; return false; } }
$nonce注入可以得到,于是可以得到$cookie_hash,于是直接修改cookie进后台了,剩下的不多说了,大家都有数。
二、高雄电影节官网(http://www.kff.tw/):
高雄电影节官网貌似也是外包给电脑公司的,但跟墨尔本电影节官网的公司比起来差多了,网站很小,代码也写的比较烂,虽然美工还是有点酷的~
拿这个站只花费了我一分钟,也许很多人已经知道漏洞了,于是我稍微提一下,不多说了。不过这个站也有个有意思的地方,前台可以肆意注入,而且mysql版本大于5.0,表与列都可以得到,可是就是找不到后台密码,于是用工具跑花去半分钟,我觉得数据库找不到用户名密码后(很明显那些表都不像),随便尝试了个常用的方法,一下子进去了,进出无阻,同样是后台验证问题,具体参考这里:http://www.oldjun.com/blog/index.php/archives/41/。
看看源码(后台):
<? //session_start(); if(!isset($_SESSION["ADM_AUTH"]) || $_SESSION["ADM_AUTH"]==""){ ?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script language="javascript">alert("請登入"); location="login.php?refer=<?echo $_SERVER['SCRIPT_NAME']?><? echo $_SERVER["QUERY_STRING"]?"?".$_SERVER["QUERY_STRING"]:""?>"; </script> </head> </html> <? }else{ } ?>
问题一目了然了吧?好了,不多说了,那个网站上的某些新闻真的看得让人很不爽,真想删之而后快。
高雄电影节貌似还没开始,然后官网的漏洞也没有修复。请大家对它的官网手下留情,我不说其他,那电脑公司的网络管理员也是有老婆孩子的,你们别搞的他下岗,这样不好,毕竟这种事情与他无关,做人总是要有点良心的~~~
谨以此文向祖国六十周年献礼,最后附上我保存的最原始的黑页:
|