後來想了一下有沒有類似的情況,就去無名測試了一次。
這次測試的是無名的驗證碼。
原理
一般的留言都有驗證碼,大部份是以session來做,把驗證碼的解答放在session裡
所以判斷的程式會這樣寫
[code language="php"]
if($_SESSION['captcha']==$_POST['captcha']) //當session的資料 和 post過來的資料相同時
$verify=true;
else
$verify=false;
[/code]
這樣就會造成所謂的漏洞,因為有可能session裡沒有值,post過來也沒有值,在NULL==NULL的情況,就會成立。
所以要改成這樣
[code language="php"]
if( !empty($_SESSION['captcha']) && $_SESSION['captcha']==$_POST['captcha']) //先判斷session是否為空值
$verify=true;
else
$verify=false;
[/code]
破解測試
我這裡是用firefox3 + firebug + web developer來進行測試,以這個來模擬程式。(不然會花太久時間)
就以很有氣質的彎彎的為例吧!
在文章的正下方有驗證碼。
由於驗證碼是儲存在session裡,所以我們要先把session給清掉。
怎麼清呢?由於session是cookie based的一套系統,清掉的方法就是把cookie裡的sessionid給刪掉。
我們用web developer
在Web developer bar -> Cookies -> View Cookie -> delete cookie
如此一來,在換一頁的時候,session就不見了。
接著,開啟firebug,把驗證碼輸入欄位(input)的name改掉。
原本叫magic,把它改成magic2好了
另外發現有個長得像session id的東西,叫magicUUID,也把它更名一下..叫magicUUID2好了。
接著隨便輸入個驗證碼,怕它javascript會檢查是否有輸入。
接著,送出留言,成功留言!
雖然無名有這項漏洞,但他們還是在Yahoo 999的保護傘之下。