资源预览内容
第1页 / 共18页
第2页 / 共18页
第3页 / 共18页
第4页 / 共18页
第5页 / 共18页
第6页 / 共18页
第7页 / 共18页
第8页 / 共18页
第9页 / 共18页
第10页 / 共18页
亲,该文档总共18页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Web开发常见的几个漏洞解决方法 作者: 日期:Web开发常见的几个漏洞解决方法平时工作,多数是开发Web工程,由于一般是开发内部使用的业务系统,所以对于平安性一般不是看的很重,根本上由于是内网系统,一般也很少会受到攻击,但有时候一些系统平台,需要外网也要使用,这种情况下,各方面的平安性就要求比拟高了,所以往往会交付给一些专门做平安测试的第三方机构进展测试,然后根据反应的漏洞进展修复,如果你平常对于一些平安漏洞不够了解,那么反应的结果往往是很残酷的,迫使你必须在很多细节上进展修复完善。本文主要根据本人工程的一些第三方平安测试结果,以及本人针对这些漏洞问题的修复方案,介绍在这方面的一些经历,希望对大家有帮助。根本上,参加的平安测试渗透测试的网站,可能或多或少存在下面几个漏洞:SQL注入漏洞、跨站脚本攻击漏洞、登陆后台管理页面、IIS短文件/文件夹漏洞、系统敏感信息泄露。1、测试的步骤及内容这些平安性测试,据了解一般是先收集数据,然后进展相关的渗透测试工作,获取到网站或者系统的一些敏感数据,从而可能到达控制或者破坏系统的目的。第一步是信息收集,收集如IP地址、DNS记录、软件版本信息、IP段等信息。可以采用方法有:1根本网络信息获取;2Ping目标网络得到IP地址和TTL等信息;3Tcptraceroute和Traceroute 的结果;4Whois结果;5Netcraft获取目标可能存在的域名、Web及效劳器信息;6Curl获取目标Web根本信息;7Nmap对网站进展端口扫描并判断操作系统类型;8Google、Yahoo、Baidu等搜索引擎获取目标信息;9FWtester 、Hping3 等工具进展防火墙规那么探测;10其他。第二步是进展渗透测试,根据前面获取到的数据,进一步获取网站敏感数据。此阶段如果成功的话,可能获得普通权限。采用方法会有有下面几种:1常规漏洞扫描和采用商用软件进展检查;2结合使用ISS与Nessus等商用或免费的扫描工具进展漏洞扫描;3采用SolarWinds对网络设备等进展搜索发现;4采用Nikto、Webinspect等软件对Web常见漏洞进展扫描;5采用如AppDetectiv之类的商用软件对数据库进展扫描分析;6对Web和数据库应用进展分析;7采用WebProxy、SPIKEProxy、Webscarab、ParosProxy、Absinthe等工具进展分析;8用Ethereal抓包协助分析;9用Webscan、Fuzzer进展SQL注入和XSS漏洞初步分析;10手工检测SQL注入和XSS漏洞;11采用类似OScanner的工具对数据库进展分析;12基于通用设备、数据库、操作系统和应用的攻击;采用各种公开及私有的缓冲区溢出程序代码,也采用诸如MetasploitFramework 之类的利用程序集合。13基于应用的攻击。基于Web、数据库或特定的B/S或C/S构造的网络应用程序存在的弱点进展攻击。14口令猜解技术。进展口令猜解可以采用 X-Scan、Brutus、Hydra、溯雪等工具。第三步就是尝试由普通权限提升为管理员权限,获得对系统的完全控制权。在时间许可的情况下,必要时从第一阶段重新进展。采用方法1口令嗅探与键盘记录。嗅探、键盘记录、木马等软件,功能简单,但要求不被防病毒软件觉察,因此通常需要自行开发或修改。2口令破解。有许多著名的口令破解软件,如 L0phtCrack、John the Ripper、Cain 等。以上一些是他们测试的步骤,不过我们不一定要关注这些过程性的东西,我们可能对他们反应的结果更关注,因为可能会爆发很多平安漏洞等着我们去修复的。2、SQL注入漏洞的出现和修复1SQL注入定义:SQL注入攻击是黑客对数据库进展攻击的常用手段之一。随着B/S模式应用开发的开展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经历也参差不齐,相当大一局部程序员在编写代码的时候,没有对用户输入数据的合法性进展判断,使应用程序存在平安隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。SQL注入有时候,在地址参数输入,或者控件输入都有可能进展。如在链接后参加号,页面报错,并暴露出网站的物理路径在很多时候,很常见,当然如果关闭了的CustomErrors的时候,可能就不会看到。另外,Sql注入是很常见的一个攻击,因此,如果对页面参数的转换或者没有经过处理,直接把数据丢给Sql语句去执行,那么可能就会暴露敏感的信息给对方了。如下面两个页面可能就会被添加注入攻击: :/xxx.xxx.xxx/abc.asp?p=YY and (select top 1 name from TestD . type=U and status0)0 得到第一个用户建立表的名称,并与整数进展比拟,显然工作异常,但在异常中却可以发现表的名称。假设发现的表名是xyz,那么 :/xxx.xxx.xxx/abc.asp?p=YY and (select top 1 name from & . tatus0 and name not in(xyz)0 可以得到第二个用户建立的表的名称,同理就可得到所有用建立的表的名称。为了屏蔽危险Sql语句的执行,可能需要对进展严格的转换,例如如果是整形的,就严格把它转换为整数,然后在操作,这样可以防止一些潜在的危险,另外对构造的sql语句必须进展Sql注入语句的过滤,如我的框架Winform开发框架、Web开发框架等里面就内置了对这些有害的语句和符号进展去除工作,由于是在基类进展了过滤,因此根本上子类都不用关心也可以防止了这些常规的攻击了。 / / 验证是否存在注入代码(条件语句 / / public bool HasInjectionData(string inputData) if (string.IsNullOrEmpty(inputData) return false; /里面定义恶意字符集合 /验证inputData是否包含恶意集合 if (), GetRegexString() return true; else return false; / / 获取正那么表达式 / / private static string GetRegexString() /构造SQL的注入关键字符 string strBadChar = /selects, /froms, inserts, deletes, updates, drops, truncates, execs, count(, declares, asc(, mid(, char(, net user, xp_cmdshell, /adds, exec , net localgroup administrators ; /构造正那么表达式 string str_Regex = .*(; for (int i = 0; i - 1; i+) str_Regex += strBadChari + |; str_Regex += strBadChar - 1 + ).*; return str_Regex; 上面的语句用于判别常规的Sql攻击字符,我在数据库操作的基类里面,只需要判别即可,如下面的一个根据条件语句查找数据库记录的函数。 / / 根据条件查询数据库,并返回对象集合 / / 查询的条件 / 自定义排序语句,如Order By Name Desc;如不指定,那么使用默认排序 / 参数列表 / 指定对象的集合 public virtual List Find(string condition, string orderBy, IDbDataParameter paramList) if (HasInjectionData(condition) (string.Format(检测出SQL注入的恶意数据, 0, condition);
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号