sql注入原理及實驗

2021-08-08 09:01:55 字數 2123 閱讀 8941

原理

可以將web程式想象成乙個圖書館管理員,它機械的聽從使用者告訴它的資訊,在書庫(sql程式)中查詢(select)資訊

當你告訴它」三國演義」時,它會查詢並告訴你書庫中《三國演義》的資訊

這裡的組合方式就是 書庫中《[使用者輸入]》的資訊

但是如果你告訴它」三國演義》或《所有書籍」,它機械地聽從指令會查詢並告訴你

書庫中《三國演義》或《所有書籍》的資訊

究其原理,便是使用者輸入的」資料」被惡意構造成」操作」

上例的書名號就是用來區分書名(名詞)和句子其他成分的,在程式中則是使用雙引號來區分字串和語句其他功能指令的

利用這裡拿乙個wargame作為例子:

username=natas14

password=lg96m10tdfapyvbkjdjymbllq5l6qdl1

可以自己先試試~會了的話就不用看了0v0節省下好久時間呢!

開啟以後發現是username和password的輸入框,提供了伺服器端的php源**

<?

if(array_key_exists("username", $_request))

if(mysql_num_rows(mysql_query($query, $link)) > 0) else

mysql_close($link); //關閉mysql連線

?>

連線結構為:

瀏覽器<————->php<————->mysql

|客戶端|    |---伺服器---|

清楚了sql語句的組成,我們就可以嘗試發現php的漏洞了

很明顯,雙引號用來包裹兩個變數,使其作為字串型別的變數送入mysql

而知道了這一點,惡意令輸入中帶有雙引號就會使得$query被送入mysql以後產生歧義:

試試令password= b」 and true,會構造出怎樣的sql語句呢?

select * from users where username = "aaa" and password="b" and true "

很明顯,這是一句錯誤的sql語句,因為雙引號是單數個,就意味著肯定有字串未閉合

說到這裡,就要解釋一下where子句的作用了:

select語句在mysql資料庫是查詢檢索的作用,where子句則是過濾條件

可以理解為

遍歷所有資料項

if(資料項滿足條件)then

echo 資料項;

我們不知道username和password,所以沒法讓username=*** and password=***成立

但是如果滿足的條件恆真,那麼mysql就會顯示所有資料了

即令sql語句為

select * from users where true;

由於and和or優先順序相同,因此它們依次從左向右運算

現有的語句為

select * from users where false and false

是我們可以注入的地方

那麼很明顯,or這個只要一側為真,就令整個表示式為真的操作符就派上用場了

構造select * from users where false and false or true就可以使運算後where恆真了

觀察到$query後恒有乙個雙引號,因此不能簡單地輸入true,而是要構造能夠合理包含尾雙引號的語句,例如令password=b」 or 「1」 = 「1

生成的sql語句就是:

select * from users where username=」a」 and password=」b」 or 「1」=」1」

很明顯,where子句恆真,將會返回資料庫內所有資訊

防禦從sql注入被發現到現在已有十幾年的歷史,在這個過程中黑客和開發者進行了大量的博弈

從最簡單粗暴的檢測使用者輸入中是否存在引號等非法字元,到從sql解決問題的引數化查詢

黑客同時也引入了構造繞過過濾的寬位元組注入法等等

雖然引數化查詢其實可以根本性地解決sql注入的問題,不過由於開發者的水平問題,漏洞仍然層出不窮~

希望大家以後開發網頁的時候要注意哦0 -

SQL注入之Oracle注入及原理

oracle資料庫系統是美國oracle公司 甲骨文 提供的以分布式資料庫為核心的一組軟體產品,是目前最流行的客戶 伺服器 client server 或b s體系結構的資料庫之一,比如silverstream就是基於資料庫的一種中介軟體。oracle資料庫是目前世界上使用最為廣泛的資料庫管理系統,...

SQL注入實驗

1.執行apache server 映象已經安裝,只需執行命令 sudo service apache2 start 2.phpbb2 web應用 映象已經安裝,通過訪問,應用程式源 位於 var www sql sqllabmysqlphpbb 3.配置dns 上述的url僅僅在映象內部可以訪問,...

sql注入原理及基本認識

sql注入簡介 所謂sql注入,就是通過把sql命令插入到web表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。具體來說,它是利用現有應用程式,將 惡意的 sql命令注入到後台資料庫引擎執行的能力,它可以通過在web表單中輸入 惡意 sql語句得到乙個存在安全漏洞...