顯示具有 網路投票 標籤的文章。 顯示所有文章
顯示具有 網路投票 標籤的文章。 顯示所有文章

2013年4月17日 星期三

Web replay code 自動網路投票



'####################view script##################################


rndName = GetRandomName()
Tel  = RandomNumbers(1, 99999999)
Email = GetRandomEmail()
Browser(1).Page("32303133A578A55FB0EABBDAC2A7AB7EBA5BA4E5A8E3AE695F31").Edit("txtName").Value=rndName
Browser(1).Page("32303133A578A55FB0EABBDAC2A7AB7EBA5BA4E5A8E3AE695F31").Edit("txtPhone").Value=Tel
Browser(1).Page("32303133A578A55FB0EABBDAC2A7AB7EBA5BA4E5A8E3AE695F31").Edit("txtEmail").Value=Email
Browser(1).Page("32303133A578A55FB0EABBDAC2A7AB7EBA5BA4E5A8E3AE695F31").Image("送出").Click
Browser(1).Page("32303133A578A55FB0EABBDAC2A7AB7EBA5BA4E5A8E3AE695F31").Edit("txtCkeckCode").Value="9BSRU"
Browser(1).Page("32303133A578A55FB0EABBDAC2A7AB7EBA5BA4E5A8E3AE695F31").Image("送出").Click
Browser(1).Dialog("網頁訊息").Button("確定").Click
Browser(1).Tools.NavigateBack

'以上code 由web replay自行產生,page的欄位編碼我轉過,基本上不會產生這種東西。


'####################include script##################################
 
Function RandomNumbers(Lowest, Highest)
      Randomize
      RandomNumbers = Int((Highest + 1 - Lowest) * Rnd + Lowest)
End Function

Function GetRandomEmail()
    Randomize
    length = 8
    tmpEmail = ""
    ext = "@yahoo.com.tw"
    For i = 1 To length
        tmpAsc = Int(26 * Rnd + 97)
        tmpNum = tmpNum & Int((9 + 1 - 1) * Rnd + 1)
        tmpEmail = tmpEmail & Chr(tmpAsc)
    Next
    GetRandomEmail = tmpEmail & tmpNum & ext
End Function

Function GetRandomName()
o = "偉勇毅俊峰強平保東文輝力明永健世廣志義興良海山仁波寧貴福生龍元勝學祥才發武新利清飛彬富順信子傑昌成星光天達安岩中茂進林有堅和博誠先敬震振壯會思群心邦承樂紹功松善厚慶磊民友裕河江超浩亮政謙亨奇翰朗宏言若朋斌啟倫翔旭鵬澤晨建家致樹炎德行時泰盛雄鈞冠策騰楠榕風弘" '男名第一字www.12264.com

o2 = "偉剛勇毅俊峰強軍平保東文輝力明永健世廣志義興良海山仁波寧貴福生龍元全國勝學祥才發武新利清飛彬富順信子傑濤昌成康星光天達安岩中茂進林有堅和彪博誠先敬震振壯會思群豪心邦承樂功松善厚慶磊民友裕河江超浩亮政謙亨奇固之翰宏言若鳴朋斌維克倫翔旭鵬建家致樹炎德行時泰盛雄鈞冠策騰楠榕風航弘"  '男名第二字

o3 = "秀英華慧巧美娜靜淑惠珠翠雅芝玉萍紅玲芬芳燕彩春菊蘭鳳潔梅琳素雲蓮真環雪妹霞香月鶯媛艷佳嘉瓊珍莉桂葉璐琦晶妍茜秋珊錦黛倩婷婉嫻瑾露瑤怡嬋雁蓓儀荷丹蓉眉君琴蕊薇菁夢嵐苑婕馨瑗韻聰純毓悅昭冰爽琬羽希欣飄馥柔曉歡芸菲宜可姬舒麗陽妮嬌靈琪晴容雯萱彥宇雨藍翠煙"  '女名第一字

o4 = "秀娟英華慧巧美娜靜淑惠珠翠雅玉萍紅娥玲芬芳燕彩春菊蘭鳳潔梅琳素雲蓮真環雪妹霞香月鶯媛艷佳嘉瓊珍莉桂葉璐琦晶妍茜秋珊錦黛倩婷婉嫻瑾露瑤怡嬋雁蓓儀荷丹蓉眉君琴蕊薇菁夢嵐苑婕馨瑗韻聰純毓悅昭冰爽琬羽希欣飄馥柔曉歡芸菲宜可姬舒麗陽妮嬌靈琪晴容雯萱彥宇雨曼藍兒翠煙"  '女名第一字

Randomize

x1 = "趙錢孫李周吳鄭王馮陳衛蔣沈韓楊朱許何呂施張孔曹嚴陶戚謝鄒蘇潘範彭馬花方任袁柳唐費薛雷賀湯羅畢傅顧孟黃穆姚邵毛狄戴宋龐熊紀舒屈項祝董梁杜阮賈江童顏郭梅林鍾徐駱高蔡田胡霍盧莫柯房丁鄧單洪包崔龔程裴翁仇劉詹葉邰賴卓喬譚溫莊習易廖耿聶關" '百家姓中常見單姓
x2 = Len(x1)
x3 = o
x4 = Len(x3)
x5 = o2
x6 = Len(x5)
x7 = Mid(x3, Int(Rnd * x4) + 1, 1)
x8 = Mid(x5, Int(Rnd * x6) + 1, 1)
x9 = Mid(x1, Int(Rnd * x2) + 1, 1)

z = x9 & x7 & x8   '最終的名字,換成z = x9 & Space(2) & x7 為單字名字www.12264.com

GetRandomName = z '顯示名字
End Function

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
這方法需要稍花時間,還沒研究。