考点
1.联合注入会生成虚拟的表
首先可以看到该表只有一个用户
![打破常规的万能密码([GXYCTF2019]BabySQli) - 图1](/uploads/projects/u390550@fftlfh/442c9023715339191ec3d55799b9c9e0.png)
然后我们可以用联合查询的方式将查询的数据插入到表中
![打破常规的万能密码([GXYCTF2019]BabySQli) - 图2](/uploads/projects/u390550@fftlfh/c0d846979bf30b6e8bdcd085d0781863.png)
给出两道题的地址:
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](/uploads/projects/u390550@fftlfh/94ae124a59a8c3167de8b07d734403c8.png)
在进行注入的时候,发现了有这么一串,脑洞其实够大的,先base32,再base64解码后得到:
![打破常规的万能密码([GXYCTF2019]BabySQli) - 图4](/uploads/projects/u390550@fftlfh/b54dadbd1a3f0bda2a714b763a8d821d.png)
看来以后要多个心眼了啊
这里是有过滤的,经过测试。这里有三列
![打破常规的万能密码([GXYCTF2019]BabySQli) - 图5](/uploads/projects/u390550@fftlfh/1899c62892a59a1e434157861e9544e3.png)
所以应该可以猜测分别为id,username,password
根据他的题意我们大概猜测源码:
![打破常规的万能密码([GXYCTF2019]BabySQli) - 图6](/uploads/projects/u390550@fftlfh/c9ae2dff164f07147ecc98984db8a2a7.png)
我们运用上面的知识点,我们联合查询的时候构建出一个假的表插入进去,
用mysql创一个表叫user,创建三个列 id,username,password,这时如果执行一个查询语句:select * from user where username = 0 union select 1,’admin’,md5(‘abc’); 则会返回以下结果:
![打破常规的万能密码([GXYCTF2019]BabySQli) - 图7](/uploads/projects/u390550@fftlfh/d973380a45f10aea9a11ba798dc197af.png)
这样的话思路就很清晰了,我们先在用户名处输入1' union select 1,'admin','900150983cd24fb0d6963f7d28e17f72'#,得到的是上图的结果。密码处我们再输入一个上图密码md5加密之前的密码 也就是abc 即可绕过检验,成功登陆admin账户
![打破常规的万能密码([GXYCTF2019]BabySQli) - 图8](/uploads/projects/u390550@fftlfh/d2d1b3962f3b5104ddffe8ea5f55b7d8.png)
![打破常规的万能密码([GXYCTF2019]BabySQli) - 图9](/uploads/projects/u390550@fftlfh/8e44a2eee269ac5d413949b93d4f2da0.png)
payload:
username = 1' union select 1,'admin','900150983cd24fb0d6963f7d28e17f72'#password = abc
