考点

1.联合注入会生成虚拟的表

首先可以看到该表只有一个用户

打破常规的万能密码([GXYCTF2019]BabySQli) - 图1

然后我们可以用联合查询的方式将查询的数据插入到表中

打破常规的万能密码([GXYCTF2019]BabySQli) - 图2

给出两道题的地址:

Training: MySQL I:http://www.wechall.net/challenge/training/mysql/auth_bypass1/index.php

Training: MySQL II:http://www.wechall.net/challenge/training/mysql/auth_bypass2/index.php

还有两道题的中文WriteUp:

https://artd33.github.io/2019/12/29/Training-MySQL-I-Training-MySQL-II/

题解

原题目描述:刚学完sqli,我才知道万能口令这么危险,还好我进行了防护,还用md5哈希了密码!

打破常规的万能密码([GXYCTF2019]BabySQli) - 图3

在进行注入的时候,发现了有这么一串,脑洞其实够大的,先base32,再base64解码后得到:

打破常规的万能密码([GXYCTF2019]BabySQli) - 图4

看来以后要多个心眼了啊

这里是有过滤的,经过测试。这里有三列

打破常规的万能密码([GXYCTF2019]BabySQli) - 图5

所以应该可以猜测分别为id,username,password

根据他的题意我们大概猜测源码:

打破常规的万能密码([GXYCTF2019]BabySQli) - 图6

我们运用上面的知识点,我们联合查询的时候构建出一个假的表插入进去,

用mysql创一个表叫user,创建三个列 id,username,password,这时如果执行一个查询语句:select * from user where username = 0 union select 1,’admin’,md5(‘abc’); 则会返回以下结果:

打破常规的万能密码([GXYCTF2019]BabySQli) - 图7

这样的话思路就很清晰了,我们先在用户名处输入1' union select 1,'admin','900150983cd24fb0d6963f7d28e17f72'#,得到的是上图的结果。密码处我们再输入一个上图密码md5加密之前的密码 也就是abc 即可绕过检验,成功登陆admin账户

打破常规的万能密码([GXYCTF2019]BabySQli) - 图8

打破常规的万能密码([GXYCTF2019]BabySQli) - 图9

payload:

  1. username = 1' union select 1,'admin','900150983cd24fb0d6963f7d28e17f72'#
  2. password = abc

这是一道md5比较bypass的题,和大家行间的那种“or 1=1的万能密码”原理不同,而题目又说了“我才知道万能口令这么危险” 小心不要被我们刻板印象中的万能密码带偏了方向。