首页 存档 技术 查看内容

MySQL注入与防御

2018-3-30 13:00 |来自: 互联网 311 0

摘要: 1、简介 1.1、含义 在一个应用中,数据的安全无疑是最重要的。数据的最终归宿都是数据库,因此如何保证数据库不被恶意攻击者入侵是一项重要且严肃的问题! SQL注入作为一种很流行的攻击手段,一直以来都受到网络安全 ...

1、简介


1.1、含义

在一个应用中,数据的安全无疑是最重要的。数据的最终归宿都是数据库,因此如何保证数据库不被恶意攻击者入侵是一项重要且严肃的问题!

SQL注入作为一种很流行的攻击手段,一直以来都受到网络安全研究者和黑客们的广泛关注。那什么是SQL注入呢?SQL注入是这样一种攻击技术:攻击者通过把恶意SQL命令插入到Web表单的输入域或页面请求的查询字符串中,来达到欺骗服务器执行恶意的SQL命令的一种攻击方式。

想要更好的防御SQL注入,当然要了解攻击者是如何攻击的啦,自己知彼,百胜不殆!

1.2、注入原理

SQL注入的本质是恶意攻击者将SQL代码插入或添加到程序的参数中,而程序并没有对传入的参数进行正确处理,导致参数中的数据会被当做代码来执行,并最终将执行结果返回给攻击者

1.3、危害

利用SQL注入漏洞,攻击者可以操纵数据库的数据(如得到数据库中的机密数据、随意更改数据库中的数据、删除数据库等等),在得到一定权限后还可以挂马,甚至得到整台服务器的管理员权限。由于SQL注入是通过网站正常端口(通常为80端口)来提交恶意SQL语句,表面上看起来和正常访问网站没有区别,如果不仔细查看WEB日志很难发现此类攻击,隐蔽性非常高。一旦程序出现SQL注入漏洞,危害相当大,所以我们对此应该给予足够的重视。


2、注入知识与例子解析


2.1、注入的常用知识

常用函数:

system_user()        #系统用户名
user()         #返回MYSQL用户名
current_user()      #当前用户名
session_user()      #连接数据库的用户名
database()       #返回当前数据库名
version()       #返回当前数据库版本信息
load_file()      #返回文件的内容【攻击时用于读取本例文件,攻击力大大的】
intooutfile'物理路径'  #将结果输出【攻击在利用将恶意脚本注入系统中】

#有用的系统库:

INFORMATION_SCHEMA  

mysql大于5.0的版本默认安装后都有INFORMATION_SCHEMA数据 库,INFORMATION_SCHEMA提供了访问数据库元数据的方式,是MYSQL的信息数据库,其中保存着关于MySQL服务器所维护的所有其他数 据库的信息,通过这个数据库可以查看服务器上创建了那些数据库,数据库有哪些表,表中有哪些字段,对注入很有用途。【利用它可以进行爆表、爆字段、爆内容】



注入形式:


1、union select 1,SCHEMATA_NAME,3 from information_schema.SCHEMATA limit 2,1
2、union select 1,TABLE_NAME,3 from information_schema.TABLES where TABLES_TABLE_SCHEMA='database_name' limit 2,1
3、union select 1,COLUMN_NAME,3 from information_schema.COLUMNS where TABLE_NAME='table_name' limit 2,1

注:这仅仅只是写法形式,在没有任何防御措施的情况下可注入。当有转义单引号的过滤,那么上面的语句肯定不成功的,必须做出相应的修改方可成功。

注入小技巧:  

1、当我们注入的时候,如果空格被过滤机制处理掉了,那么我们可以使用注释来生成空格。例如:select/**/1,2,3 
2、使用union进行查询时,需要对应数据类型【谨记谨记】;例如union前面的第一列是int,后面就不要对应string了

2.2、注入流程

1.判断Web系统使用的脚本语言,发现注入点,并确定是否存在SQL注入漏洞

2.判断Web系统的数据库类型

3.判断数据库中表及相应字段的结构

4.构造注入语句,得到表中数据内容

5.查找网站管理员后台,用得到的管理员账号和密码登录

6.结合其他漏洞,想办法上传一个Webshell

7.进一步提权,得到服务器的系统权限

(注:以上为一般流程,根据实际情况,情况可能会有所不同。)

2.3、实例解析

a、构造注入环境

建立两张表

CREATEDATABASEtest88;
USEtest88;
CREATETABLE`admin`(
`id`int(11)NOTNULLAUTO_INCREMENT,
`name`varchar(32)DEFAULTNULL,
`password`varchar(32)DEFAULTNULL,
PRIMARYKEY(`id`)
);
CREATETABLE`goods`(
`id`int(11)NOTNULLAUTO_INCREMENT,
`name`varchar(32)DEFAULTNULL,
`brand`varchar(32)DEFAULTNULL,
PRIMARYKEY(`id`)
);

test2.php文件

header('content-type:text/html;charset=utf8');
$link=mysql_connect('127.0.0.1','root','321');
mysql_set_charset('utf8');
mysql_select_db('test88');
$id=$_GET['id'];
$sql="select*fromadminwhereid=".$id;
echo"
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部