2021-05-19

  1. SQL注入简介

  2. MySql注入知识点、

  3. SQL注入实战

  4. 理解SQL注入形成原理

  5. 掌握相关的MySql知识

  6. 熟练掌握常见的注入手法

SQL 注入简介
SQL注入是指Web应用程序对用户输入数据的合法性未进行判断、处理,前端传入的参数是攻击者可控的,并且参数被正常的带入到数据库查询,攻击者可以通过构造不同的SQL语句来进行对数据库的操作,正常情况下,攻击者可以对数据库进行高危操作,例如,数据查询、WebShell写入、命令执行等操作。
SQL注入漏洞的产生必须满足两个条件:
参数是用户可控的,也就是前端传入后端的参数的内容是用户可以控制的。
参数被带入数据库进行查询,也就是传入的参数被拼接到SQL语句中,并且被带入到数据库进行查询。
注入判断:
当传入的参数为1’时,数据库会执行以下代码,并会报错,因为这是不符合数据库语法规范的:select * from users where id=1’
当传入的参数为and 1=1时,不会报错,因为1=1为真,所以返回的页面是正常的;当传入的参数为and1=2时,因为条件为假,所以会返回一个不同的结果:
select * from users where id=1 and 1=1 #条件为真,页面正常无变化
select * from users where id=1 and 1=2 #条件为假,页面异常或变化
SQL注入漏洞的危害:
数据库信息泄露:泄露数据库中存放的数据、用户隐私等
获取WebShell:当权限为root且知道绝对路径时,可以直接写一句话木马到服务器。
union select 1, " <?php @eval($_POST[(cmd']);?>” ,3 into outfile“X:\xx\x.php”,也可以查询null值。
网页篡改:注入出后台管理员用户,登陆后台后发布恶意数据、篡改后台数据等。
网站挂马:当拿到WebShell或者获取到服务器的权限后,可将一些网页木马挂在服务器上,去攻击别人。
获取系统权限:当权限足够高时,可以获取系统主机的权限。
万能密码:利用特定的Payload登录后台或者其他页面。
文件读取:读取敏感文件。
union select 1,2,hex(loadfile(D:\lphpStudy\PHPTutorial\www\x.php))–+
SQL注入类型:
按数据库类型:
Access、MsSQL、MySQL、Oracle、DB2等
按提交方式:
GET、POST、cookie、HTTP头、XFF
按注入点类型:
数字型、字符型、搜索型
按执行效果:
布尔盲注、时间盲注、报错注入、联合注入、堆叠查询注入
类型解释:
数字型;
在Web端大概是 http://xxx.com/news.php?id=1这种形式,其注入点id类型为数字。所以叫数字型注入点。这一类的SQL语句原型大概为select * from表名where id=1。
字符型:
在Web端大概是http://x.com/news.php?name=admin 这种形式,其注入点name类型为字符类型所以叫字符型注入点。这一类的SQL语句原型大概为select * from表名 where name=‘admin’。注意多了引号。
搜索型:
一些网站为了方便用户查找网站的资源,都对用户提供了搜索的功能因为是搜索功能往往是程序员在编写代码时都忽略了其变量(参数)的过滤而且这样的漏洞在国内的系统中普遍的存在:
其中又分为POST/GET,GET型的一般是用在网站上的搜索,而POST则用在用户名的登录可以从form表单的method=“get’同来区分是get还是post。搜索型注入又称为文本框注入。
p w d = pwd= pwd=_GET[t]
s q l = " s e l e c t ∗ f r o m u s e r w h e r e p a s s w o r d l i k e ′ sql="select * from user where password like '% sql="selectfromuserwherepasswordlikepwd%’ order by password”;
这句SQL的语句就是基于用户输入的pwd在users表中找到相应的password,正常用户当然会输入例admin,ckse等等。住如果有人输入这样的内容呢?
‘and 1=1 and ‘%’=’
这样的话这句SQL语句就变成了这样:
select * from user where password like "%fendo’and 1=1 and ‘% ‘=’%’ order by password
布尔盲连(Boolean-based blind sQL injection)
既可以根据返回值判断条件真假的注入
时间盲注(hime-based blind SQL injection)
即不根据页面返回内容到听任何信息,用条件语句查着时间延迟语句是否执行(即页面返回时间是否增加)来判断
报错注入(Error-based sQL injection)
即页面会返回错误信息,或者把注入的语句的结果直接返回在面面中。
联合注入. (UNION query SQL injection)
可以使用union的情况下的注入
堆查询注入(Stacked queries sQL injection)
可以同时执行多条语句的执行时的注入。

MYSQL 知识点

在渗透中,目前主流站点的站点架构一般为APACHE+PHP+MYSQL,所以我们主要来学习下MySQL数据库中与SQL注入相关的知识点。
这里主要学习MySQL>=5.0版本之后的一个内置库-information——schema库。
information_schema内置库介绍;
information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式。元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。
在MySQL中,把 information_schema看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。
在这个库中,和渗透相关的表有三个:
schemata表:存储该用户创建的所有的数据库库名,这里我们只需要记住SCHEMA_NAME这个字段。
tables表:存储该用户创建的所有的数据库库名和表名,这里我们只需要记住TABLE_SCHEMA和TABLE_NAME这两个字段。
columns表:存储该用户创建的所有的数据库库名、表名和字段名,这里我们只需要记住TABLE_SCHEMATABLE_NAME和COLUMN_NAME.
information_schema内置库中与手工注入相关的表。
schemata表,SCHEMA_NAME字段中存放着MySQL中所有的库名。
ltables表,TABLE_SCHEMA和TABLE_NAME分别存放着MySQL中的所有库名和表名。
columns表:TABLE_SCHEMA.TABLE_NAME和ICOLUMN_NAME分别存放着MySQL中的所有库名,表名和字段名、
MySQL注入相关语句:
查询当前数据库版本: select version0);
查询当前数据库:select database();
查询当前路径:select @@basedir;
查询当前数据库用户: select user0);
查询当前MySQL路径: select @@datadir;
查询服务器的系统版本:select@@Version_compile_os
查询数据库:select schema_name from information_schema.schemata;
查询表名: select table_name from information_schema.tables where table_schema=‘库名’ limit 0,1;查询列名: select column_name from information_schema.columns where table_schema=‘库名’ andtable_name='表名’limit 0,1

关于secure_file_priv:
查询方法: show variables like ‘%secure_file_priv%’:
查询结果为: secure_file_priv NULL时,表示不允许导入导出
查询结果为: secure_file_priv /xxx/时,表示只允许在当前目录导入导出
查询结果为:secure_file_priv(空白)时,表示可以在任意目录进行导入导出
My5QL5.6.34版本以后secure_file_priv的值默认为NULL。且无法用sql语句对其进行修改,只能够通过以下方式修改mysql.ini或 my.cn:
Windows: mysql.ini中添加secure_file_priv=
Linux: /etc/my.cnf的[mysqld]下面添加local-infile=0
注释符:
在MySQL中,常见的注释符有以下几种:

–空格
//
内联注释符及特性:/*! code */
内联注释符是一种基于注块注释衍生出来的注释风格,它可以用于整个SQL语句中,用来执行SQL语句,内联注释有个特殊点,和MySQL版本息息相关。也就是:当内敛注释中出现小于或等于当前版本号的时候,内联注释符里的子句会被执行,大于时则不会被执行,注意版本的写法,例如,5.5.34,在内敛注释中需要写为50534,版本号第二位加0。
常见的空格符号:
两个空格代替一个空格,用Tab代替空格,%a0-空格
%20 %09 %0a %0b %0c %0d %a0 %00 /
/ /I/

’ and length((select column_name from information_schema.columns where table_schema=“security” and table_name=“eamail”)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值