SQL注入学习(一)
SQL注入(SQL Injection)是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库漏洞进行攻击。
SQL注入基础
漏洞原理
针对SQL注入的攻击行为可描述为通过用户可控参数中注入SQL语法,破坏原有SQL结构,达到编写程序时意料之外结果的攻击行为。其成因可以归结外以下两个原因叠加造成的:
1、程序编写者在处理程序和数据库交互时,使用字符串拼接的方式构造SQL语句。
2、未对用户可控参数进行足够的过滤便将参数内容拼接进入到SQL语句中。
注入点可能存在的位置
根据SQL 注入漏洞的原理,在用户“可控参数”中注入SQL 语法,也就是说Web 应用在获取用户数据的地方,只要带入数据库查询,都有存在SQL 注入的可能,这些地方通常包括:
@ GET 数据@ POST 数据@ HTTP 头部(HTTP 请求报文其他字段)@ Cookie 数据 …
漏洞危害
攻击者利用SQL注入漏洞,可以获取数据库中的多种信息(例如:管理员后台密码),从而脱取数据库中内容(脱库)。在特别情况下还可以修改数据库内容或者插入内容到数据库,如果数据库权限分配存在问题,或者数据库本身存在缺陷,那么攻击者可以通过SQL注入漏洞直接获取webshell或者服务器系统权限。
注入分类
SQL 注入漏洞根据不同的标准,有不同的分类。但是从数据类型分类来看,SQL 注入分为数字型和字符型。
数字型注入就是说注入点的数据,拼接到SQL 语句中是以数字型出现的,即数据两边没有被单引号、双引号包括。字符型注入正好相反。
根据注入手法分类,大致可分为以下几个类别:
- UNION query SQL injection(可联合查询注入) 联合查询(查)
- Error-based SQL injection(报错型注入) 报错注入(查)
- Boolean-based blind SQL injection(布尔型注入) 布尔盲注(查)
- Time-based blind SQL injection(基于时间延迟注入) 延时注入(查)
- Stacked queries SQL injection(可多语句查询注入) 堆叠查询(增删改)
MySQL相关
注释 mysql 数据库的注释大概有以下几种。
#
-- (杠杠空格)
/* ..... */
/*! .... */ 内联查询
mysql 元数据(库名、表名、字段名)库数据库information_schema
information_schema (存了库名、表名、字段名) 一个数据库
tables (存了所有的表名) 一个表
table_name (存了所有的表名) 一个字段
table_schema (表名所属的数据库) 一个字段
columns (存了所有字段的名字) 一个表
column_name (存了所有的字段名) 一个字段
table_name (字段所属的表名) 一个字段
table_schema (字段所属的数据库名) 一个字段
MYSQL 常用函数与参数
=|>|>=|<=|<> 比较运算符【select 1<>2】
and|or 逻辑运算符【select true and false】
version() mysql 数据库版本【select version()】
database() 当前数据库名【select database()】
user() 用户名
current_user() 当前用户名
system_user() 系统用户名
@@datadir 数据库路径
@@versoin_compile_os 操作系统版本
length() 返回字符串的长度【select length('123456')】
substring() 截取字符串
substr()
mid() 这三个函数都有以下3个参数【select substr(database(),1,1)】
1、截取的字符串2、截取起始位置,从1开始计数3、截取长度,为1
left() 从左侧开始取指定字符个数的字符串【select left('123456'),3】从左取3个
concat() 没有分隔符的连接字符串【select concat('a','b','c')】
concat_ws() 含有分割符的连接字符串【select concat_ws('-','a','b','c')】第一个参数是分隔符
group_conat() 连接一个组的字符串
ord() 返回ASCII 码【select ord(a)】
ascii() 返回ASCII 码【select ascii(a)】
hex() 将字符串转换为十六进制
unhex() hex 的反向操作
md5() 返回MD5 值
floor(x) 返回不大于x 的最大整数
round() 返回参数x 接近的整数
rand() 返回0-1 之间的随机浮点数
load_file() 读取文件,并返回文件内容作为一个字符串
sleep() 睡眠时间为指定的秒数
if(true,t,f) if 判断【select if (true,1,2)】
find_in_set() 返回字符串在字符串列表中的位置
benchmark() 指定语句执行的次数
name_const() 返回表作为结果
SQL注入学习(一)的更多相关文章
- SQL注入学习资料总结
转载自:https://bbs.ichunqiu.com/thread-12105-1-1.html 什么是SQL注入 SQL注入基本介绍 结构化查询语言(Structured Query Lang ...
- sql注入学习笔记,什么是sql注入,如何预防sql注入,如何寻找sql注入漏洞,如何注入sql攻击 (原)
(整篇文章废话很多,但其实是为了新手能更好的了解这个sql注入是什么,需要学习的是文章最后关于如何预防sql注入) (整篇文章废话很多,但其实是为了新手能更好的了解这个sql注入是什么,需要学习的是文 ...
- SQL学习之SQL注入学习总结
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 测试数据库 我们本文就以如下数据库作为测试数据库,完成我们的注入分析 ...
- sql注入学习笔记 详解篇
sql注入的原理以及怎么预防sql注入(请参考上一篇文章) https://www.cnblogs.com/KHZ521/p/12128364.html (本章主要针对MySQL数据库进行注入) sq ...
- SQL注入学习-Dnslog盲注
1.基础知识 1.DNS DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 ...
- 从零开始的sql注入学习(挖坑不填)
首先,本人是小白,这篇文章也只是总结了一下大佬们的sql注入方法,要是有错,请各位大佬指出,以便学习. 虽然我是菜鸡,但是太过基础的sql注入问题也就不再重复的解释了.直接从常用的说起. 实战中常用的 ...
- 简单sql注入学习
sql注入是什么? 所谓SQL注入,就是通过把SQL命令插入到Web表单提 交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQ ...
- SQL注入学习(一)
注入攻击的本质:web应用程序没有过滤用户输入或过滤不严谨,直接把用户输入的恶意数据当做代码执行 两个条件: 1.用户能够控制输入 2.原本程序要执行的代码,拼接了用户输入的数据 注入类型 SQL注入 ...
- Java SQL注入学习笔记
1 简介 文章主要内容包括: Java 持久层技术/框架简单介绍 不同场景/框架下易导致 SQL 注入的写法 如何避免和修复 SQL 注入 2 JDBC 介绍 JDBC: 全称 Java Databa ...
- sql注入学习心得与sqlmap使用心得
做题是最好的老师 首先先来分享一下我用来练手的题目,实验吧中的简单的sql注入1,2,3 不得不说,sql注入真是一个神奇的东西,至少我以前看起来一点头绪都没有的题目能入手了 首先是简单的sql注入3 ...
随机推荐
- asp.net core IdentityServer4 概述
概览 现代应用程序看上去大都是这样的: 最常见的交互是: 浏览器与Web应用程序通信 Web应用程序与Web API通信(有时是独立的,有时是代表用户的) 基于浏览器的应用程序与Web API通信 本 ...
- phaser学习总结之phaser入门教程
前言 最近公司做项目的时候正好使用到phaser,在这里做一下自己整理出来的一些心得,方便大家参考,phaser这一个游戏引擎通常是做2d游戏的,入门也非常简单,只需你会一点的javascript,但 ...
- Java利用反射排序
前言 Java为我们提供了几种排序得方法,比如Arrays和Collections类,但是前提是数组或者集合中的元素都必须实现Comparable接口,基本的数据类型都已经实现了Comparable接 ...
- java基础之循环遍历List和Map
List和Map是在编程中使用的最频繁的集合类型了,每天都不知道要见它们多少面.在这里介绍下这两种类型的循环遍历,以供学习参考和使用. 一.List 遍历List一般有三种方法,如下: List< ...
- Logrotate配置
目录 Logrotate配置 参考 Logrotate Description Logrotate Configuration Logrotate配置
- 教老婆学Linux运维(二)Linux常用命令指南【下】
目录 tips:紧接上一篇,Linux常用命令指南[上] 2.4 文件解压缩 2.4.1 官宣的linux压缩工具:tar tar的基本命令格式为 tar [参数选项] [文件或目录] 我们前面学的命 ...
- 向net core 3.0进击——April.WebApi从2.2爬到3.0
目录 前言 升级之路 测试 小结 前言 在之前对Swagger的变化做了调整后,就开始想着要不把之前的工程升级得了,这样就还是个demo工程,来做各种测试(当然还是因为懒),这就有了今天这个比较折腾的 ...
- mysql基础操作 增删改查
如何使用终端操作数据库 如何登录数据库 mysql -u用户名 -p密码 比如: mysql -uroot -p123456 如何查询数据库服务器中所有的数据库 show databases; 如何选 ...
- ELK 学习笔记之 Logstash之filter配置
Logstash之filter: json filter: input{ stdin{ } } filter{ json{ source => "message" } } o ...
- 使用 Jenkins 与 Sonar 集成对代码进行持续检测
SonarQube 与 Jenkins 简介 SonarQube是 一个开源的代码质量分析平台,便于管理代码的质量,可检查出项目代码的漏洞和潜在的逻辑问题.同时,它提供了丰富的插件,支持多种语言的检测 ...