今天看到了asrc上面對某個cms的漏洞分析的文章(http://security.alibaba.com/blog/blog.htm?spm=0.0.0.0.96tpib&id=13 ),感覺阿里大牛在寫漏洞分析的時候還是有點謹慎,利用方式什麼就更不能說了。
百度搜了一下這個CMS,使用量還是不小的。對php不太懂,簡單學習了一下,並且總結了利用方式。
漏洞的原因就是 inc/common.inc.php 中的這一段代碼:
if(!ini_get('register_globals')){@extract($_FILES,EXTR_SKIP);}
這段代碼的含義就是把 php接收到的$_Files 請求的數群組轉換成一些變數。而我們知道,這些變數是不會經過魔術引號的轉義的。
再看 member/comment.php 這個檔案,如下代碼:
if($job=='del'){ foreach( $cidDB AS $key=>$value){$rs=$db->get_one("SELECT aid FROM {$pre}comment WHERE cid='$value'");$erp=get_id_table($rs[aid]);$rsdb=$db->get_one("SELECT C.cid,C.uid AS commentuid,C.aid,A.uid,A.fid FROM {$pre}comment C LEFT JOIN {$pre}article$erp A ON C.aid=A.aid WHERE C.cid='$value'");if($rsdb[uid]==$lfjuid||$rsdb[commentuid]==$lfjuid||$web_admin||in_array($rsdb[fid],$fiddb)){$db->query("DELETE FROM {$pre}comment WHERE cid='$rsdb[cid]'");}$db->query("UPDATE {$pre}article$erp SET comments=comments-1 WHERE aid='$rsdb[aid]'");}refreshto("$FROMURL","刪除成功",0);}
其中 $cidDB 這個變數本應該是從URL裡面通過get方式擷取的留言的id ,然後拼到sql語句裡面執行sql的。
但是因為 comment.php引用了common.inc.php,並且$cidDB並沒有初始化,所以這邊我們可以用 $_Files裡面的變數去直接給 $cidDB 賦值,並且沒有轉義。
poc:
其實算不上poc,就是一個簡單的利用方式。
寫一個簡單的html頁面:
action裡面寫網站相關地址
然後我們重新命名一個檔案,名為:1' union select version() and '1'='1
然後提交上傳,就可以看到返回結果了:
這邊有個比較麻煩的問題是: 由於value值儲存在了兩個sql語句裡面,這兩個語句的列不一樣,所以這邊用union會報錯,只能盲注了。或者尋找一下其他地方的未初始化的變數也可。
以上就介紹了齊博CMS的sql注入漏洞學習,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。