关于Pikachu靶场SQL注入的解答——union 注入的使用及其见解
#创作灵感#
我记得之前在b站上学编程时,有位老师说过这么一句话:‘“要想快速的学有所成,就去写博客”,昨天上课时,老师把之前教的union拿出来做了巩固,鉴于我之前也有做过一些sql注入,特写此文章以留作念想。
由此:本文将通过 Pikachu 靶场的字符型注入关卡,演示一次完整的 Union 联合查询注入流程,最终目标是获取数据库中的用户名和密码。
一,题目来源:来自于Pikachu靶场SQL注入的第二题,详情可自行本地搭建评鉴。
![]()
题目如下:what's your username?/完成字符型注入get关卡练习,最后 获得用户名和密码数量
二,解题思路+步骤
思路:关于判断sql注入的类型,我是生疏的,但好在基础题目有提示,根据题目标题“username”,我推断该注入为字符型注入。
1.验证注入类型,这里通过本网站sql注入第一题所提供的已知账户"kobe",来做字符型注入的对照具体图片如下图:
正常显示:
错误显示:
通过英文单引号得来的错误提示,表明包含字符型漏洞。c
增加“#”号注释后,又可正常查询
2.老师在是直接使用的union关键字实现的查询,不过我并不知道,为什么就一定要用union。这个问题,我留做下期sql专题解答吧,因为union联合查询需要保证查询出来的列相同,所以这里先使用,order by将列的信息,给找出来。
kobe' order by 2#在使用二分法n次后得到存放该表的列数为二(如上图)
3.接下来就是通过information_schema这个mysql自带的系统库,查出系统的中的密码和用户名。当然在真正查到用户名和密码前,我们还需要先通过“tables”表和“columns”表,查出用户名和密码的“字段名”,最后在查出数据;
神秘指示图,全世界独一无二。
4,通过union 联合select + database();查出库名“pikachu”
kobe' union select 1,database()#5.通过union 联合select + information_schema + “pikachu”;查出表名“users”
kobe' union select 1,table_name from information_schema.tables where table_schema='pikachu'#6.通过union 联合select + information_schema + “pikachu”+“user”;查出列名“username”与“password”
kobe' union select 1,column_name from information_schema.columns where table_schema='pikachu' and table_name='users';#7.最后:select “password”+“username”+“pikachu”----->“用户名+密码 ”
“pikachu”+“670b14728ad9902aecba32e22fa4f6bd”
kobe' union select username,password from pikachu.users#8.当然最后密码我也会提供明文显示,访问下列网站即可自行解密
https://cmd5.com/