首先关于SQL的select语句
SELECT * FROM users WHERE username='$username'
*代表着搜索全部,from username为在username表中搜索,where限定username为输入的值
源代码截图
我们可以看到表有三个关键字,分别是userid,username和password,因此在后面的构造时,也应该构造这三个参数。
首先说原理(纠结了半天在大佬的博客里找到了答案):联合查询在数据库没有数据时会自己构建一个虚拟的数据。下面这个数据库联合查询的例子来自大佬的博文https://blog.csdn.net/SopRomeo/article/details/104682814本来有的数据
联合查询
查询之后可以看到新的数据
所以尝试在username输入 xiaocaiji' union select 1,'splashwhale',md5('hahaha')#
password输入hahaha
splashwhale需要加''是因为构成select,前面的小菜鸡用一个'闭合了,后面的要自己完整
其中,xiaocaiji是一个肯定不存在的用户名,之后用'闭合引号,因为没有找到这个数据,所以会找到union select后面的数据。1是userid,改成2、3、4……也可以,splashwhale是username,hahaha是password,因为网页代码明确规定了password为md5格式,因此要用md5('hahaha'),当然,username和password可以自定义,只要保证password上下一致,最后用#注释掉后面的代码
(规范格式好像应该在最后在#之前应该加上; )要使用md5
完成注入后,我们成功登陆,但是并没有完成解题。成功登陆
之后可以看到题目要求,Login yourself as admin,要用admin登陆,所以
curry' union select 1,'admin',md5('james')#
jamesOK
解题成功