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