2013年3月16日 星期六

票選系統中常見的灌票漏洞


票選系統中常見的灌票漏洞


沒有使用 Captcha


Captcha 是一種簡單的防止駭客使用程式快速灌票的工具,Captcha 可以用圖形畫出一段文字,並強迫 User 要填入這文字的內容,只要圖形文字上做一點混淆和變形,就能防止文字被程式破解。
而沒有使用 Capcha 的票選系統,是最容易被駭客灌票,只要簡單的寫個 Post or Curl 就可以無止盡的瘋狂灌票了。
一個 Captcha code 的範例
Captcha

Captcha Code 是空值


Captcha Code 會在 User 截入圖片的時候產生,並且記錄一個值在 session or 其他儲存方式,駭客只要埜止瀏覽器自動載入圖片,這樣伺服器就不會產生一組 Captcha Code,接著駭客就在 Form 表單中,故意不填 Captcha,就可以繞過 Captcha 的檢查。
這個漏洞的關鍵在於,工程師在開發票選系統的時候,沒有過瀘空值。
vote1-1.php 沒檢查 Captcha 空值的範例
  1. <?php
  2. if ($_POST['Captcha'] != $_SESSION['Captcha']) {
  3. vote();
  4. }
  5. ?>
看 「vote1-1.php 」這個範例就知道,如果 $_SESSION['Captcha']是空值,那只要駭客輸入的 $_POST['Captcha'] 也是空值,投票就成功了。
vote1-2.php 正確的寫法
  1. <?php
  2. $REG = '/^[a-z0-9]{4,8}$/i';
  3. if(!preg_match($REG , $_POST['Captcha'])) {
  4. //return fail
  5. exit(1);
  6. }
  7. if ($_POST['Captcha'] != $_SESSION['Captcha']) {
  8. vote();
  9. }
  10. ?>

Captcha Code 未清除成 init 狀態


就算工程師知道要過瀘空的 Captcha Code,不過漏洞可能還是會存在,在比對完 User 從 Form 表單填入的 Captcha Code 之後,還要記得將 Captcha 清空,否則駭客只要人工辨識一次 Captcha 圖形的值,然後再一次的關掉瀏覽器自動載入圖片的設定,就能保證 Captcha 永遠不會更新。
在 vote1-1.php 的範例中,因為 $_SESSION['Captcha'] 在投票結束後,沒有被清除,導致駭客可以重覆使用同一個 Captcha 。
vote2-1.php 有清除 Captcha 的範例 (第八行 unset)
  1. <?php
  2. $REG = '/^[a-z0-9]{4,8}$/i';
  3. if(!preg_match($REG , $_POST['Captcha'])) {
  4. //return fail
  5. exit(1);
  6. }
  7. if ($_POST['Captcha'] != $_SESSION['Captcha']) {
  8. unset($_SESSION['Captcha']);
  9. vote();
  10. }
  11.  
  12. ?>
從這個例子來看,可以知道程式的邏輯大致可以分成三個階段。
  • 1. initial
  • 2. process
  • 3. clear (initial again)
確保這三道手續都有完成,可以讓程式的 「Bug」 Or 「漏洞」少一點
----------------------------------------------------------------------------------------------------------

來源文章:http://www.ewebsite.com.tw/WEB_SECURITY_detail/article-149




有以上的BUG就簡單了... ...
只要填值就能過,可以使用以下工具:
web replay: http://www.iewatch.com/downloads.aspx
下載之後使用IE操作一次,web replay會記錄動作,
接著利用上面提到的BUG,把瀏覽器瀏覽圖片關掉,讓驗證碼重複使用。
(下一篇再提到web replay寫法,基本上是VB 但有一點不同。)

另外有幾個參考連結:

http://jck11.pixnet.net/blog/post/8199506-%E8%87%AA%E5%8B%95%E6%8A%95%E7%A5%A8
http://tw.knowledge.yahoo.com/question/question?qid=1612022102291

C# demo:
http://www.codeproject.com/Articles/16738/Automating-web-browsing
這方法需要稍花時間,還沒研究。

沒有留言:

張貼留言