Java教程

sql注入

本文主要是介绍sql注入,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

结构化查询语言:structured query language---sql

关系式数据库管理系统---DBMS,拥有明显的层次结构:库名、表明、字段名、字段内容

*漏洞原理:

针对SQL注入的攻击行为可描述未通过用户可控参数中注入SQL语法,破坏原有SQL结构,达到编写程序时意料之外结果的攻击行为

*形成原因:

1、程序编写者在处理数据和数据库交互时,使用字符串拼接的方式构造SQL语句

2、未对用户可控参数进行足够的过滤便将参数内容拼接进入SQL语句中

*可能存在的位置

@GET数据

@POST数据

@HTTP头部(HTTP请求报文其他字段)

@Cookie数据

*漏洞危害

获取数据库中的多种信息(脱裤)、修改数据库内容到数据库、获取webshell或服务器的系统权限

(服务器提权:mof/udf提权)

*分类

@数据类型分类:

---数字型:注入点的数据,拼接到SQL语句中是以数字型出现的,即数据两边没有被单引号、双引号包括

---字符型:与数字型相反

@注入点手法分类

UNION(联合查询)---查

ERROR(报错注入)---查

布尔盲注---查

(基于事件的)延时注入---查

可多语句查询注入(堆叠查询)---增删改

*注入点的判断

*  MYSQL 常用函数与参数

length()                                

返回字符串的长度

substring()                                

截取字符串

left()                        

从左侧开始取指定字符个数的字符串

concat()                                

没有分隔符的连接字符串

concat_ws()                        

含有分割符的连接字符串

group_conat()                        

连接一个组的字符串

 ord()                                        

返回ASCII 码

ascii()

hex()                                        

将字符串转换为十六进制

unhex()                                

hex 的反向操作

md5()                                

返回MD5 值

floor(x)                                

返回不大于x 的最大整数

round()                                

返回参数x 接近的整数

rand()                                

返回0-1 之间的随机浮点数

load_file()        

读取文件,并返回文件内容作为一个字符串

sleep()                                

睡眠时间为指定的秒数

if(true,t,f)                        

if 判断

find_in_set()                        

返回字符串在字符串列表中的位置

benchmark()                                

指定语句执行的次数

name_const()                        

返回表作为结果

substr()

mid()

1. 截取的字符串2. 截取起始位置,从1开始计数

3. 截取长度

 @   逻辑运算

 在SQL 语句中逻辑运算与(and)比或(or)的优先级高。 [select 1=2 and 1=2 or 1=1;]

* 注入流程

由于关系型数据库系统,具有明显的库/表/列/内容结构层次,所以我们通过SQL 注入漏洞获取数据库中信息时候,也依据这样的顺序。首先获取数据库名,其次获取表名,然后获取列名,最后获取数据。

这篇关于sql注入的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!