Web安全和渗透测试--day6--sql注入--part 1
场景:
win11家庭版,edge浏览器 , sqlin靶场
定义:
SQL 注入(SQL Injection)是一种常见的网络安全攻击方式,攻击者通过在 Web 应用程序中输入恶意的 SQL 代码,绕过应用程序的安全机制,对数据库进行未授权的访问和操作
注入产生:
所有客户端可以与服务端交互并且输入参数可控的交互口。
举例:
sqlin-map靶场
这里的URL的参数--ID 我们可以控制其的值
本地部署的cms

用户登录\注册的输入框
分类:
按照传入参数的类型
数字型
字符型
判断数字型和字符型的方式---1
sqlin靶场举例:
原来的网页:

这里是sqlin靶场的第二关
当id=3时,出现
Your Login name:Dummy
Your Password:p@ssword
我们这里,在id=3的数字“3”进行四则运算
推荐使用减号:

发现我们的信息改为了:
Your Login name:Angelina
Your Password:I-kill-you
而我们的第三关就不会变

这里我们可以知道我们的参数就是数字型了
-----Q:为什么我们不使用“+”(加号来测试呢?)
A:因为“+”可能被判断为拼接字符串,页面也会改变
判断数字型和字符型的方式---2
对参数进行逻辑判断
回到数字型的第二关:
我们输入:
?id =3 and 1=1

发现到:

和我们的 ?id=3结果一致
同时发现我们的参数变成了
?id=3%20and%201=1
这里是浏览器进行了URL编码处理
我们使用解码工具(edge插件 h4ck3r)解码

发现我们的%20实际就是空格
tips:
URL中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符。如果URL中包含了其他字符,例如空格、引号、中文等,那么可能会造成服务器或者浏览器的解析错误,或者导致URL的语义变化。
空格在
ASCII码中对应的字节是0x20,那么URL编码之后得到的就是%20
回到正题,这里我们设置成错的比较
?id= 3 and 1=2
发现

我们的数字型的输入直接报错
我们到字符型的第三关
就没有报错
这就是字符型和数字型的简单区别
字符型闭合
我们知道,后端代码处理字符串的参数,大多都有单引号,双引号,有些还会有个括号来包括我们的字符型输入参数,所以我们的字符型注入需要寻找闭合方式
我们这里的sqlin靶场是php的后端,同样存在
我们这里对我们第二关和第三关的网页进行代码审计:
第二关(数字)

我们发现我们的传入的参数是直接被赋值给id的并进行sql查询的
第三关(字符)

我们第三关这里,就存在一个单引号加单对括号的闭合
所以我们进行字符型注入的时候就必须测试它的闭合类型
判断闭合方式
这里我们存在两种可能:有回显/无回显,也就是所谓的盲注(blind)
我们先以有回显的方式来探讨:
-我们通过代码审计的方式,知道了less-3的闭合,
但是我们通常测试网站的时候都是黑盒测试,我们就得一步一步
我们通过输入闭合字符的是否报错方式来判断
1.当我们输入“单引号”的时候会发生报错

%27代表单引号,
2.我们输入正确的“单引号右括号”

成功回显,我们就发现我们的闭合方式找对了
简单的sql注入
第3关的信息我们收集的差不多
1.字符型 2.闭合方式为')
这里我们就可以开始进行测试了
判断列数和回显位
我们必须知道,网页中哪些字段是可以显示出来的,否则我们不知道数据库内的信息
我们闭合好输入字段后加入我们的payload 测试显示列数
http://localhost:8080/Less-3/?id=3') order by 19 --+
这里我们--+是一个注释,为了注释掉后方存在的sql语句,避免它报其他的错

我们发现它报错,说明我们猜测的数字19不对
我们可以使用二分法编写脚本来测试,
这里我们就慢慢来,发现最后的显示列数为3
http://localhost:8080/Less-3/?id=3') order by 3 --+

现在我们就开测试回显的地方
http://localhost:8080/Less-3/?id=-3') union select 1,2,3 --+
我们这里为了显示我们打上的1,2,3我们得把id的值设置不存在(我这里写的是-3),避免遮挡我们的123,我们可以从回显中找到,我们显示了2,3两个位置,这个时候,我们就可以在这两个地方
2,3替换为我们真正的攻击代码

id=-3%27)%20union%20select%201,table_name,3%20from%20information_schema.tables%20where%20table_schema=database()--+
?id=-3') union select 1,table_name,3 from information_schema.tables where table_schema=database()--+
这里我们是直接获得的表名,
1,所有的数据库名,数据表,数据字段,存在一张mysql自带的初始数据库中:information_shcema
而xxx.tables是我们的数据库里面的表,存的是所有的表
2.table_schema,table_name是我们的表中的其中一个字段
3.我们database()会返回当前数据的名称
所有回显出来的emails就是我们的该数据库中的其中一个表
你如果不想这样,我们可以这样
http://localhost:8080/Less-3/?id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
我们可以用同样的方法拿到数据库名,
使用group_concat()函数拼接所有表

很明显,我们的users表就是我们需要的数据表
后续一样来
?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

关键字段就是Password了
union select 1,2,group_concat(username ,id , password) from users--+
相关文章:
Web安全和渗透测试--day6--sql注入--part 1
场景: win11家庭版,edge浏览器 , sqlin靶场 定义: SQL 注入(SQL Injection)是一种常见的网络安全攻击方式,攻击者通过在 Web 应用程序中输入恶意的 SQL 代码,绕过应用程序的安全机…...
大模型在胆管结石(无胆管炎或胆囊炎)预测及治疗方案制定中的应用研究
目录 一、引言 1.1 研究背景与意义 1.2 研究目的 1.3 国内外研究现状 二、胆管结石相关理论基础 2.1 胆管结石概述 2.2 临床表现与诊断方法 2.3 传统治疗方法 三、大模型技术原理与应用优势 3.1 大模型基本原理 3.2 在医疗领域的应用潜力 3.3 用于胆管结石预测的可…...
MIT6.S081-lab4
MIT6.S081-lab4 注:本篇lab的前置知识在《MIT6.S081-lab3前置》 1. RISC-V assembly 第一个问题 Which registers contain arguments to functions? For example, which register holds 13 in main’s call to printf? 我们先来看看main干了什么: …...
精通 Spring Cache + Redis:避坑指南与最佳实践
Spring Cache 以其优雅的注解方式,极大地简化了 Java 应用中缓存逻辑的实现。结合高性能的内存数据库 Redis,我们可以轻松构建出响应迅速、扩展性强的应用程序。然而,在享受便捷的同时,一些常见的“坑”和被忽视的最佳实践可能会悄…...
[SpringBoot]快速入门搭建springboot
默认有spring基础,不会一行代码一行代码那么细致地讲。 SpringBoot的作用 Spring Boot是为了简化Spring应用的创建、运行、调试、部署等而出现的。就像我们整个SSM框架时,就常常会碰到版本导致包名对不上、Bean非法参数类型的一系列问题(原出…...
理解.NET Core中的配置Configuration
什么是配置 .NET中的配置,本质上就是key-value键值对,并且key和value都是字符串类型。 在.NET中提供了多种配置提供程序来对不同的配置进行读取、写入、重载等操作,这里我们以为.NET 的源码项目为例,来看下.NET中的配置主要是有…...
C++面试八股文:智能指针
一、了解哪些智能指针? 回答:智能指针是用于管理动态分配的内存,行为类似于指针,但又具有自动管理内存的能力,所以称为智能指针。 首先说一下 auto_ptr和unique_ptr,它们都是独占式指针,同一时…...
nohup命令使用说明
文章目录 如何在后台运行程序呢?如何正常运行代码重定向呢?nohup: ignoring input 如何在后台运行程序呢? 使用nohup命令即可, nohup python dataset/ReferESpatialDataset.py >>dataset_20250417.log 2>&1 &n…...
MYSQL “Too Many Connections“ 错误解决
1.查询当前连接数 show status like "Threads_connected"; 2.查询数据库最大连接数 show variables like "max_connections" 3.查询所有活动连接 show processlist; 4.根据查询结果观察是否有长时间未被释放的连接 参数解释 : 字段说明id连接的唯一…...
Linux `init 6` 相关命令的完整使用指南
Linux init 6 相关命令的完整使用指南—目录 一、init 系统简介二、init 6 的含义与作用三、不同 Init 系统下的 init 6 行为1. SysVinit(如 CentOS 6、Debian 7)2. systemd(如 CentOS 7、Ubuntu 16.04)3. Upstart(如 …...
【外研在线-注册/登录安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...
【NLP 63、大模型应用 —— Agent】
人与人最大的差距就是勇气和执行力,也是唯一的差距 —— 25.4.16 一、Agent 相关工作 二、Agent 特点 核心特征: 1.专有场景(针对某个垂直领域) 2.保留记忆(以一个特定顺序做一些特定任务,记忆当前任务的前…...
React 打包
路由懒加载 原本的加载方式 #使用lazy()函数声明的路由页面 使用Suspense组件进行加载 使用CDN优化...
2025.4.14-2025.4.20学习周报
目录 摘要Abstract1. 文献阅读1.1 模型架构1.2 实验分析1.3 代码实践 总结 摘要 在本周阅读的论文中,作者提出了一种名为MGSFformer的空气质量预测模型。模型通过残差去冗余模块可以有效解耦多粒度数据间的信息重叠;时空注意力模块采用并行建模策略&…...
Spring 微服务解决了单体架构的哪些痛点?
1. 部署困难 (Deployment Difficulty & Risk) 单体痛点: 整体部署: 对单体应用的任何微小修改(哪怕只是一行代码),都需要重新构建、测试和部署整个庞大的应用程序。部署频率低: 由于部署过程复杂且风险高,发布周期通常很长&a…...
【1】云原生,kubernetes 与 Docker 的关系
Kubernetes?K8s? Kubernetes经常被写作K8s。其中的数字8替代了K和s中的8个字母——这一点倒是方便了发推,也方便了像我这样懒惰的人。 什么是云原生? 云原生: 它是一种构建和运行应用程序的方法,它包含&am…...
Kubernetes控制平面组件:APIServer 限流机制详解
云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)Kubernetes控…...
springboot全局异常捕获处理
一、需求 实际项目中,经常抛出各种异常,不能直接抛出异常给前端,这样用户体验相当不好,用户看不懂你的Exception,对于一些sql异常,直接抛到页面上也不安全。所以有没有好的办法解决这些问题呢,当然有了&am…...
Flask(1): 在windows系统上部署项目1
1 前言 学习python也有段时间了,最近一个小项目要部署,正好把过程写下来。 在程序的结构上我选择了w/s模式,相比于c/s模式,无需考虑客户端的升级;框架我选择了flask,就是冲着轻量级去的,就是插件…...
【文献阅读】EndoNet A Deep Architecture for Recognition Tasks on Laparoscopic Videos
关于数据集的整理 Cholec80 胆囊切除手术视频数据集介绍 https://zhuanlan.zhihu.com/p/700024359 数据集信息 Cholec80 数据集 是一个针对内窥镜引导 下的胆囊切除手术视频流程识别数据集。数据集提供了每段视频中总共7种手术动作及总共7种手术工具的标注,标…...
基于springboot的个人财务管理系统的设计与实现
博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了六年的毕业设计程序开发,开发过上千套毕业设计程序,没有什么华丽的语言࿰…...
Linux系统编程---孤儿进程与僵尸进程
1、前言 在上一篇博客文章已经对Linux系统编程内容进行了较为详细的梳理,本文将在上一篇的基础上,继续梳理Linux系统编程中关于孤儿进程和僵尸进程的知识脉络。如有疑问的博客朋友可以通过下面的博文链接进行参考学习。 Linux系统编程---多进程-CSDN博客…...
简单使用MCP
简单使用MCP 1 简介 模型上下文协议(Model Context Protocol,MCP)是由Anthropic(产品是Claude)推出的开放协议,它规范了应用程序如何向LLM提供上下文。MCP可帮助你在LLM之上构建代理和复杂的工作流。 从…...
Semaphore的核心机制
在 Java 中,Semaphore 通过 许可计数器 和 同步队列 的机制实现并发线程数的限制。以下是其核心实现原理和步骤的详细分析: 一、核心机制 许可计数器(Permits) • 初始化时指定的许可数(如 new Semaphore(3)࿰…...
计算机视觉与深度学习 | RNN原理,公式,代码,应用
RNN(循环神经网络)详解 一、原理 RNN(Recurrent Neural Network)是一种处理序列数据的神经网络,其核心思想是通过循环连接(隐藏状态)捕捉序列中的时序信息。每个时间步的隐藏状态 ( h_t ) 不仅依赖当前输入 ( x_t ),还依赖前一时间步的隐藏状态 ( h_{t-1} ),从而实现…...
Keil MDK 编译问题:last line of file ends without a newline
问题与处理策略 问题描述 ..\..\User\main.c(38): warning: #1-D: last line of file ends without a newline} ..\..\User\main.c: 1 warning, 0 errors问题原因 这是文件末尾缺少换行符警告 处理策略 在文件(main.c)的最后一行按回车键添加一个空…...
MySQL:9.表的内连和外连
9.表的内连和外连 表的连接分为内连和外连 9.1 内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,之前查询都是内连 接,也是在开发过程中使用的最多的连接查询。 语法: select 字段 from 表1 inner join 表2 on 连接…...
C++栈操作集合
数组 #include <bits/stdc.h> using namespace std;class sss{ private:int a[1000];int curr -1; public:void push(int);void pop();int top();bool empyt();int size(); };int main() {sss n;while(true){int a;cout<<"1.添加\n2.删除-\n3.显示栈顶\n4.储…...
在阿里云和树莓派上编写一个守护进程程序
目录 一、阿里云邮件守护进程 1. 安装必要库 2. 创建邮件发送脚本 mail_daemon.py 3. 设置后台运行 二、树莓派串口守护进程 1. 启用树莓派串口 2. 安装依赖库 3. 创建串口输出脚本 serial_daemon.py 4. 设置开机自启 5. 使用串口助手接收 一、阿里云邮件守护进程 1.…...
每日一题——最小测试用例集覆盖问题
最小测试用例集覆盖问题(C语言实现) 问题描述 假设我们有一系列测试用例,每个测试用例会覆盖若干个代码模块。 我们使用一个二维数组来表示这些测试用例的覆盖情况: 如果某个测试用例 i 能覆盖代码模块 j,则数组中…...
