0x00
我只想说排行榜的不用两分钟就做完的大佬真的厉害!!!!
其实这道题只要sqli-labs做了基础关就可以做出来了,只不过有几个坑的点,一个是账户密码所在的表名很是奇葩(@dmin9_td4b},一般人压根就不会联想到这个表里存放的会是账号密码,还有一个是账号如果你只是找到第一个就拿去尝试登录会发现账号是被禁用的状态,重点是前几个都是禁用的 = =
0x01
主要用到的就是information_schema这个数据库,还有union select查询。
image.png第零步
判断哪里存在注入点,这里进去的主页面肯定是没有的,这里根据提示知道登录的地方是拿到账号密码的时候用到的。但是注意到下面有一排滑动的公告,尝试点击,发现可以跳转到另一个页面。
image.png这里的?id=1太明显了。
第一步:
探测是什么类型的注入
加单引号,and 1=1%23和and 1=2%23
探测是否存在SQL注入以及是什么类型的SQL注入,这里就是单引号类型的,%23就是#表示注释掉后面的内容。
探测表单有几列并确定哪几列可以显示数据
这里我是一般都用%23,URL编码一般不会被过滤,当然这里还有 # %23 -- --+ 这几种类型的,都可以尝试。
?id=-1'union select 1,2,3,4,5,6,7%23
为什么前面id=-1?因为id=-1不成立,union select联合查询的执行条件是前面的是false时才会去执行后面的语句。当然这里也可以用order by语句。
?id=1' order by 7%23
这里如果使用order by函数前面就不用弄一个不成立的,就是要true的数值了。至于这里我为什么是用7,你自己试了其他数字就知道为什么了,多动手。
当然你只有使用union select才知道到底哪几列是你可以用的可以有显示数据的。
第二步:
获取数据库都有哪些,构建payload:
?id=-1' union select 1,(select schema_name from information_schema.schemata limit 0,1),3,4,5,6,7%23
至于这里为什么有limit,就是为了限制显示的数据数目,因为你如果不用limit限制的话网站会提示你超出显示数据的上限(那一串英文提示大概就是这个意思)
其实剩下的payload也都是类似的,我就不一一写出来了,只写个大概我自己加深印象啦。
select table_name from information_schema.tables where table_schema='库名' limit 0,1
select column_name from information_schema.columns where table_name='表名' limit 0,1
select 列名 from 库名.表名 limit 0,1
这里在找到账户密码的时候注意后面还紧跟一个status这个列,这里就是其中的一个坑点,你要是查这个列的数据的时候会注意到这里前几个账户的状态都是0,后面的是1,1的状态账户才能正常登陆。
QQ截图20181107174514.png万箭穿心,哼唧唧
这个账号就可以拿去登录了,对了!!!!
这里还有一个大坑点!!!!!!!!!!!!!!
也不能说是坑,是自己当时脑子没转过来,这里的获得密码是经过MD5加密后的,所以自己要拿去MD5在线解密的网站去解密,蠢得我还去墨者群里问了管理。。然后被管理一个雷劈到了,兼职卧槽了。。。。
拿到账号密码以后去开始那个地方登陆,就能在网站的下面看到key了。
网友评论