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

sql注入真實網站思路

發布時間: 2022-12-26 17:20:48

A. 如何對網站進行sql注入

進入你的管理後台"資料庫查詢"--「SQL查詢」在查詢框直接注入需要添加的欄位,或是進入SQL後台找到相應欄位直接注入即可。

B. 如何對網站進行SQL注入

首先你要了解什麼是SQL注入漏洞,SQL注入漏洞就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字元串,最終達到欺騙伺服器執行惡意的SQL命令,比如很多影視網站泄露VIP會員密碼大多就是通過WEB表單遞交查詢字元暴出的,這類表單特別容易受到SQL注入式攻擊。
簡單來說,網站一般都是由web應用程序,資料庫,伺服器等組成的,網站的所有用戶數據,密碼表單等等都是保存在資料庫當中的,資料庫的內容按到常理來說是只能在伺服器內部進行查詢,當然,但是,開發人員對客戶端用戶向客戶端提交的參數沒有進行過濾,那麼,黑客就可以從客戶端【瀏覽器,等等,詳細可以學習http協議】向伺服器提交查詢資料庫的SQL語句,如果提交的語句成功的被伺服器給接收到並且執行么,那麼黑客豈不是想怎麼查詢資料庫裡面的內容就怎麼查詢,不是么?那些管理賬號密碼,會員數據不是分分鍾就到手了?SQL注入漏洞危害是非常大的。

當然,這種漏洞是根據提交參數沒過濾而產生的,那麼除了瀏覽器的get提交參數,http協議中還有,post提交,cookie提交,等等。注入漏洞不是網上那些所謂的黑闊,用什麼啊D,明小子之類的亂檢測一氣而找出來的,如果樓主想研究這個漏洞的產生,原理,利用和防禦,是需要進行代碼審計,SQL注入語句基礎,等等。

現在一般常用的工具:SQLmap【這是一款神器,現在是公認最強大的開源注入工具】

建議樓主去看幾本書:《SQL注入天書》《SQL注入漏洞的產生與防禦》

這個漏洞的利用不是幾句話就能說清楚的,詳細的可以追問,純手工打字,望樓主採納。

C. 製作網站時,SQL注入是什麼怎麼注入法

SQL注入是:

許多網站程序在編寫時,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱患。用戶可以提交一段資料庫查詢代碼(一般是在瀏覽器地址欄進行,通過正常的www埠訪問),根據程序返回的結果,獲得某些想得知的數據,這就是所謂的SQL Injection,即SQL注入。

網站的惡夢——SQL注入

SQL注入通過網頁對網站資料庫進行修改。它能夠直接在資料庫中添加具有管理員許可權的用戶,從而最終獲得系統管理員許可權。黑客可以利用獲得的管理員許可權任意獲得網站上的文件或者在網頁上加掛木馬和各種惡意程序,對網站和訪問該網站的網友都帶來巨大危害。

防禦SQL注入有妙法

第一步:很多新手從網上下載SQL通用防注入系統的程序,在需要防範注入的頁面頭部用 來防止別人進行手動注入測試。可是如果通過SQL注入分析器就可輕松跳過防注入系統並自動分析其注入點。然後只需要幾分鍾,你的管理員賬號及密碼就會被分析出來。

第二步:對於注入分析器的防範,筆者通過實驗,發現了一種簡單有效的防範方法。首先我們要知道SQL注入分析器是如何工作的。在操作過程中,發現軟體並不是沖著「admin」管理員賬號去的,而是沖著許可權(如flag=1)去的。這樣一來,無論你的管理員賬號怎麼變都無法逃過檢測。

第三步:既然無法逃過檢測,那我們就做兩個賬號,一個是普通的管理員賬號,一個是防止注入的賬號,為什麼這么說呢?筆者想,如果找一個許可權最大的賬號製造假象,吸引軟體的檢測,而這個賬號里的內容是大於千字以上的中文字元,就會迫使軟體對這個賬號進行分析的時候進入全負荷狀態甚至資源耗盡而死機。下面我們就來修改資料庫吧。

1.對表結構進行修改。將管理員的賬號欄位的數據類型進行修改,文本型改成最大欄位255(其實也夠了,如果還想做得再大點,可以選擇備注型),密碼的欄位也進行相同設置。

2.對表進行修改。設置管理員許可權的賬號放在ID1,並輸入大量中文字元(最好大於100個字)。

3.把真正的管理員密碼放在ID2後的任何一個位置(如放在ID549上)。

我們通過上面的三步完成了對資料庫的修改。

這時是不是修改結束了呢?其實不然,要明白你做的ID1賬號其實也是真正有許可權的賬號,現在計算機處理速度那麼快,要是遇上個一定要將它算出來的軟體,這也是不安全的。我想這時大多數人已經想到了辦法,對,只要在管理員登錄的頁面文件中寫入字元限制就行了!就算對方使用這個有上千字元的賬號密碼也會被擋住的,而真正的密碼則可以不受限制。

D. SQL注入求教學

sql注入,簡單的說,是網站在執行sql語句的時候,使用的是拼接sql的方法執行sql語句的,所有的變數值都是從前台傳過來,在執行時直接拼接的,舉例,用戶輸入賬號密碼,後台查詢user表,比對賬號和密碼是否正確。java中,定義要執行的sql如下:
String loginName=request.getParameter("name");
String passwd=request.getParameter("passwd");
String sql =" select id,name from user where login_name='"+loginName+"' and password='"+passwd+"';
然後調用執行sql的方法,這個時候,我們就可以從前台進行注入了,將loginName的值注入成
1' or '1'='1
這時我們在看sql語句,變成
select id,name from user where login_nane='1' or '1'='1' xxxxxxxx
這樣的sql將返回user表所有數據,達到注入的目的。
總結,sql注入,主要利用代碼中使用拼接sql語句的方式執行sql的漏洞,完全屬於人為造成的後果,使用綁定變數的方式完全可以避免。

E. SQL注入一般適用於哪種網站

SQL注入適用於任何有SQL漏洞的網站,而SQL漏洞的發現需要用掃描工具掃描出來。

SQL注入是利用現有應用程序,將(惡意)的SQL命令注入到後台資料庫引擎執行的能力,它可以通過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的網站上的資料庫,而不是按照設計者意圖去執行SQL語句。

SQL注入一般在網站中可以輸入的文本框中進行。

比如:很多網站主頁都有搜索文本框,而我們就可以利用這個文本框進行與資料庫的交互。

(5)sql注入真實網站思路擴展閱讀:

SQL可以獨立完成資料庫生命周期中的全部活動,包括定義關系模式、錄入數據、建立資料庫、査詢、更新、維護、資料庫重構、資料庫安全性控制等一系列操作,這就為資料庫應用系統開發提供了良好的環境,在資料庫投入運行後,還可根據需要隨時逐步修改模式,且不影響資料庫的運行,從而使系統具有良好的可擴充性。

SQL功能極強,但由於設計巧妙,語言十分簡潔,完成數據定義、數據操縱、數據控制的核心功能只用了9個動詞: CREATE、 ALTER、DROP、 SELECT、 INSERT、 UPDATE、 DELETE、GRANT、 REVOKE。且SQL語言語法簡單,接近英語口語,因此容易學習,也容易使用。

參考資料來源:網路-sql

F. 製作網站時,SQL注入是什麼怎麼注入法

你在每個需要提交的頁面,加入一個提交驗證代碼
或者你直接買防注入的空間

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

×

loading..

資訊
安全
論壇
下載
讀書
程序開發
資料庫
系統
網路
電子書
微信學院
站長學院
QQ
手機軟體
考試

系統安全|
網站安全|
企業安全|
網路安全|
工具軟體|
殺毒防毒|
加密解密|

首頁 > 安全 > 網站安全 > 正文

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

2011-04-19

0 個評論

收藏

我要投稿

我們知道網站後台需要驗證用戶的輸入, 如果不這樣做, 用戶甚至可以輸入一些SQL語句操作後台的資料庫,
這么好玩的事情一直沒有真正體驗過. 前幾日學校搞了一個"你最喜歡的輔導員"投票活動, 網站估計是給某個學生團隊做的,
結果經同學破解了這個網站的管理員帳號和密碼, 我遂向他請教了原理, 也了解了他破解的步驟, 自己又實踐了一遍. 感謝經同學,
沒有他我就不知道這些, 也不可能有這篇博客.
本文破解網站的網址是www.2cto.com 本文的內容不適用於這個網站了.我整理了詳細的破解過程跟大家分享, 文中的邏輯比較強, 需要讀者耐心的看. 但文本講述的是破解步驟, 是一般思路, 如果您有疑問, 請留言, 我們交流討論 :)
一 網站是否存在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加密後的字元串就可以查看到明文是什麼.

H. 製作網站時,SQL注入是什麼怎麼注入法

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

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