sql注入——注入原理,sql注入常用函数,注入基本注入流程

 

目录

一,注入原理

二,sql注入的分类

三,万能密码

四,常用函数

五,sql注入基本流程


一,注入原理

Web应用向后台数据库传递SQL语句进行数据库操作时。如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。

1,sql注入漏洞的本质

将用户输入的数据当做代码来执行

2,sql注入的两个关键条件

2.1,用户能够控制输入的内容

2.2,wed应用吧用户输入的内容带到数据库中执行

3,sql注入的危害

脱库/getshell

二,sql注入的分类

1,根据请求方式不同可以分为

        GET方式请求注入 

         POST方式请求注入

2,根据注入点的参数分

        整数型注入

        字符型注入

        搜索型注入

3,根据sql注入点的反馈类型可以分为以下常见几类

           基于错误显示的sql注入

            union类型的sql注入

            布尔类型的sql注入

            基于时间的sql注入

三,万能密码

1,万能密码原理解析:'or 1=1 -- - 

后台语句:
select * from admin where username='user' and password='pass'

解释:
    查询admin表里的所有username=user并且password=pass的结果,只要结果不为空就为真——就是登陆成功

密码语句:
   'or 1=1-- -   解释:-- -和# 为数据库注释符

演变数据库语句成:
    select * from admin where username='1' or 1=1-- -and password='pass'
解释:将后面的密码部分给注释掉

四,常用函数

 1,作用——返回当前登录mysql数据库的用户

函数:
user(); system_user(); current_user(); session_user(); 函数
		mysql用法:select user();

2,作用——查看当前数据库的版本

version();   函数
		用法:select version();

3,作用:查看当前使用的库名

databases;
    用法:select databases;

4,作用——返回数据库的存储目录

@@datadir;  函数
		用法:select @@datadir;

 5,作用——查看服务器操作系统

@@version_compile_os; 函数
    用法:select @@version_compile_os;

6,作用——链接两个字符串并传入数据库(多列转换成一列显示)

concat(str1,"分隔符",str2) 函数
		实例:select concat(neme,"`",sex) from biaodan;

7,作用——用分隔符链接,多个字段的字符串(多列转换成一列)

concat_ws("~",str1,str2);
		用法:select concat_ws(字段名,字段名) from 表名;

8,作用——将多行查询结果以逗号分隔全部输出(多行转换成一行显示)

group_concat(str1,str2)
		用法:select group_concat(str1,str2) from biaodan;
		实列:select group_concat(字段名,字段名) from 表名;

9,作用——从一个字符串中截取指定数量的字符

mid(); 函数 | substr(); 函数 | substring(); 函数
			在mysql数据库中,可以和前面的concat concat_ws 结合使用
		用法:select mid(column_name,start,length)
				colunm_name:字段名
				start:起始位置以数字表示(1)
				length:截取的长度
		实列:select mid(group_concat(neme,sex),1,5)from 表名;  

10,作用——从某个值开始,取出之后的N条数据的语法 (返回结果中的前几条数据或者中间的数据)

limit() 函数
		用法:select * from 表名 limit M,N
		m是:指从m位开始(第一位为0)
		n是:指取n条

11,字符串处理

substr(),substring(),mid():用法基本相同,截取字符串的一部分

	语句:select substr(database(),1,3);
	解释:截取database()返回的结果,从第一个自负开始截取三个

	说明:substr(a,b,c);截取字符串
		a 所要截取字符串
		b 截取的位置
		c 截取的长度

	substr使用范围:oracle、mysql、sqlserver
	substring使用范围:mysql、sqlserver
	mid使用范围:mysql

12,进行16进制编码

hex(); 
select hex('dvwa')  //编码
        select unhex('64767761')  //解码
        select 0x64767761  //16进制解码

13,条件判断语句

关键字:if
if(arg1,arg2,arg3)
	arg1为判断的条件,arg2是条件为真时返回的结果,arg3是条件为假时返回的结果
	语句:select if(1=1, 'true', 'false‘)	 	 返回结果:true

case when arg1 then arg2 else arg3 end
	arg1为判断的条件,arg2是条件为真的返回结果,arg3是条件为假的返回结果
	语句:SELECT 1,case when 1=1 then 'hello' else 'goodbye' end,3 --+

length(arg) :返回目标字符串的长度,注意:arg字符串。
	语句:select length(database());//返回当前数据库名字的长度

14,加密解密方式

ascii(arg)/ord(arg) :返回目标字符对应的ASCII码,注意:arg为单个字符。
	语句:select ascii(‘a’)  //返回结果:97

char(arg):返回ASCII码只对应的字符
	语句:select char(97)  //返回结果为a

hex():将目标字符串装换成16进制格式的数据
	语句: select hex(“dvwa”)   //返回结果: 64767761

unhex():将16进制格式的数据装换成原字符串
	语句:unhex(64767761)  //返回结果:dvwa

五,sql注入基本流程

1,判断是否有注入点

2,获取数据库基本信息

3,获取数据库库名

4,获取数据库表名

5,获取数据库列名

6,获取用户信息

7,破解数据

8,提升权限

9,内网渗透

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值