[极客大挑战 2019]LoveSQL
坚持第八天,又是个SQL注入,这年头这个比较热门吗

前置准备
和上次万能密码那道题一样的界面,上面有一行小字看不清,看看源码

用sqlmap是没有灵魂的,看来这题不能sqlmap,不过我也不会sqlmap呀,就算能用我也用不了,万能密码试一试

看来是可以的,出了一个这玩意

尝试各种解密md5碰撞,无果,看来这不是flag,那么既然万能密码有用,可能是我们需要的并不是这个表,或是这个列,意思就是假设数据库查询语句如下
select * from user where username = '$a' and password = '$b'
输入万能密码后
select * from user where username = '1' or 1=1# and password = '$b'
这个user不是我们需要的表,flag在其它表,或是其它列里面,这个时候可能要用到联合查询union select,联合查询就是在正常语句后面再接一句话查另外的东西,而这句话是完全可控的,虽然灵活性不如堆叠注入(只能查询)但是应用范围更广,例如:
select a from user where username = '1' union select b from password;
这后面半句话就可能作为payload为我们所利用,有了这个思路接着看这个题,联合查询注入主要有以下几个步骤,这是最经常使用的注入步骤
sql注入标准步骤
1、探究显示位
我们需要知道网页前端能显示我们注入结果的第几个,这是帮助我们构造payload的前提,这里有个知识,就是union select1,2,3…数据库返回的结果就是数字一列一个数字,利用这个性质我们可以开始探究前端显示位的规律,输入如下(全是针对用户名注入,密码随便填,注入用户名和密码的一致性证明已在我的另一篇文章中说明,当然,在此之前需要判断有多少列
payload=1' order by 1/2/3 # /代表或的意思,逐一试一试
为了方便,直接在bp里面发包,可以看到到4的时候报错,说明是3列

这个时候输入如下
payload=1' union select 1,2,3#

可以看到其显示位是2和3,那么我们查询的时候就把信息放在这两位上,然后就是第二步
2、注出数据库类型版本
payload=1' union select 1,database(),version()#
执行结果如下

要想正确的注入,首先要知道数据库类型,才能使用正确的语句,不同数据库查版本的语句不一样,这一步就要探究清楚,本题可知当前数据库为geek
3、爆表
我们需要弄清楚一共有哪些表可以用,然后才能判断flag在哪个表里面,payload如下
payload=1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()#
解释一下这个语句的含义,这个语句前一半group_concat(table_name) from information_schema.tables意思是:mysql有一个数据库里面存有所有的其它数据库信息(其它数据库名字不同,但总是有一个像这样汇总的数据库),这个数据库就是information_schema,其中的tables字段存储有所有的表名,后一半就是条件为当前数据库,整句话的意思就是查找当前数据库中的所有表,group_concat意思是将所有结果在一行输出,注入结果如下

得到两个表,从职业敏感性来说,flag肯定在后面那个表里面,如果看不出来,可以都注入一下试试,这里就只针对后面那个表,前面的同理
4、爆列名
payload如下,原理基本与前文一样,就不多做解释,这样注入可得到l0ve1ysq1表的所有列名
payload=1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'#

可以得到三个列名
5、爆字段
原理一样就不多说了
payload=1' union select 1,2,group_concat(id,username,password) from l0ve1ysq1#
得到结果

flag就在里面,这个人又想找女朋友?🤣,这个题貌似没找到源码,不过可以肯定的是万能密码注入不出来是因为select语句查的是geekuser表,你通过上述方式查一遍该表,可以发现输出结果与万能密码的结果一致,这种情况下只能用联合查询注入。
这个题是一个很典型的走流程的sql注入,大部分sql注入应该从本题这几个步骤开始,而不是学习堆叠注入那些偏门方法,一定要弄懂这些语句背后的原理,切不可死记硬背

浙公网安备 33010602011771号