再探偏移注射

2021-08-25 01:51:14 字數 2034 閱讀 3461

**t00ls

關於union偏移注射這個東西,最早貌似是lake2大黑客提出來的,以前一直當他是雞肋,沒去關注過,直到昨天遇到乙個mysql 4.1的點。

表,列都猜出來了,就差資料。因為他的引數是按「,」分割的,所以在注射的時候必須避開逗號,這樣一來普通的union就用不成了,想暴力猜解也不行,因為substring也得用到逗號。無奈中想起join語句,偏移注射裡面有乙個很重要的技巧就是用join語句來控制欄位數和資料顯示的位置。麻煩的地方在於很多時候你根本不知道目標系統的環境,表裡到底有多少列,資料型別什麼的,怎麼把他拼裝到湊齊字段數,只能靠亂猜。

目標**order by 7正常,order by 8無返回,那麼一共是7個字段,按照通常的做法,應該是先and 1=2 union select 1,2,3,4,5,6,7#來看看情況,這裡因為要避開逗號,就必須用到join語句。但是不知道使用者表一共有幾列,沒有關係,我們可以用select * from ((select username from users)as a join (select username from users)as b on a.username=b.username),把select出部分欄位的結果集當做乙個表,然後來join到一起,這樣只要把(select username from users)as a重複7次,就可以把字段補齊。

上面的語句在mysql5裡面可以正常執行,也可以用到union子句中,可是在mysql4裡就報語法錯誤,看來4.x不支援這麼複雜的巢狀。修改了一下:

select * from users as a join (select id from users) as b on a.id=b.id

這樣在4.1裡可以正常執行,4.0因為不支援子語句,簡單的說就是不支援()裡帶select,所以就木有辦法鳥。

但是這樣又有問題鳥,因為第乙個select後面必須跟*,否則只會返回第一列。mysql的join語句預設應該是inner join,也就是內連線,我嘗試換成left join或者right join都不行,我記得mysql4應該是支援左連線和右連線的,搞不懂這裡為什麼行不通。這麼一來又必需猜目標表的字段數了,而且目標表的字段數必需<=語句裡select出的字段數才行,也受顯示資料字段的制約。好處就是不知道列名也沒關係,可以用常數來代替,即select 1,2,3,4,5 union select * from users as a join (select 1 from users) as b join (select 1 from users) as c on a.id=1

這樣就完全避開了「,」,select出來的資料裡可能會有很多重複,用distinct關鍵字過濾掉即可。

如果目標表的字段》前面選擇的字段也沒關係,因為必需保證最前面的字段是*,找乙個欄位少一點的表,即select * from news as a join (select username from users) as b,不過這個東西受到掃出來的表名,字段數,顯示資料字段的制約,比較雞肋了。

以上語句在mysql裡測試成功,如果要在access或者mssql裡使用,估計得另外除錯。這個跟以前提出來那個偏移注射有些區別,也姑且算另外一種意義上的偏移注射吧。核心思想就是不斷的join來補齊字段,從而避開,。

最鬱悶的是,最後竟然是用fckeditor搞定shell的,真沒技術含量,一下午白研究了-_-

剛才在外面騎車的時候,突然想到,之前的語句select * from users as a join (select id from users) as b on a.id=b.id前面必須要用到*是因為他並沒有把這個select * from users as a作為乙個整體來解析,而是將users as a跟後面的join到一起了,即select * from (users as a join (select id from users) as b on a.id=b.id),當然前面要用*,才能返回子語句裡所有的列數了。

那麼改寫成select distinct * from (select 1 from users)as a join (select 2 from users)as b即可,然後依次像後面join補齊字段,最後把合適的地方換成使用者名稱密碼字段即可。mysql 4.1下測試成功,當然還是需要知道列名,呵呵

SQL注入之偏移注入(Access)

什麼是偏移注入?偏移注入是一種注入姿勢,可以根據乙個較多字段的表對乙個少字段的表進行偏移注入,一般是聯合查詢,在頁面有回顯點的情況下 偏移注入使用場景 在 sql注入的時候會遇到一些無法查詢列名的問題,比如系統自帶資料庫的許可權不夠而無法訪問系統自帶庫。當你猜到表名無法猜到欄位名的情況下,我們可以使...

ACCESS資料庫偏移注入

偏移注入主要是針對知道表,但是不知道欄位的access資料庫。比如我們已經知道了表名是 admin 判斷字段數 order by 22 返回正常 order by 23 返回錯誤 欄位數為 22 爆出顯示位 判斷表內存在的字段數 union select 1,2,3,4,5,6,7,8,9,10,1...

再探函式引數

c函式的所有引數均以 傳值呼叫 方式進行傳遞。這意味著函式將獲得引數值的乙份拷貝,這樣函式可以放心修改這個拷貝值,而不必擔心會修改呼叫程式實際傳遞給它的引數。普通資料型別主要包括 如下面 所示 include void swap int x int y int main 我們原本是希望編寫乙個函式,...