by lake2
前些天在瀏覽某個站點的時候,一時手癢,在URL後面加了個“ and 1=2”意在看看這系統有沒有SQL注射漏洞,哪曉得瀏覽器彈出兩個對話框然後無限的彈出窗口。只得趕緊結束掉進程,鬱悶,我用的TT瀏覽器,其他的窗口也給結束了,5555~~~
真是豈有此理,注射你也不用這樣子整我吧,我倒要看看你這程序有什麼能耐。到底不敢再去試那個系統,就從其他地方下手得到了webshell,經過打探,原來那是一個叫做“柯南圖片管理系統”的東東。
曉得了牌子那就好辦咯,網上Down一個,看看源代碼先。
它的view.asp裏有這樣的話:
if instr(id,"'") or instr(id,"select") or instr(id,"in") or instr(id,"from") or instr(id,"len") or instr(id,"where") or instr(id,"or") or instr(id,"and") then Response.Write("<script language=javascript>alert('你想做什麼?');window.location.href='check.htm'</script>") Response.End end if '在這裏過濾TMD的不良字符 |
現在看看check.htm的內容:
<script language=javascript> alert("我Call!你想做什麼???"); for (i=1;i<=10000000000;i++) { window.open("http://www.weihai365.com/xxg") } </script> |
看看它的險惡用心吧,彈出兩個對話框之後就會打開100億個窗口,呵呵,爽不?
當然不能拿給他白白欺負啊,我得突破它的SQL注射防禦才行,呵呵,仔細分析原來他的防禦方法只是形同虛設,我們只需變換一下字符就搞定。
看他的判斷語句,是用的instr函數判斷的,如果發現and、or、select等關鍵字就轉到check.htm。嗯,看看instr的函數的用法:
InStr([start, ]string1, string2[, compare])
有2個可選參數start和compare,問題恰恰出在compare這裏。Compare爲0執行執行二進制比較,爲1執行執行文本比較。默認爲0。簡言之,compare爲0的時候比較時是大小寫敏感的。即instr(“ and 1=2”,”And”)等於0。
那現在好辦了,只需把它過濾了的關鍵字的一個字母改成大寫,那麼他那麼長的過濾語句就等於只過濾“’”,無所謂啊,反正注射又用不到“’”。
他的表名是admin,用戶字段admin,密碼字段password,慢慢手工猜吧,呵呵,好像沒有工具可以用,現在知道會編程還是有用處的吧。當然啦,也可以用Union查詢直接得到管理員密碼,這個比猜解快多了,還是寫個程序吧,更快(圖1)。
複製URL訪問之,誒,不對,你先要把關鍵字轉換一下,特別要注意password包含“or”,admin包含“in”,表說我沒提醒你哦。
呵呵,還是那句話:Enjoy Hacking!
哦,最後說下如果要防禦的話只需把參數compare設爲1就ok。