SQL 注入漏洞
首先要知道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 注入漏洞的更多相关文章
- 从c#角度看万能密码SQL注入漏洞
以前学习渗透时,虽然也玩过万能密码SQL注入漏洞登陆网站后台,但仅仅会用,并不理解其原理. 今天学习c#数据库这一块,正好学到了这方面的知识,才明白原来是怎么回事. 众所周知的万能密码SQL注入漏洞, ...
- WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案(转)
对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...
- WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案
对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...
- SQL Injection(SQL注入漏洞)
审计前准备: 1.安�php程序(推荐phpStudy) 2.高亮编辑器(推荐 Sublimetext Notepad++) 3.新建一个文本,复制以下变量,这些变量是审计中需要在源码中寻找的 ### ...
- sql注入漏洞
在这么多bug里给我印象最深的就是sql注入漏洞,看上去没有问题的代码却会因为用户的不正常输入而带来极其严重的问题. 现在给大家分享一下如何修复SQL注入漏洞.下面是网上的两种解决方法,其中第二方法有 ...
- 利用SQL注入漏洞登录后台的实现方法
利用SQL注入漏洞登录后台的实现方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-01-12我要评论 工作需要,得好好补习下关于WEB安全方面的相关知识,故撰此文,权当总结,别无它意.读 ...
- PHPCMS \phpcms\modules\member\index.php 用户登陆SQL注入漏洞分析
catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述2. 漏洞触发条件 0x1: POC http://localhost/p ...
- 预处理prepareStatement是怎么防止sql注入漏洞的?
序,目前在对数据库进行操作之前,使用prepareStatement预编译,然后再根据通配符进行数据填值,是比较常见的做法,好处是提高执行效率,而且保证排除SQL注入漏洞. 一.prepareStat ...
- jdbc mysql crud dao模型 sql注入漏洞 jdbc 操作大文件
day17总结 今日内容 l JDBC 1.1 上次课内容总结 SQL语句: 1.外键约束:foreign key * 维护多个表关系! * 用来保证数据完整性! 2.三种关系: * 一对多: * 一 ...
- 利用SQL注入漏洞登录后台的实现方法 。。。。转载
一.SQL注入的步骤 a) 寻找注入点(如:登录界面.留言板等) b) 用户自己构造SQL语句(如:' or 1=1#,后面会讲解) c) 将sql语句发送给数据库管理系统(DBMS) d) DBMS ...
随机推荐
- ZOJ1994有源汇上下界可行流
http://fastvj.rainng.com/contest/236779#problem/G Description: n 行 m 列 给你行和 与 列和 然后有Q个限制,表示特定单元格元素大小 ...
- 把纯C的动态库代码改造成C++版的
近期想把一份纯C的跨Win/Linux的动态库工程代码改成支持C++编译器,这样用C++写起代码来比较顺手.要点是保证动态库的ABI一致性,既导出接口不能改变. 主要的改动有: 1.把.c后缀名换成. ...
- 架构(二)Maven安装以及Nexus配置
一 Maven安装配置 1.1 下载 http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-ma ...
- Spring Boot使用AOP实现REST接口简易灵活的安全认证
我们继续上一篇文章的分析,本文将通过AOP的方式实现一个相对更加简易灵活的API安全认证服务. 我们先看实现,然后介绍和分析AOP基本原理和常用术语. 一.Authorized实现 1.定义注解 pa ...
- 剑指offer面试题16:反转链表
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的链表的头结点.解题思路:单向链表只能实现单向遍历,改变链表方向就是要把当前链表的节点指向它的前一个节点,一旦当前链表指向发生了变化,就 ...
- KVM虚拟机配置笔记
KVM 全称是 Kernel-Based Virtual Machine.也就是说 KVM 是基于 Linux 内核实现的,KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存. 在 ...
- 【渗透攻防Web篇】SQL注入攻击高级
前言 前面我们学习了如何寻找,确认,利用SQL注入漏洞的技术,本篇文章我将介绍一些更高级的技术,避开过滤,绕开防御.有攻必有防,当然还要来探讨一下SQL注入防御技巧. 目录 第五节 避开过滤方法总结 ...
- Java语言中的面向对象特性
面向对象的基本特征 1.封装性 封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,包含两个含义: ◇ 把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位( ...
- 网络编程懒人入门(六):深入浅出,全面理解HTTP协议
本文引用了自简书作者“涤生_Woo”的文章,内容有删减,感谢原作者的分享. 1.前言 HTTP(全称超文本传输协议,英文全称HyperText Transfer Protocol)是互联网上应用最为广 ...
- io模块及其API
模块: io io.StringIO io.BytesIO 所包含API列表: io.StringIO.write: 写入字符 io.StringIO.getvalue: 获取写入的字符 io.Str ...