云亦然
天下皆白,唯我独黑。非攻墨门,兼爱平生。

网络安全之SQL注入

2019-03-18 09:38:33 网络安全
Word count: 1.3k | Reading time: 5min

SQL注入专题概述
一、目录

SQL注入定义及危害
SQL注入常见分类
SQL注入如何形成
SQL注入常见过程
SQL注入在渗透测试过程中的作用

二、SQL注入定义及危害

SQL注入的定义
所谓SQL注入,就是利用现有应用程序的特性,攻击者通过在Web表单、
URL等可输入数据的地方插入(恶意)SQL语句一并原有SQL语句被代库执行。
SQL命令就是前端应用程序和后端数据库之间的接口。

SQL注入的危害
    这些危害包括但不局限于:
    数据库敏感信息泄露;
    网页被篡改、挂马;
    数据库被恶意操作;
    服务器被远程控制,被安装后门

三、SQL注入常见分类

按数据类型 数字形(Integer)
字符型(String)

按返回结果 显错注入(Error-Based)
盲注(Boolean/Time-Based Blind)

四、SQL注入的形成

SQL注入的 形成
1.数据与代码未严格分离;
2.用户提交的参数数据未做充分检查过滤即被代入到SQL命令中,
改变了原有SQL命令的“语义”,且成功被数据库执行。

五、SQL注入常见过程

客户端:参数值等数据被修改

服务端:未经检查和过滤即将被修改的数据注入到SQL命令中,SQL命令功能被修改

数据库引擎:执行被修改后的SQL命令

服务端:将注入的结果返回给客户端

客户端:根据上一次注入获取到的敏感信息构造注入语句进行进一步注入

六、SQL注入在渗透测试过程中的作用

绕过登录验证:使用万能密码登录网站后台等

获取敏感数据:获取网站管理员帐号、密码等

文件系统操作:列目录,读取、写入文件等

注册表操作:读取、写入、删除注册表等

执行系统命令:远程执行命令

SQL注入定义、划分及形成原因
一、目录

SQL注入漏洞频繁出现
SQL注入漏洞如何寻找
SQL注入漏洞判断依据
常见SQL测试语句和技巧

二、SQL注入漏洞频繁出现

URL参数 HTTP包头 搜索框
目录名 文件名          
  ----未经检查和过滤即被代入到SQL语句中执行>>注入漏洞

tips:最普遍的注入漏洞是由于参数值过滤不严导致的。

三、SQL注入漏洞如何寻找

使用工具
    优点:自动化,范围广,效率高
    缺点:误报,漏报,测试方法有限。

手工测试
    优点:测试方法灵活
    缺点:效率低,范围窄,因测试者技术水平而异。

四、SQL注入漏洞如何寻找—-漏洞扫描工具

常用漏洞扫描工具:Safe3wvs、BrupSuite、Appscan、Acunetix WVS

五、SQL注入漏洞判断依据

判断注入漏洞的依据是什么?
根据客户端返回的结果来判断提交的测试语句是否成功被数据库引擎执行,
如果测试语句被执行了,说明存在注入漏洞。

构造测试语句 提交请求 分析返回结果 符合预期结果 存在SQL注入漏洞
构造测试语句     <---不符合预期结果 --->   不存在SQL注入漏洞

六、常见SQL测试语句和技巧—-测试语句

数字型
    And 1=1/And 1=2
    OR 1=1/OR 1=2
    +、-、*、/、>、<、<=、>=
    1 like 1/1 like 2

字符型
    And ‘1’ = '1/And '1' = ' 2
    OR '1' = '1/OR '1' = '2' #
    +' /+' 1、 -' 、0/-' 1、>、<、<=、>=
    1'  like '1/1' like '2

七、常见SQL测试语句和技巧—-注释字符
sql.png

SQLServer数据库注入
一、目录

SQLServer 注入常见测试语句
SQLServer手工注入实例演示
SQLServer工具辅助注入实例演示

二、SQLServer注入常见测试语句

常见测试语句:
    and exists(select * from sysobjects)    //判断数据库是否为SQLServer
    and exists(select * from tableName)    //判断某表是否存在..tableName为表名
    and 1=(select @@VERSION)        //SQLServer版本
    and 1=(select db_name())    //当前数据库名
    and 1=(select @@servername)    //本地服务名

    and 1=(select IS_SRVROLEMEMBER(    'sysadmin' ))     //判断是否是系统管理员
    and 1=(select IS_MEMBER(    'db_owner' ))    //判断是否是库权限
    and 1=(select count(*) from master.dbo.sysobjects where xtype = 'X' and name= 'xp_cmdshell')    //判断XP_CMDSHELL是否存在

MYSQL数据库注入
一、目录

Mysql注入常见测试语句
Mysql手工注入实例演示
Mysql工具辅助注入实例演示

二、Mysql注入常见测试语句

常见函数:
    user()  //数据库用户名
    current_user()  //当前数据库用户名
    database()  //数据库名
    version()  //Mysql数据库版本
    @@datadir  //读取数据库路径
    @@basedir  //Mysql安装路径
    @@version_compile_os  //获取操作系统 版本
    load_file()  //Mysql读取本地文件的函数

        

Author: 云亦然

Link: http://JaneBraun.github.io/2019/03/18/网络安全之SQL注入/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
网络安全之XXS攻击
NextPost >
Python查星座
CATALOG