自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL注入常規(guī)Fuzz全記錄

安全 應用安全
本篇文章是在做ctf bugku的一道sql 盲注的題(題目地址:注入題目)中運用了fuzz的思路,完整記錄整個fuzz的過程,給師傅們當點心,方便大家加深對web sql注入 fuzz的理解。

SQL注入常規(guī)Fuzz全記錄

前言

本篇文章是在做ctf bugku的一道sql 盲注的題(題目地址:注入題目)中運用了fuzz的思路,完整記錄整個fuzz的過程,給師傅們當點心,方便大家加深對web sql注入 fuzz的理解。

進入主題

1.訪問題目,是個典型的登錄框

2.嘗試輸入admin/123456,提示密碼錯誤,因此可以確定存在用戶admin,這里可能會有師傅要爆破了,但這里題目要求sql注入,我們就按照預期解來吧。

3.我自己寫了個簡單的fuzz burp插件,先將登陸請求包發(fā)送到插件掃描,可以看到是存在盲注的,payload的形式為:

4.fuzz

(1)從payload的形式可以猜測題目應該是過濾了注釋符(–+和#)

(2)fuzz一遍特殊字符,看看過濾了什么

當存在過濾的字符時,響應包是這樣的

因此可以作為fuzz的判斷(當然有些waf是靜默waf,就是照樣接收你的數(shù)據(jù)但自己做了處理,返回正常頁面,這種fuzz的判斷有時候就需要設計下你的payload,這種在以后的文章繼續(xù)討論)

fuzz特殊字符,結果如下,可以看到長度為370的是被wa了的,過濾了相當多的字符,特別是內聯(lián)注釋 注釋符 空格 %0a %0b %0d %a0這些比較常用的繞過關鍵組件,尤其注意過濾了逗號

(3)fuzz一遍關鍵字,過濾了and or order union for 等等,因此取數(shù)據(jù)常用的mid( xx from xx for xx)就不能用了,之前逗號也被過濾了也就不能用mid(xx,1,1)。

(4)fuzz函數(shù)名和操作符(由于插件的掃描結果沒有過濾sleep,直覺上是沒有對函數(shù)做過濾)

不出意外,確實是只有包含關鍵字or and等的函數(shù)被wa了,其他基本沒有,其實這里我們也可以聯(lián)想到跑表經(jīng)常要用的information_schema表是存在or關鍵字的,因此后面構造語句的時候也就不能直接用information_schema

(5)嘗試用時間盲注跑數(shù)據(jù)

  1. if(11=1,sleep(5),0) 

由于不能用逗號需要變?yōu)?/p>

  1. CASE WHEN (11=1) THEN (sleep(5)) ELSE (2) END 

但空格也被過濾了,需要用括號代替空格(/*!*/ 空格 tab %a0 %0d%0a均被過濾了)

  1. (CASE WHEN(11=1)THEN(sleep(1))ELSE(1)END); 

最后本地測試的時候發(fā)現(xiàn)case when之間不能用括號,做一下字符fuzz,從%00到%ff

可以看到結果是確實不行,并不能產(chǎn)生延時(有的直接被wa,有的沒被wa但sql語句無法生效),因此基本可以確認不能用時間盲注跑數(shù)據(jù),于是我們只能考慮布爾盲注

(6)嘗試布爾盲注

由于無法使用if或者case/when,只能使用題目自帶的bool盲注做邏輯判斷(=) 比如我們一開始就注意到存在admin用戶,改造插件的payload: ‘+sleep(5)+’ (注意把+換為%2b)

  1. admin'+1+' (false,注意把+換為%2b) 
  2. admin'+0+' (true,注意把+換為%2b) 
  1. select * from user where name='admin'+1+'' and passwd='123456';(為false) ==>提示用戶名錯誤 
  2. select * from user where name='admin'+0+'' and passwd='123456';(為true) ==>提示密碼錯誤 

這里是mysql的一個特性,可能有不明白的師傅,可以做下實驗

  1. select 'admin'='admin'+0 union select 'admin'='admin'+1; 

前者為1后者為0,先對右邊的等式做運算,發(fā)生強制轉換,結果為數(shù)字,然后再和左邊的admin字符做比較,又發(fā)生了強制轉換,因此出現(xiàn)1和0的區(qū)別。

這樣子我們就解決了布爾盲注的判斷了

(7)解決下跑數(shù)據(jù)的問題

這里不能用mid(xxx,1,1)也不能用mid(xxx from 1 for 1),但查手冊發(fā)現(xiàn)可以使用mid(xxx from 1),表示從第一位開始取剩下的所有字符,取ascii函數(shù)的時候會發(fā)生截斷,因此利用ascii(mid(xxx from 1))可以取第一位的ascii碼,ascii(mid(xxx from 2))可以取第二位的ascii,依次類推

(8)burp跑數(shù)據(jù)

a.判斷passwd字段的長度: 跑出長度為32

(這里可以猜字段,根據(jù)post請求包中的passwd猜測數(shù)據(jù)庫的字段應該也是passwd,這樣就可以不用去跑information_schema,直接在登陸查詢語句中獲取passwd)

b.跑第一位

這里的payload我用的不是上面的,從最后面開始倒著取數(shù)據(jù)然后再reverse一下,那時候做題沒轉過彎,其實都一樣的,用下面的payload的好處是假如ascii不支持截斷的情況下是不會報錯的(用于其他數(shù)據(jù)庫的時候)

  1. =admin'-(ascii(mid(REVERSE(MID((passwd)from(-1)))from(-1)))=48)-' 

用這一個也可以的

  1. =admin'-(ascii(mid(passwd)from(1))=48)-' 

重復上述操作修改偏移,即可獲取32位密碼005b81fd960f61505237dbb7a3202910解碼得到admin123,登陸即可獲取flag,到這里解題過程結束。

總結

1.上述用到的fuzz字典均可在sqlmap的字典以及mysql官方手冊中收集

2.這里僅僅是常規(guī)的fuzz,但大多數(shù)fuzz其實都是相通的,主要是fuzz的判斷,fuzz的位置,fuzz payload的構造技巧等等

歡迎各位大師傅一起交流討論!

責任編輯:趙寧寧 來源: Freebuf
相關推薦

2011-04-27 10:14:38

2014-07-29 17:46:09

Linuxtomcattomcat集群

2015-07-23 14:46:11

蘋果iOS 8.3越獄

2024-01-26 15:19:30

新榜大會內容好生意

2015-01-15 10:50:46

CoreOSUnitedStackDocker

2010-12-20 16:04:30

2018-06-20 13:01:27

2025-04-15 01:00:00

SSH程序連接安全

2014-12-15 14:57:58

2011-05-31 15:28:23

筆記本體驗

2017-08-10 10:23:59

2017-01-11 22:41:05

2011-07-27 22:50:50

激光打印機用戶體驗

2010-04-13 14:35:17

2009-04-17 09:50:36

微軟面試求職

2009-04-23 13:24:34

Nehalemintel服務器

2020-10-26 07:04:29

SQL注入mysql

2013-05-02 15:09:22

2023-07-17 18:10:44

2018-05-10 08:55:51

點贊
收藏

51CTO技術棧公眾號