首先要知道sql注入形成的原因:用户输入的数据被sql解释器执行

sql注入又分:数字型,字符型,cookie 注入,post注入,延时注入,搜索注入,base64注入

如何甄别一个模块是否有sql注入呢 打个比方

数字型注入

www.baidu.com/test?id=1 有这摸一个页面 我在后面加上

www.baidu.com/test?id=1 and 1=2   如果返回正常无数据就证明此模块可能存在SQL注入漏洞

而注入多存在asp.php弱类型语言中

上面那个例子就是典型的数字型注入

字符型注入

注意字符串闭合问题如下例子

select * from table where name='123' and pwd='123' 如果不知道密码 可以把输入的123 改成

123‘ and1=1 --  在被sql解析器解析时就会变成 select * from table where name='123‘ and1=1 -- ‘and pwd='123'  就这样成功注入了

当然也要注意不同数据库的连接字符串也不同 SQL Server 是+ ,Oracle 是 || ,MySQL 是空格

我们以SQL Server Mysql Oracle  这三种主流数据库为例

SQL Server

如果在程序中没有用try cath 对错误捕捉在进行友好提示 那sql错误信息 就可能直接暴露给用户 如果是攻击者则会暴露更多信息

select * from table where name='123' and pwd='123' 在密码处进行注入  123‘ group by username having 1=1 --  如果列中未包含usrname 列名 那么就会将这个错误直接返回给前台显示 通过sql server 错误提示 用having 对表的字段进行字典枚举 可以获取表所有字段  也可以利用系统数据库获取更多数据库信息 内嵌查询

select * from sys.databases --数据库所有数据库
select * from  sys.sql_logins --所有登录名
select * from INFORMATION_SCHEMA.TABLES --当前数据库的所有表
select * from INFORMATION_SCHEMA.COLUMNS --当前数据库的表列
select * from sys.all_columns --用户定义的对象和列的集合
select * from  sys.database_principals --数据库的权限查询
select * from  sys.database_files --在数据库数据库文件位置
select * from  sys.objects --数据库的日志,存储过程

order by  注入可以知道当前表的列数

order by 100  可以递归知道没出现错误可以确定该数据库有多少列  union 也同样适用

比如 where id=1  注入  id=1 union select null,null  就会包错 会显示合并列不匹配 可以一直加空 直到不报错

当然大部分程序杜绝了’号 可以利用16进制 比如

select * from table id=1&type=0x4568468  可以对特殊语句进行16进制处理

Mysql Oracle   同理 可能语法不同和系统函数不用 但注入手段都是差不多的

为了避免sql 注入 所以对用户所有输入的地方对输入进行参数化处理就可以啦

SQL 注入漏洞的更多相关文章

  1. 从c#角度看万能密码SQL注入漏洞

    以前学习渗透时,虽然也玩过万能密码SQL注入漏洞登陆网站后台,但仅仅会用,并不理解其原理. 今天学习c#数据库这一块,正好学到了这方面的知识,才明白原来是怎么回事. 众所周知的万能密码SQL注入漏洞, ...

  2. WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案(转)

    对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...

  3. WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案

    对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...

  4. SQL Injection(SQL注入漏洞)

    审计前准备: 1.安�php程序(推荐phpStudy) 2.高亮编辑器(推荐 Sublimetext Notepad++) 3.新建一个文本,复制以下变量,这些变量是审计中需要在源码中寻找的 ### ...

  5. sql注入漏洞

    在这么多bug里给我印象最深的就是sql注入漏洞,看上去没有问题的代码却会因为用户的不正常输入而带来极其严重的问题. 现在给大家分享一下如何修复SQL注入漏洞.下面是网上的两种解决方法,其中第二方法有 ...

  6. 利用SQL注入漏洞登录后台的实现方法

    利用SQL注入漏洞登录后台的实现方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-01-12我要评论 工作需要,得好好补习下关于WEB安全方面的相关知识,故撰此文,权当总结,别无它意.读 ...

  7. PHPCMS \phpcms\modules\member\index.php 用户登陆SQL注入漏洞分析

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述2. 漏洞触发条件 0x1: POC http://localhost/p ...

  8. 预处理prepareStatement是怎么防止sql注入漏洞的?

    序,目前在对数据库进行操作之前,使用prepareStatement预编译,然后再根据通配符进行数据填值,是比较常见的做法,好处是提高执行效率,而且保证排除SQL注入漏洞. 一.prepareStat ...

  9. jdbc mysql crud dao模型 sql注入漏洞 jdbc 操作大文件

    day17总结 今日内容 l JDBC 1.1 上次课内容总结 SQL语句: 1.外键约束:foreign key * 维护多个表关系! * 用来保证数据完整性! 2.三种关系: * 一对多: * 一 ...

  10. 利用SQL注入漏洞登录后台的实现方法 。。。。转载

    一.SQL注入的步骤 a) 寻找注入点(如:登录界面.留言板等) b) 用户自己构造SQL语句(如:' or 1=1#,后面会讲解) c) 将sql语句发送给数据库管理系统(DBMS) d) DBMS ...

随机推荐

  1. 29.vector

    对于List接口这里还介绍一个它的实现类Vector,Vector 类可以实现可增长的对象数组. Vector可以实现可增长的对象数组.与数组一样,它包含可以使用整数索引进行访问的组件.不过,Vect ...

  2. 新特技软件(Analyzer)添加新用户

    新特技软件添加新用户的步骤比较多,记录下来,方便以后使用 安装完软件,处理好自己的AS以后,准备添加用户 步骤一: 我们要在安装Analyzer的服务器上添加新的Windows用户 步骤二:在Anal ...

  3. 利用WindowsServiceWrapper(WinSW)将nginx包装为系统服务

    1.WindowsServiceWrapper(WinSW) Github:https://github.com/kohsuke/winsw/ 下载地址:http://repo.jenkins-ci. ...

  4. 虚拟机安装mysql

    安装mysql8.0方法:  1.首先,ubuntu安装mysql8.0(此版本比较好装),所以要先更新一下源,去MySQL官网http://dev.mysql.com/downloads/repo/ ...

  5. 移动端调试神器-vConsole

    什么是vConsole?   官方说明是一个web前端开发者面板,可用于展示console日志,方便日常开发,调试. 简单来说相当于移动版的Chrome调试控制台,就是我们在PC端常用的F12 vCo ...

  6. [Postman]发送第一个请求(1)

    通过API请求,您可以与具有要访问的API端点的服务器联系,并执行某些操作.这些操作是HTTP方法. 最常用的方法是GET,POST,PUT和DELETE.方法的名称是不言自明的.例如,GET使您可以 ...

  7. 四、activiti工作流-第一个HelloWorld

    上一节已经把流程图画好,并且数据库也已经创建好了25张表,这节讲如何启动一个流程 先新建一个包,并新建一个类. /**然后定义一个成员属性,主要是因为每个方法都要用到这个引擎 * 获取默认流程引擎实例 ...

  8. [JavaScript]catch(ex)语句中的ex

    try/catch语句是JavaScript语句提供的异常处理机制,一旦try语句块内部的语句抛出异常,在catch语句块即可捕获到Error类型的异常信息.我们知道JavaScript里是没有块作用 ...

  9. 剑指offer【06】- 旋转数组的最小数字(java)

    题目:旋转数组的最小数字 考点:查找和排序 题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4, ...

  10. 编码之痛:操作系统迁移后redis缓存无法命中

    前几天一台内网服务器从ubuntu迁移到了centos,检查一切正常后就没有太在意. 今天有同事反馈迁移后的机器上的服务一个缓存总是无法获取,对比了下环境.JVM参数,尝试了war包替换等方式照样复现 ...