天天看點

oracle寬位元組注入,SQL 手工注入總結,必須收藏!

oracle寬位元組注入,SQL 手工注入總結,必須收藏!

雖說目前網際網路上已經有很多關于sql注入的神器了,但是在這個WAF橫行的時代,手工注入往往在一些真實環境中會引起尤為重要。此處主要把以前學過的知識做個總結,不會有詳細的知識解讀,替代查詢手冊的形式,更多以後的複習與查閱,文中内容可能會存在錯誤,望師傅們斧正!

0x01 Mysql手工注入

1.1聯合注入

1.2報錯注入

每個一個報錯語句都有它的原理:

exp()報錯的原理:exp是一個數學函數,取e的x次方,當我們輸入的值大于709将報錯,然後 取反它的值總會大于709,是以報錯。

updatexml()報錯的原理:由于updatexml的第二個參數需要Xpath格式的字元串,以 開頭的内容不是xml格式的文法,concat()函數為串聯連接配接函數而不符合規則,但嵌套内的執行結果以錯誤的形式報出,這樣就可以實作報錯注入了。

這裡需要注意的是它加了連接配接字元,導緻資料中的md5隻能爆出31位,這裡可以用分割函數分割出來:

1.3盲注1.3.1時間盲注

時間盲注也叫延遲注入一般用到函數sleep()BENCHMARK()還可以使用笛卡爾積(盡量不要使用,内容太多會很慢很慢)

一般時間盲注我們還需要使用條件判斷函數

我們一般喜歡把分割的函數編碼一下,當然不編碼也行,編碼的好處就是可以不用引号,常用到的就有ascii()hex()等等

1.3.2布爾盲注

1.4插入,删除,更新

插入,删除,更新主要是用到盲注和報錯注入,這種注入點不建議使用sqlmap等工具,會産生大量垃圾資料,一般這種注入會出現在編碼,ip頭,留言闆等等需要寫入資料的地方,同時這種注入不報錯一般較難發現,我們可以嘗試性插入,引号,雙引号,轉義符\讓語句不能正常執行,然後如果插入失敗,更新失敗,然後深入測試确定是否存在注入

1.4.1報錯

1.4.2盲注

1.5二次注入與寬位元組注入

二次注入的語句:在沒有被單引号包裹的sql語句下,我們可以用16進制編碼他,這樣就不會帶有單引号等。

二次注入在沒有二進制的情況比較難發現,通常見于注冊,登入惡意賬戶後,資料庫可能會因為惡意賬戶名的問題,将admin'-+誤認為admin帳戶

寬位元組注入:針對目标已達到一定的防護,單引号轉換為 ,mysql轉換 編碼為 ,寬位元組中兩個位元組代表一個漢字,是以把 加上 就變成了一個漢字“運”,使用這種方法成功繞過過轉義,就是所謂的寬位元組注入

0x02 Oracle手工注入

2.1聯合注入

2.2報錯注入

2.3盲注

2.3.1布爾盲注

既然是盲注,那麼肯定涉及到條件判斷語句,Oracle除了使用if else結束,如果這種複雜的,還可以使用encode()函數。

文法:decode(條件,值1,傳回值1,值2,傳回值2,...值n,傳回值n,更改值);

該函數的含義如下:

2.3.2時間盲注

可使用DBMS_PIPE.RECEIVE_MESSAGE('任意值',延遲時間)函數進行時間盲注,這個函數可以指定延遲的時間

0x03 SQL Server手工注入

3.1聯合注入

3.2報錯注入

3.3盲注

3.3.1布爾盲注

3.3.2時間盲注

END