日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

什么是简单的分析SQL注入漏洞

發布時間:2025/3/15 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 什么是简单的分析SQL注入漏洞 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如今非常多人在入侵的過程中基本都是通過SQL注入來完畢的,可是有多少人知道為什么會有這種注入漏洞呢?有的會隨口說著對于字符的過濾不嚴造成的。

可是事實是這樣嗎?我們學這些。不僅要知其然。更要知其所以然!理論聯系實際,才干對我們技術的提高有所幫助。

步驟/方法

1、SQL注入。因為程序在實際使用中,為了管理龐大的數據信息,就會使用到數據庫。數據庫能夠方便程序對全部數據信息進行統一的存儲和分類組織。便于查詢更新。

用戶在使用程序時,程序能夠自己主動通過對數據庫的查詢,將所獲得的信息依照一定格式反饋給用戶,同一時候用戶也是通過交互式的對話框提交給程序數據。從而使程序依照用戶想要的信息進行查詢。反饋給用戶想要的信息。


對于程序這樣的數據庫操作。先來看一段代碼:
strKeyword = Request ["keyword"];
sqlQuery = "SELECT * FROM Aritcles WHERE Keywords LIKE '%" +strKeyword + "%'";
這段代碼的主要目的是依照用戶提交的keywordKeyword。對軟件連接數據庫中的文件進行搜索,找出全部包括用戶keyword的文章來。如果此時。我們提交給軟件“hack”這個數據,這時,“hack”這個keyword就會被傳遞給Keyword關鍵變量。接下來看看代碼的運行情況。keyword獲得數據“hack”后。被賦值給strKeyword變量。然后strKeyword變量被放入查詢語句。此時的查詢語句表現為:"SELECT * FROM Aritcles WHERE Keywords LIKE '%hack%'",這個查詢語句的意思就是從數據庫Aritcles表中查詢出全部包括“hack”這個keyword的文章。注意“hack”這個單詞是我們提交給程序的,因此能夠對其任意改動的。于是。能夠這樣改動,把它變為“hack'; DROP TABLE Aritcles; --”。


如今看看程序會如何處理這個外部keyword數據。

首先。查詢語句變成了:“SELECT * FROM Aritcles WHERE Keywords LIKE '%hack%'; DROP TABLE Aritcles; --”。我們知道DROP TABLE語句是在數據庫操作中刪除一個指定的表的意思。如今那個查詢語句的意思就變了。以中間的分號為標志。分成兩個部分。首先還是正常的查出全部包括hackkeyword的文章。可是接下來……


因為程序使用的數據庫是微軟的SQL SERVER,該數據庫支持多命令語句運行。這些數據庫操作的命令語句都是由分號分隔開。然后依次運行的。

這里的“DROP TABLE Aritcles; --”是一個全然合法的命令語句,“--”符號是SQL SERVER數據庫特有凝視標識,數據庫不運行不論什么命令。這樣,當這段查詢語句運行時,就會去運行一個刪除Aritcles表的數據庫命令。


像這樣,通過控制傳遞給程序數據庫操作語句的關鍵變量來獲得惡意控制程序數據庫,從而獲取實用信息或者制造惡意破壞的,甚至是控制用戶計算機系統的漏洞,就稱之為“SQL注入漏洞”。
SQL注入漏洞全然是利用了將包括了某種目的的SQL語句,通過關鍵變量插入到程序中正常的數據庫操作語句里。

程序一旦發生注入漏洞,就會引發一系列安全隱患。


SQL注入漏洞是不分語言的,不管用什么語言開發的程序,僅僅要涉及對數據庫的操作。都可能存在SQL注入漏洞。

盡管有時會由于編寫語言的要求。或者程序設置環境的不同。導致SQL注入漏洞非常難被經常使用的方法利用,可是總能夠找到突破的方法。

2、以下以站點程序為例。看一看SQL注入漏洞最常常被利用的地方。也是危害最大的地方。
都知道對于一個站點來說,能夠說數據庫存放著站點全部的信息,WEB應用程序全然是憑借數據庫中的信息進行正常的執行的。一個站點程序中,最關鍵的一個部分就是對用戶的合法性的推斷,也就是看訪問它的用戶是不是一個注冊的用戶。

這個時候。就會要求輸入username和password,然后依據輸入的信息查詢數據庫。推斷是否存在用戶,并檢查password是不是一致,假設一致則承認合法用戶。否則將給予非法提示。以下看一段經常出如今論壇程序中的用戶認證程序代碼:
(1)admin1 = trim(request("name"))
(2)password1 = trim(request("password"))
(3)Set rs = Server.CreateObject ("ADODB.Recordset")
(4)sql = "select * from userlogin where name='"&admin1&"' and password='"&password1&"'"
(5)rs.Open sql,conn,1,1
(6)if rs.eof and rs.bof then
(7)response.write"<SCRIPT language=JavaScript>alert('username或password不對!')"
(8)response.write"javascript:history.go(-1)</SCRIPT>"
(9)response.end
(10)else
(11)session("name")=rs("name")
(12)session("password")=rs("password")
(13)response.Redirect("default.asp")
(14)end if
這段程序的第1和第2行分別通過Request對象獲得username和password,第3行是建立一個數據庫操作集對象。第4行就是將username以及password同一時候作為查詢條件放入到userlogin表中進行查詢,第5到第14行就是依據查詢結果進行推斷,彈出警告窗體。或者重定向網頁。
如果數據庫中有個用戶guest。密碼123456,那么該用戶登錄時,認證代碼中的第4行則變為:sql = "select * from userlogin where name='guest' and password='123456'"。這是一個合法查詢語句。所以用戶能正常登錄。反之則登錄不了。


看起來這是一個比較嚴格的認證代碼,可是事實呢?
如今,我們username提交“'or 1='1”,password也是一樣,相同也會成為合法用戶。這是為什么?
當我們提交表單后,代碼通過Request對象獲得提交的username'or 1='1以及password'or 1='1后,直接將這些數據放入了第4行的查詢語句中,于是變成了這樣:sql = "select * from userlogin where name=''or 1='1' and password=''or 1='1'"。我們先看1='1',這個絕對永遠為真,假設你說假。那么你回小學學數學吧,學好再來看吧,呵呵~注意在大馬前面另一個or,這代表者1='1'是作為一個條件選擇語句放入數據庫查詢的,這樣不管查詢語句中的username與password是否正確。都會由于or后面的1='1'代碼,導致查詢語句返回值永遠為真,這樣就是繞過了看似嚴格的用戶認證,獲得了合法的權限。

注意事項

非常多軟件程序與站點程序一樣,都具實用戶登錄這種機制,假設軟件的登錄功能與上述的一樣存于SQL注入漏洞的話,然后,該軟件無用的登錄功能

版權聲明:本文博主原創文章。博客,未經同意不得轉載。

轉載于:https://www.cnblogs.com/zfyouxi/p/4817309.html

總結

以上是生活随笔為你收集整理的什么是简单的分析SQL注入漏洞的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。