周末無聊,同學想讓我幫他下載一些電影看,我爽快的答應了。看了這麼多期X檔案,水平自然長進不少,也沒事玩玩"雞"。這次想免費下載些電影,沒問題(我知道N多電影程序有漏洞)。閒話少說,切入正題。
我打開Google,隨便搜索了一下電影網站,點開了一個。看了一下界面,知道和金梅電影系統關聯很大。金梅系統和"洞"網(7.0安全多啦,自己想的)差不多,也是有N多漏洞,比如注入啊,COOKIE欺騙什麼的。我就在X檔案03年11期看過一篇文章,寫的是用ASC和MID函數對系統管理員帳戶進行猜測。我也想用這種方法猜測,猜了半天都沒猜對,真煩人,同學還在那邊等我哪,這不是很丟人。我決定找個簡單的辦法,還是讀讀源碼吧!
下載了一個金梅三電影系統,看了一下,這麼多個文件,頭馬上大了。還是在自己電腦上運行一下吧。注冊了一個用戶,點了一下找回密碼,別人說這裡有漏洞。看了一下,象是有漏洞的界面,有三個參數,還直接把密碼顯示出來。好,看一下源碼。
39 <% if request("myuserid")="" then %>
...
58 <%else
set rs=server.createobject("adodb.recordset")
sql="select passWord from users where userid='"&request("myuserid")&"'and city='"&request("ask")&"'and adress='"&request("answer")&"'"
rs.open sql,conn,1,1
if rs.eof and rs.bof then%>
這裡果然沒過濾。好多人都想到了可以用上面的方法注入了。能不能有更簡單的方法呢?
我仔細考慮語句的形式如下:
select passWord from users where userid=‘‘ and city=‘‘ and adress='‘
如果用戶名,密碼提示問題(city),密碼提示答案(adress)和表users一行匹配,便打印這行的passWord,而且是明文的。我想的過程就不寫了,後來我想到了一種方法,就是利用union查詢。Access功能是很弱的,不能執行命令,不能導出文本,還不能注釋。有個子查詢可以利用之外,也就剩下這個 union了。
怎麼利用呢?先在本機做實驗。測試過程簡略,直接寫有所收獲的結果。
要是知道了一個該網站的一個用戶名(比如abc),可以這樣利用。
在"你注冊問題"處填: abc' or ‘1=1(如果用戶名是bcd,就變為bcd' or ‘1=1)
密碼提示問題處隨便填幾個字母或數字,最好別有符號,容易影響結果: 比如字母a
密碼提示答案處隨便填幾個字母或數字,填個a
回車後就看到該用戶的密碼了,簡單吧(如圖一)。
其實這樣一來,上面的語句就變為:
select passWord from users where userid=‘abc' or ‘1=1‘ and city=‘a‘ and adress='a‘
呵呵,程序無條件的執行了,因為被 or ‘1=1'跳過後面的驗證了。
可是網站用戶名也不是輕易得到的啊。別急,得到用戶名一樣簡單。如下:
在"你注冊問題"處隨便處填幾個字母或數字,最好別有符號,容易影響結果: 比如字母a
密碼提示問題處和上面一樣,隨便填:我也填個a