當前位置:首頁 » 編程語言 » sql注入語句登陸
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql注入語句登陸

發布時間: 2023-01-07 11:47:35

1. 製作網站時,sql注入是什麼怎麼注入法

打個簡單的比方吧,我們判斷用戶登錄資料庫一般是這樣的sql語句:select
*
from

where
UserName='"+用戶輸入的Name+"
and
Pass='"+用戶輸的pass+"';
如果稍微有一點編程基礎的黑客都會在登錄框里這樣輸入:"字元(隨便輸入字元)
and
1=1"
這是伺服器就會進行驗證,由於1=1在sql查詢語句里是恆等的,那麼盡管用戶輸入的用戶名不正確,也能強制進入程序。
不過,這只是一個簡單的例子罷了,真正的sql注入也不會這么簡單,那些程序員在資料庫設計的時候也不會那麼傻的沒有安全機制。

2. 如何通過注入SQL語句獲取網站管理許可權及安全措施

一 網站是否存在SQL注入漏洞

網站一般包含一張用戶表(用戶名和密碼)和一張管理員信息表(管理員名稱和密碼), 輸入用戶名和密碼之後, 一般做法是後台都會執行一條SQL語句,
查詢有沒有對應的用戶和密碼, 比如SELECT * FROM SomeTable WHERE UserName = $UserName AND pwd =
$pwd, 如果這條語句返回真, 那麼登錄操作就完成了.

試想一下如果在學號和密碼文本框中輸入or=or, 並提交的話, 上面提到的SQL語句就變成了SELECT * FROM SomeTable WHERE
UserName = or=or AND pwd = or=or, 這個語語句變成了一個邏輯表達式, 表達式包含幾段, 分別為:

1. SELECT * FROM SomeTable WHERE UserName = (假)

or

2. = (真)

or

3. (假)

and

4. pwd = (假)

or

5. = (真)

or

6. (假)

最後整個邏輯表達式為0|1|0&0|1|0, 這個結果為真(在執行到"0|1|..."的時候整個表達式省略號中的就不計算了,
因為"或"前面已經是真), 因此可以登錄成功, 事實上也登錄成功了.

二 破解後台資料庫的原理

在用戶名和密碼的文本框中輸入or=or, 截至上面所示的第2步, 表達式值為真, 因為後面緊接了一個"或", 所以無論在這後面的表達式是什麼,
"真或者假""真或者真"都是為真的. 關鍵就是or=or中間的那個=, =表示一個字元, 永遠為真. 如果我們將這個=改成某個SQL表達式,
如果這個表達式為真, 那麼整個表達式就為真.

後面的幾個步驟要求用戶名和密碼文本框中都輸入同樣的文本, 原因是: 後台的語句格式可能是SELECT * FROM SomeTable WHERE
UserName = $UserName AND pwd = $pwd, 也有可能是SELECT * FROM SomeTable WHERE pwd =
$pwd AND UserName = $UserName, 無論哪一種情況, 只要用戶名和密碼都輸入的文本是一樣的, 只要文本中包含的SQL表達式為真,
那麼整個表達式就為真. 這樣寫帶來的另一個好處是復制粘貼很方便.

通過寫一些SQL表達式來一次一次的測試出資料庫里的內容.

三 獲取後台資料庫的表名

如果將表達式替換為(SELECT COUNT(*) FROM 表名)<>0, 這個表達式用來獲取一個表中有多少條記錄,
需要做的就是猜這個表名是什麼, 猜中了的話, 那麼這個表中的記錄條數肯定就不會等於0, 那麼這個表達式的值就是真的. 常用的表名也就是那麼一些,
一個個的代進去試, 最後發現有個叫做admin的表, 它的欄位不為空. 很顯然, 這個表是用來存放管理員信息的.

四 獲取後台資料庫表的欄位名

現在已經知道這個表叫做admin了, 接下來想辦法得到這個表中的欄位.

把表達式替換成(SELECT COUNT(*) FROM admin WHERE LEN(欄位名)>0)<>0,
這個表達式用來測試admin這個表中是否包含這個欄位. LEN(欄位名)>0表示這個欄位的長度大於0, 在這個欄位存在的情況下,
LEN(欄位名)>0是始終為真的. 如果包含的話這個欄位的話, 整條SELECT語句返回的數字肯定不為0, 也就是說整個表達式為真,
從而得到欄位名.

按照這樣的方法, 靠猜共得出了三個很關鍵的欄位:id, admin, pass.

五 獲取欄位的長度

目前已得到的信息是有個admin表, 表中有id, admin, pass欄位. 後台中存儲用戶名和密碼,
常規做法是存儲它們進行MD5加密後的值(32位), 現在測試一下是不是這樣.

把表達式替換為(SELECT COUNT(*) FROM admin WHERE LEN(欄位名)=32)<>0,
將admin和pass代進去結果是真, 說明後台存儲管理員帳號和密碼用的是加密後32位的欄位.

六 獲取管理員帳號和密碼

MD5加密後的字元串包含32位, 且只可能是由0-9和A-F這些字元組成.

1. 獲取管理員帳號

將表達式改成(SELECT COUNT(*) FROM admin WHERE LEFT(admin,1)=A)>0,
意思是我猜測某個adimin帳號的第一個字元是A, 如果成功則表達式成立. 失敗的話, 把A換成0-9和B-F中的任意字元繼續試, 知道成功. 如果成功了,
我再繼續猜這個帳號的第二個字元, 假如第一個字元是5, 我猜測第二個字元是A, 那將表達式改成(SELECT COUNT(*) FROM admin WHERE
LEFT(admin,2)=5A)>0. 可以發現字元串中LEFT()函數中的1變成了2, 另外5A代碼左邊兩個字元是5A, 其中5已經確定下來了.
就這樣重復不斷的猜, 直到得到整個32位的MD5加密後的字元串.

2. 獲取該帳號對應的的id

為什麼需要獲取該帳號對應的id? 原因如下: 按照上一條是可以得到帳號和密碼的, 但一張表中可以有若干個管理員帳號和密碼, 怎麼對應起來呢?
需要通過id. 一個id對應一條記錄, 一條記錄只有一對匹配的帳號和密碼.

將表達式改成(SELECT COUNT(*) FROM admin WHERE LEFT(admin,1)=5 AND id=1)>0,
上一條假設了某帳號第一個字元是5, 只要這個表達式中的"AND id = 1"正確, 那麼就可以得知該帳號的id是1. 如果不是1,
換成其它的數字一個個的試一試.

3. 獲取帳號對應的密碼

現在已經猜出了某管理員的帳號, 並且知道對應的id是多少(假設得出來是4), 現在只要得到該條記錄中記錄的密碼是什麼. 同理,
將表達式改成(SELECT COUNT(*) FROM admin WHERE LEFT(pass,1)=A AND id=4)>0,
注意id已經是知道了的4, 現在要一個個的猜pass中從第1個到第32個字元是什麼, 方法同"獲取管理員帳號"方法.
最後可以得到一個32位的MD5加密後的字元串(密碼).

*注: 如果嫌手工得到每個字元是什麼太麻煩, 可以自己用C#寫一個程序, 模擬一下登錄, 通過控制一個循環, 可以很快得到結果.

七 將MD5加密後的帳號和密碼轉成明文

網上有一些網站資料庫里存儲了海量(幾萬億條)的MD5加密後的暗文對應的明文, 只需輸入你需要查找的MD5加密後的字元串就可以查看到明文是什麼.

3. 關於SQL注入的2個問題:1.怎麼使用sql注入方式登陸,用戶名輸入什麼,密碼輸入什麼,2怎麼防止sql登陸

用戶名,密碼都輸入: or 1 = 1
防止,寫個函數,調用就可以了
function GetVariable(strVariableName)
if IsEmpty(Trim(Request(strVariableName))) then
GetVariable=empty
exit Function
end if
GetVariable=Replace(Trim(Request(strVariableName)),"'","''")
GetVariable=Replace(GetVariable,"=","")
GetVariable=Replace(GetVariable,"--","")
end function

4. 什麼是SQL注入 SQL注入解釋

1、SQL注入即是指web應用程序對用戶輸入數據的合法性沒有判斷或過濾不嚴,攻擊者可以在web應用程序中事先定義好的查詢語句的結尾上添加額外的SQL語句,在管理員不知情的情況下實現非法操作,以此來實現欺騙資料庫伺服器執行非授權的任意查詢,從而進一步得到相應的數據信息。

2、任何一個基於SQL語言的資料庫都可能被攻擊,很多開發人員在編寫Web應用程序時未對從輸入參數、Web表單、cookie等接受到的值進行規范性驗證和檢測,通常會出現SQL注入漏洞。

5. 輕松理解什麼是 SQL 注入

所謂SQL注入式攻擊,就是攻擊者把SQL命令插入到Web表單的輸入域或頁面請求的查詢字元串,欺騙伺服器執行惡意的SQL命令。在某些表單中,用戶輸入的內容直接用來構造(或者影響)動態SQL命令,或作為存儲過程的輸入參數,這類表單特別容易受到SQL注入式攻擊。
舉個簡單的例子:
從理論上說,一個驗證用戶名和密碼的功能,會有如下的SQL語句:
String sql = "select * from user_table where username=
' "+userName+" ' and password=' "+password+" '";
然後在這個語句的username=」後面注入 or 1=1 用戶名等於 」 或1=1 這個條件,上面的SQL語句變成:
SELECT * FROM user_table WHERE username=
'』or 1 = 1 -- and password='』
那麼不用輸入用戶名和密碼,就可以登陸了。

6. sql注入中的登陸問題~~

簡單一點的。
判斷:用戶或密碼
if exists(select * from tbluser where usercode=@usercode and password =@pwd)
{
return true
}
else
{
return false
}
如果你將@userCode 換成LIKE '%%'--就行了或是樓上的
註:這樣只能是SQL語句的

7. 簡述什麼是SQL注入,寫出簡單的SQL注入語句

SQL注入:利用現有應用程序,將(惡意)的SQL命令注入到後台資料庫引擎執行的能力,這是SQL注入的標准釋義。

8. 如何進行SQL注入攻擊

SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字元串,最終達到欺騙伺服器執行惡意的SQL命令,首先你要熟悉SQL語句和語法
猜表名
And (Select count(*) from 表名)<>0
猜列名
And (Select count(列名) from 表名)<>0
也可以這樣
and exists (select * from 表名)
and exists (select 列名 from 表名)

9. sql注入攻擊是怎麼在用戶名和密碼那兒登陸的時候注入SQL語句的說得通俗點,官網的太理論太籠統看不明白

比如 你的檢測語句是
select * from user where name=『「變數1」』 and password=『變數2』
如果能找到記錄則判定登陸成功。

那麼對方如果在填寫用戶名和密碼的時候寫 密碼 1' or 』1『='1 吧這個替換到 你最後形成的sql 語句就變成了
select * from user where name=『 1' or 『1』='1』 and password=『 1' or 『1』='1』
由於1=1是恆等的。也就會把所有記錄給查出來。這樣。這樣就可以達到不知道密碼或者是用戶名的情況就登陸了