SQL手工注射原理
关于SQL注入(SQL Injection)的方法其实都很普遍和使用,归纳起来也很方便。一般“黑客”使用的是现成的工具如“WEB旁注、阿D网络工具包、教主XXX”等这些都是集成了
一些常用的sql注入语句。下面我将介绍如何使用手工注入MYSQL,MSSQL数据库.
一般漏洞产生的原因 : 程序执行中未对敏感字符进行过滤,使得攻击者传入恶意字符串与结构化数据查询语句合并,并且执行恶意代码.
创建text数据表MYSQL代码:
create database if not exists `test`;
USE `test`;
/*数据表 `account` 的表结构*/
DROP TABLE IF EXISTS `account`;
CREATE TABLE `account` (
`accountId` bigint(20) NOT NULL auto_increment,
`accountName` varchar(32) default NULL,
`accountPass` varchar(32) default NULL,
PRIMARY KEY (`accountId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*数据表 `account` 的数据*/
insert into `account` values
(1,'account1','account1');
/*数据表 `admin` 的表结构*/
DROP TABLE IF EXISTS `admin`;
CREATE TABLE `admin` (
`adminId` bigint(20) NOT NULL auto_increment,
`adminName` varchar(32) default NULL,
`adminPass` varchar(32) default NULL,
PRIMARY KEY (`adminId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*把数据插入数据表 `admin` 的数据*/
insert into `admin` values
(1,'admin','admin');
2.漏洞的利用
这个就是数据库里的记录了.以后黄色为关键语句,红色为输入的部分.
大家注意看resultSet = statment.executeQuery("select * from account where accountId = '"+ request.getParameter("id") +"'");
这里的request.getParameter("id") 是获取GET传参的id 参数,也就是mysqlInject.jsp?id=1 这里的id. 这样这个SQL语句就变成了select * from account where accountId =
'1' 了.如果加以变换呢?
2.1漏洞的检测
我们把id 写成mysqlInject.jsp?id=1' 那么SQL 语句就变成select * from account where accountId = '1'' 了,这样的话SQL语句就会报错,因为SQL语句的值是需要2个包含
符号,比如’和”如果只是数字可以什么都不写.如果
相关文档:
and exists (select * from sysobjects) //判断是否是MSSQL and exists(select * from tableName) //判断某表是否存在..tableName为表名 and 1=(select @@VERSION) //MSSQL版本 And 1=(select db_name()) //当前数据库名 and 1=(select @@servername) //本地服务名 and 1=(select IS_SRVROLEMEMBER('sysadmin')) ......
CREATE PROCEDURE
创建存储过程,存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合。
可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。也可以创建在 Microsoft? SQL Server? 启动时自动运行的存储过程。
语法
CREATE ......
为了大家更容易理解我举出的SQL语句,本文假定已经建立了一个学生成绩管理数据库,全文均以学生成绩的管理为例来描述。
1.在查询结果中显示列名:
a.用as关键字:select name as '姓名' from students order by age
b.直接表示:select name '姓名' from students order by age
2.精确查找:
a.用 ......
.NET中C#的byte关键字映射.NET的Byte结构:表示一个 8 位无符号整数。Byte 值类型表示值介于 0 和 255 之间的无符号整数。
.NET中C#的short关键字映射.NET中的Int16:有符号 16 位整数,-32,768 到 32,767。
SQL SERVER中的tinyint:从 0 到 255 的整型数据。存储大小为 1 字节。
sbyte:存储8位带符号整数。sbyt ......
润乾报表可以通过SQL检索和复杂SQL生成数据集。当SQL中需要传入多个参数时,要在设计器中通过 配置-参数 定义相应的参数,然后再把SQL中需要参数的地方替换成?,最后还要在SQL编辑器中添加对应?的参数。这样当SQL中有多少个问号,我们就需要添加多少个参数。当SQL中用到的参数比较少时,操作起来还比较方便。但当业务比较复 ......