SQL注入简单原理分析
SQL注入简单分析
示例语句:
select * from admintable where adminName like '%a%'
在查询中我们一般在a这个地方由界面传入不同的值,当我们在a这里传入的值为“'”单引号时,拼凑成的SQL语句就如下:
select * from admintable where adminName like '%'%'
执行这句语句我们会发现出现以下异常:
消息 105,级别 15,状态 1,第 1 行
字符串 '
' 后的引号不完整。
消息 102,级别 15,状态 1,第 1 行
'
' 附近有语法错误。
因为单引号的加入是原本完整的SQL语句拼凑不再完整,因此导致以上异常。
而一般黑客在简单的尝试注入时,在界面的输入处(如URL的参数,文本框的输入等)直接输入单引号来测试是否会引发SQL异常,根据页面的错误代码展现来判断是否存在SQL注入漏洞,例如会直接在页面中出现SQL的异常代码或直接跳转到错误页面。当被认为存在SQL注入漏洞时,那么将不再是输入单引号了,而是输入相关的SQL执行语句。
于是当我们传入不同的值例如
' or 1=1 ;delete admintable where 1=1 or ''='
得到的SQL语句就如下:
select * from admintable where adminName like '%' or 1=1 ;delete admintable where 1=1 or ''='%'
而这句SQL的执行效果就有两个:
1、select * from admintable where adminName like '%' or 1=1 ;
--查询admintable
2、delete admintable where 1=1 or ''='%'
--将admintable清空
也就是说如果把delete admintable where 1=1 这句SQL扩展修改的话,可以执行增删改等操作了,例如SQL2000中的XP_CMDShell命令还能直接执行CMD命令台的CMD命令,来实现直接对服务器的控制等。
至于如何暴露出数据库的各个表的名字等,可以通过枚举猜测等方式实现,网络上已经有相关的SQL注入工具可供直接使用。
当我们的网站存在SQL注入漏洞时,最好修改相关的底层代码或者使用相关的监控工具来修复。一个网站被入侵并不是黑客的错,而是服务器管理员和网站开发人员惹下的祸。
如有错误,敬请指正。
相关文档:
计算间隔时间:
select f_date,f_cstime,f_cetime, (((SYSDATE- TO_DATE(f_date||f_cstime,'YYYYMMDDHH24MISS')) * 86400000)-((SYSDATE- TO_DATE(f_date||f_cetime,'YYYYMMDDHH24MISS')) * 86400000))/1000 CURRENT_MILLI from ycsq_t_hauthlog where f_cstime<>'999999'
将字符串转换成日期类:SYSDATE- TO_ ......
/*
使用事务日志恢复数据的实验
*/
--1.创建测试数据库
CREATE DATABASE Db_test
ON
( NAME = Db_test_DATA,
FILENAME = 'c:\Db_test.mdf' )
LOG ON
( NAME = Db_test_LOG,
FILENAME = 'c:\Db_test.ldf')
GO
--2.故障还原模型设置为full模型,默认的简单模型备份 ......
SQL 中的 TRIM 函数
是用来移除掉一个字串中的字头或字尾。最常见的用途是移除字首或字尾的空白。这个函数在不同的资料库中有不同的名称:
MySQL: TRIM(), RTRIM(), LTRIM()
Oracle: RTRIM(), LTRIM()
SQL Server: RTRIM(), LTRIM()
各种 trim 函数的语法如下:
TRIM ([[位置] [要移除的字串] from ] 字串): [位置 ......
今天遇到一个问题:
在拼一条动态Sql语句时,由于是用字段的值做列名,所以列名用到了汉字。
一运行,报错:在“、”附件有语法错误。
很纳闷,难道超长了?
尝试在企业管理器中添加这个列名,发现添加完之后系统自动添加了一对中括号,对于"aa、bb","aa,bb"也都添加了中括号。
看来是微软为了以防万一,连 ......
1.在查询分析器下查询Excel文档
Select * from
OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source = "c:\测试.xls";User ID = Admin;Password=;Extended properties=Excel8.0)....Sheet1$
2.从数据库中导出数据并存到文件中
EXEC master..xp_cmdshell 'bcp CAS2004..HGZ_LIAOJIAN out c:\temp1.xls -c -q -S"."- ......