Web应用安全培训(1).ppt

上传人:laozhun 文档编号:2838644 上传时间:2023-02-26 格式:PPT 页数:170 大小:7.38MB
返回 下载 相关 举报
Web应用安全培训(1).ppt_第1页
第1页 / 共170页
Web应用安全培训(1).ppt_第2页
第2页 / 共170页
Web应用安全培训(1).ppt_第3页
第3页 / 共170页
Web应用安全培训(1).ppt_第4页
第4页 / 共170页
Web应用安全培训(1).ppt_第5页
第5页 / 共170页
点击查看更多>>
资源描述

《Web应用安全培训(1).ppt》由会员分享,可在线阅读,更多相关《Web应用安全培训(1).ppt(170页珍藏版)》请在三一办公上搜索。

1、Web应用安全汪涛2009-10,目录,Web对象直接引用,二,三,四,恶意代码执行,一,背景,注入攻击,五,跨站脚本攻击,六,Google Hack,OWASP漏洞攻防,七,Web来源于World Wide Web,Web系统是Internet的重要组成部分,形形色色的Web系统正在改变着我们的生活:,网上购物,网上汇款交费,写博客,Web小游戏,竞选,网上营业厅,Web丰富了我们的生活,作为一种新型的市场渠道,网上营业厅能够为用户提供方便快捷的服务,能够降低实体店铺的成本,因此在各大运营商市场战略中占有重要的位置。近年以来,网上营业厅的安全问题越来越受到大众的关注,主要可以划分成4个方面:

2、,Web安全的意义,网上营业厅如果被不法分子攻陷,那么可能以此为跳板进入运营商的支撑网甚至核心网络,造成大面积通讯故障。,网上到处叫卖的个人通话详单查询服务已经对老百姓的隐私造成了极大的破坏。移动集团一直就很重视客户信息保密的问题。,网上营业厅代表了企业对外的形象,每天访问用户数以万计,如果出现页面篡改、甚至网页挂马事件,对企业形象是巨大损失。,网上营业厅涉及充值交费等交易业务,容易吸引不法分子的眼球。如果利用安全漏洞造成交易欺诈,损害企业的经济利益。,Web系统逐渐成为企业安全边界之一,防火墙,加固OS,Web服务器,应用服务器,防火墙,数据库,历史遗留系统,Web Services,文件目

3、录,人力系统,计费系统,定制的应用程序,应用层攻击,仅仅使用网络层的防护手段(防火墙,SSL,IDS,加固)无法阻止或检测到应用层攻击,网络层,应用层,应用层作为安全边界的一部分,或许有巨大的漏洞,而Web系统的安全性参差不齐,复杂应用系统代码量大、开发人员多、难免出现疏忽;系统屡次升级、人员频繁变更,导致代码不一致;历史遗留系统、试运行系统等多个Web系统共同运行于同一台服务器上;开发人员未经过安全编码培训;定制开发系统的测试程度不如标准的产品;,客户满意,界面友好操作方便,处理性能,实现所有功能,架构合理代码修改方便,运行稳定,没有bug,不同模块低耦合,相对安全性而言,开发人员更注重系统

4、功能!,开发进度与成本,开发者的关注点,定制开发的Web应用=企业安全的阿基里斯之踵,“目前,75%的攻击发生在应用层”Gartner,2006,“2006年前9个月内新发现4,375 个漏洞.Web漏洞是其中最普遍的三类之一.”Mitre Corp,09/2006,CVE的维护者,“产品的定制开发是应用安全中最薄弱的一环”.Gartner,09/2005,“到2009年,80%的企业都将成为应用层攻击的受害者”.Gartner,2007,Web攻击场景,攻击动机,攻击方法,攻击工具,系统漏洞,防范措施,攻击面(attack surface),Web服务器,黑客,Web攻击动机,常见Web攻击

5、动机,恶作剧;关闭Web站点,拒绝正常服务;篡改Web网页,损害企业名誉;免费浏览收费内容;盗窃用户隐私信息,例如Email;以用户身份登录执行非法操作,从而获取暴利;以此为跳板攻击企业内网其他系统;网页挂木马,攻击访问网页的特定用户群;仿冒系统发布方,诱骗用户执行危险操作,例如用木马替换正常下载文件,要求用户汇款等;,常用的挂马exploitMS07-017 MS Windows Animated Cursor(.ANI)Remote ExploitMS07-019MS07-004 VML Remote Code ExecutionMS06-073MS06-071 XML Core Serv

6、ices Remote Code ExecutionMS06-068MS06-067MS06-057 WebViewFolderIcod ActiveXMS06-055MS06-014 MDAC Remote Code ExecutionMS06-013MS06-005MS06-004MS06-001,Web攻击方法,常见Web攻击方法,Google hack网页爬行暴力猜解Web漏洞扫描错误信息利用根据服务器版本寻找现有的攻击代码利用服务器配置漏洞文件上传下载构造恶意输入(SQL注入攻击、命令注入攻击、跨站脚本攻击)HTTP协议攻击拒绝服务攻击其他攻击点利用(Web Services,Fla

7、sh,Ajax,ActiveX,JavaApplet)业务逻辑测试,收集系统相关的通用信息将系统所有能访问页面,所有的资源,路径展现出来URL、口令、数据库字段、文件名都可以暴力猜解,注意利用工具;利用Web漏洞扫描器,可以尽快发现一些明显的问题错误可能泄露服务器型号版本、数据库型号、路径、代码;搜索Google,CVE,BugTraq等漏洞库是否有相关的漏洞服务器后台管理页面,路径是否可以列表等是否可以上传恶意代码?是否可以任意下载系统文件?检查所有可以输入的地方:URL、参数、Post、Cookie、Referer、Agent、系统是否进行了严格的校验?HTTP协议是文本协议,可利用回车换

8、行做边界干扰用户输入是否可以影响服务器的执行?需要特殊工具才能利用这些攻击点复杂的业务逻辑中是否隐藏漏洞?,Web攻击工具:WebScarab,特色:HTTP协议完全可见(可以完全操作所有的攻击点)支持HTTPS(包括客户端证书)全程数据与状态记录,可随时回顾,http:/www.owasp.org OWASP=Open Web Application Security Project,OWASP是最权威的Web应用安全开源合作组织,其网站上有大量的Web应用安全工具与资料。Nokia是其成员之一,WebScarab是OWASP组织推出的开源工具,可应用于一切基于HTTP协议系统的调试与攻击;

9、,访问资源名称,GET与POST参数,Referer与User Agent,HTTP 方法,Cookie,Ajax,Web Service,Flash客户端,Java Applet,Web攻击面:不仅仅是浏览器中可见的内容,POST/thepage.jsp?var1=page1.html HTTP/1.1Accept:*/*Referer:http:/en-us,de;q=0.5Accept-Encoding:gzip,deflateContent-Type:application/x-www-url-encodedContent-Lenght:59User-Agent:Mozilla/4.0

10、Host:Connection:Keep-AliveCookie:JSESSIONID=0000dITLGLqhz1dKkPEtpoYqbN2uid=fred&password=secret&pagestyle=default.css&action=login,直接可在浏览器中利用的输入,所有输入点,更多输入点,Web攻击漏洞:安全漏洞库,Securityfocus网站的漏洞库名称为Bugtraq,它给每个漏洞编号叫Bugtraq ID。它的网址为:http:/Cve是和Bugtraq齐名的漏洞库,它给漏洞库编号叫CVE ID,它的网址为:http:/cve.mitre.org/。CVE与Bu

11、gtraq漏洞库都会对确认的漏洞进行统一编号,其编号是业界承认的统一标准,有助于避免混淆。在这些漏洞库中都可以查到大量的Web应用漏洞。,Web攻击漏洞:2007 OWASP Top 10,2007年3月,OWASP对最新的Web应用漏洞按类别进行排名,并将前十名的脆弱性类别编制成册。http:/www.owasp.org/index.php/OWASP_Top_Ten_Project其中前5名与SANS定期更新的Top20榜中Web应用脆弱性前5名基本一致。http:/www.sans.org/top20,跨站脚本,注入,恶意代码,引用不当,CSRF,2007 OWASP Top 10:第一

12、名第四名,2007 OWASP Top 10:第五名第十名,OWASP TOP 10,您打算从哪里开始?,2,3,4,5,6,7,8,9,10,1,目录,Web对象直接引用,二,三,四,恶意代码执行,一,背景,注入攻击,五,跨站脚本攻击,六,Google Hack,OWASP漏洞攻防,七,2007 OWASP 第10名:URL访问控制不当,举例:有的Web应用对页面权限控制不严,原因是缺乏统一规范的权限控制框架,导致部分页面可以直接从URL中访问,绕开登录认证。防范措施:统一规范权限控制。,2007 OWASP 第9名,举例:网络窃听(Sniffer)可以捕获网络中流过的敏感信息,如密码,Co

13、okie字段等。高级窃听者还可以进行ARP Spoof,中间人攻击。防范措施:通讯加密。,Host A,Host B,Router A,Router B,2007 OWASP 第8名,举例:很多Web应用将用户口令以明文的方式保存,一旦黑客能够通过其他漏洞获取这些口令,就可以伪造他人身份登录,包括系统管理员。建议:采用安全的算法加密保存口令。下面将举一个实例说明,2007 OWASP 第8名:Case vBulletin,vBulletin 以MD5方式保存用户口令,然而其2.3.0版本存在一个SQL注入漏洞,可以通过此漏洞查询管理员密码的MD5值;,Step 1:通过Google搜索vBul

14、letin 2.3.0的特征,发现965.000项符合。,2007 OWASP 第8名:Case vBulletin,Step 2:检查漏洞页面calendar.php能否访问。Step 3:由于该攻击利用了Union,要求MySQL版本高于4.0,因此通过下面的链接检查其MySQL版本是否高于4.0。http:/,返回错误,代表MySQL版本4.0,返回正确,代表MySQL版本=4.0,2007 OWASP 第8名:Case vBulletin,Step 4:注册一个用户,在首页查看自己的ID。,2007 OWASP 第8名:Case vBulletin,Step 5:通过下面的链接实现SQ

15、L注入攻击:http:/,后面会专门介绍SQL注入,2007 OWASP 第8名:Case vBulletin,Step 6:访问http:/,输入MD5值反查密码为811028。,现在很多Web应用已经开始用MD5算法保存用户密码,然而直接进行MD5并非安全算法。右图的Rainbow表就可以用于反查MD5值。Rainbow表利用了Hellman的存储-时间权衡算法,通过设计一个大数据量的表来提高反查效率。,防范措施:SALT,学习Unix操作系统采用Salt技术来防范rainbow表攻击。,Password,随机Salt,MD5,Base64,随机salt,+,Shadow文件中保存的内容,

16、Unix在保存用户口令时,会随机生成一个12字节的字符串作为salt,然后把salt与口令一起计算MD5,并将salt与结果保存在etc/shadow中。验证时将salt与用户输入口令结合计算MD5并与存储的结果比对。,2007 OWASP 第7名,举例:有的Web应用登录界面允许攻击者暴力猜解口令,在自动工具与字典表的帮助下,可以迅速找到弱密码用户。,防范措施:图片认证码,双因素认证,实验环境搭建,采用VMware 5.0,虚拟两台主机,构造一个虚拟局域网,Window 2000 Server模拟Web服务器IP:192.168.230.2,Window 2000 Professional已

17、安装实验所需的攻击工具,模拟黑客机IP:192.168.230.3,本地机模拟普通用户IP:192.168.230.1,2007 OWASP 第7名:Case Brute,我们将利用一个简单的Perl脚本对目标进行字典攻击;首先设定Perl运行环境,将bin目录添加到系统PATH中:,学员练习10Min,2007 OWASP 第7名:Case Brute,运行perl formbrute.pl,显示其命令参数如下:usage:formbrute.pl-U url:网址-m method(GET|POST):GET还是POST-u usernameFile:用户名字典文件-p passwordF

18、ile:密码字典文件-l loginVariable:Form中用户名的变量名称-w passVariable:Form中密码的变量名称-o otherVariables(ie:submit=true&login=yes):其他变量-v proxyServer:代理-f failureString:失败后返回标记-s saveFilename:输出文件名-h request-headers(ie:Referer:abc&Cookie:ng=omo):其他HTTP头数据,学员练习10Min,2007 OWASP 第7名:Case Brute,启动WebScarab,开启抓包功能。同时在IE中设置

19、代理:,学员练习10Min,2007 OWASP 第7名:Case Brute,在登录页面输入用户名aaa,密码bbb,点击登录,WebScarab抓到IE发起的请求如下:POST http:/192.168.230.2:80/bbs/Default.asp HTTP/1.1Accept:image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/

20、*Referer:http:/192.168.230.2/bbs/Accept-Language:zh-cnContent-Type:application/x-www-form-urlencodedAccept-Encoding:gzip,deflateUser-Agent:Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.1;SV1;.NET CLR 1.1.4322)Host:192.168.230.2Content-length:77Proxy-Connection:Keep-AlivePragma:no-cacheCookie:Snitz00U

21、ser=;ASPSESSIONIDQCSDTQDT=CFPLNNDAGPEJLCMAJGKGCECA;iscookies=0;BoardList=BoardID=Show;upNum=0Method_Type=login&Name=aaa&Password=bbb&SavePassWord=true&submit1.x=34&submit1.y=17,学员练习10Min,2007 OWASP 第7名:Case Brute,由于输入的是错误的密码,页面提示:你的用户名或者密码是错误的.请重新输入或者注册成为新会员.我们把“错误”当成登录失败的标志,用formbrute发起如下命令:perl fo

22、rmbrute.pl-U http:/192.168.230.2/bbs/Default.asp-m POST-u UserList.txt-p PasswordList.txt-l Name-w Password-o Method_Type=login&SavePassWord=true&submit1.x=34&submit1.y=17-f 错误-s result.txt,学员练习10Min,2007 OWASP 第7名:Case Brute,结果输出在result.txt中:寻找到admin:admin以及test:test两个合法登录!,学员练习10Min,2007 OWASP 第7名

23、:Case Brute,题外话:Formbrute代码非常简短,稍加修改就可以完成更多的任务,例如:猜解后台管理入口;猜解数据库字段名;,自动测试,手工测试,2007 OWASP 第6名,举例:错误页面往往泄露系统内部敏感信息防范措施:在所有的运行代码中进行规范的异常处理。已处理的异常和未处理的异常应该始终将提供的可能有助于黑客攻击的信息减到最少。例如在登录系统时,不论是用户名不存在还是密码错误都应该提示相同的错误信息。,2007 OWASP 第6名:Case 1,泄露服务器Tomcat版本,2007 OWASP 第6名:Case 2,泄露数据库查询语句;泄露数据库为Oracle;,2007

24、OWASP 第6名:Case 3,泄露数据库为Microsoft SQL Server,2007 OWASP 第6名:Case 4,泄露数据库为MySQL,2007 OWASP 第6名:Case 5,泄露服务器目录,2007 OWASP 第6名:IE设置1,有的时候您看到的是如下的页面:,2007 OWASP 第6名:IE设置2,原因是IE显示给用户的是友好的HTTP错误,所以需要去掉下面选项的勾:,2007 OWASP 第6名:IE设置3,重启IE后,显示更多的技术细节:,总结,前面简介OWASP漏洞排名第10名到第6名的漏洞攻防;接下来将详细介绍第5名到第1名;我们把XSS与CSRF合并在

25、一起介绍,顺序如下:Insecure Direct Object Reference:直接对象引用Malicious File Execution:恶意代码Injection:注入XSS and CSRF:跨站脚本与跨站请求伪造,目录,Web对象直接引用,二,三,四,恶意代码执行,一,背景,注入攻击,五,跨站脚本攻击,六,Google Hack,OWASP漏洞攻防,七,对象直接引用 一,目标:获取服务器的etc/passwd文件方法:Web服务器一般缺省不允许攻击者访问Web根目录以外的内容。但是对Web应用却不做限制,因此,操作系统,Web应用,Web服务器,我想看etc/passwd,Ac

26、cess Denied!,我想看etc/passwd,OK!,我想看etc/passwd,OK!,对象直接引用,Step 1.访问http:/traffic-,这是一个网页浏览统计系统,点击Get stats!链接,对象直接引用,Step 2.右键点击中间的图片,查看其链接属性:,对象直接引用,Step 4.您是否观察到其中file是作为plotStat.php的一个参数传入,那么我们用file指向其他敏感文件试试看:,对象直接引用,Step 5.构造参数/./././././././././etc/passwd拿到etc/passwd!,对象直接引用,Step 6.进一步的攻击,Google

27、搜索 inurl:download.jsp?file=:,对象直接引用,下面这些链接都可以直接下载网站的源代码http:/www.swscreen.co.uk/download.asp?path=/./download.asphttp:/webhelp.swu.ac.th/download.asp?file=download.asphttp:/,其他资源类型,例如某Web应用允许用户查询自己账号的余额信息,其链接如下:http:/./history.jsp?userid=?有心的用户可能填写其他用户的id再访问,如果开发者在服务器端没有进行权限控制,判断此id是否能被当前会话的用户访问,就可能

28、泄露其他用户的隐私信息。复杂的系统存在大量的相互引用访问,如果开发者不能有效地进行权限控制,就可能被恶意引用。,真实的故事,Google-Docs用户可以偷窃所有其他用户的文档!,在google-docs上有个链接可以将您的文档发送给合作者。GET/Dialogs/EmailDocument?DocID=HTTP/1.1 然而,google却没有检查参数中的DOCID是否属于您。所以,您可以猜测他人文档的ID并利用这个链接让google把文档邮给您。,http:/xs-,防范措施,此类漏洞没有统一的防范措施。要求编码者有良好的安全意识,在编写资源访问代码时,要仔细考虑资源引用是否可以被黑客篡改

29、。Php应用常见的Remote/Local File Inclusion(简称RFI/LFI)漏洞就是因为系统在包含脚本文件时,包含的路径可被黑客篡改。,2007年9月26日16:00点在http:/FrontAccounting 1.13 Remote File Inclusion Vulnerabilities2007-09-24 sk.log=0.5.3(skin_url)Remote File Inclusion Vulnerability2007-09-24 DFD Cart 1.1 Multiple Remote File Inclusion Vulnerabilities2007

30、-09-23 phpFullAnnu(PFA)6.0 Remote SQL Injection Vulnerability2007-09-23 helplink 0.1.0(show.php file)Remote File Inclusion Vulnerability2007-09-23 PHP-Nuke addon Nuke Mobile Entartainment LFI Vulnerability2007-09-23 Wordsmith 1.1b(config.inc.php _path)Remote File Inclusion Vuln2007-09-22 Black Lily

31、2007(products.php class)Remote SQL Injection Vulnerability2007-09-22 Clansphere 2007.4(cat_id)Remote SQL Injection Vulnerability2007-09-21 CMS Made Simple 1.2 Remote Code Execution Vulnerability2007-09-21 iziContents=RC6(RFI/LFI)Multiple Remote Vulnerabilities2007-09-21 Joomla Component com_slidesho

32、w Remote File Inclusion Vulnerability2007-09-21 neuron news 1.0(index.php q)Local File Inclusion Vulnerability,目录,Web对象直接引用,二,三,四,恶意代码执行,一,背景,注入攻击,五,跨站脚本攻击,六,Google Hack,OWASP漏洞攻防,七,恶意代码执行,目标:将WebShell或木马程序上传到服务器中!方法:一种情况是Web应用提供了上传接口;还有一种情况是通过SQL注入直接利用底层数据库或操作系统的上传接口。第二种方法在SQL注入部分再介绍。,恶意代码执行:Case d

33、vbbs,将提交表单的filepath字段赋值给formPath变量formPath=upload.form(filepath)检查文件扩展名,必须是图像文件if CheckFileExt(fileEXT)=false then 利用formPath变量生成最终保存在服务器的文件名filename=formPath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&.&fileExt 存盘 file.SaveToFile Server.mappath(filename),filepath,formPat

34、h,filename,存盘,用户输入,Dvbbs是国内著名的开源论坛,其7.2 SP2版本以下都存在一个严重的任意文件上传漏洞。漏洞点在用户修改个人资料时允许从本地上传图像做头像,主要代码片段如下(upfile.asp):,恶意代码执行:Case dvbbs,Step 1.注册一个普通用户,并修改基本资料,其中提供了头像上传界面。,学员练习15Min,恶意代码执行:Case dvbbs,Step 2.为了更仔细了解这个页面,我们使用IE的查看源码功能,发现文件上传是一个Iframe.,Step 3.直接在IE中访问这个iframe页面,出现了一个简洁的上传接口.,学员练习15Min,恶意代码执

35、行:Case dvbbs,Step 4.再仔细查看这个页面的源代码,发现filepath字段.可惜是隐藏的,注意编码方式:multipart/form-data。,Step 5.打开WebScarab,设置IE代理为本地8008端口,并使用WebScarab的揭示隐藏字段的功能:,揭示隐藏字段,学员练习15Min,恶意代码执行:Case dvbbs,Step 6.我们在filepath后面追加上web.asp然后把我们要上传的恶意asp文件(一个asp编写的远程控制页面,也即通常说的WebShell)改名为web.jpg,上传;结果如下:失败上传按钮变灰,且左下角提示出现Javascript错

36、误。看来还是要退到原来的页面去做,学员练习15Min,恶意代码执行:Case dvbbs,虽然原来的页面操作很不方便,学员练习15Min,恶意代码执行:Case dvbbs,Step 7.注意打开webscarab的拦截功能,学员练习15Min,恶意代码执行:Case dvbbs,Step 8.关键一步:将替换为16进制的00,于是formPath=uploadFaceweb.asp0服务器端最后生成的Filename=formPath&时间&.&jpg因此web.jpg文件上传后,服务器保存为Filename=uploadFaceweb.asp,学员练习15Min,恶意代码执行:Case d

37、vbbs,Step 8.访问web.asp,显示出我们的webshell,登录密码是12345;,这种攻击又成为“空字节注入”,通常适用于multipart/form-data方式提交的HTTP请求。如果不是multipart/form-data,Web服务器会将HTTP请求在空字节处截断。一般文件上传都使用此类请求。,学员练习15Min,防范措施,首先编码者需要对上传页面代码严格把关,特别是在保存文件的时候,考察可能出现的异常字符,如./,.,空字符等。其次,对文件扩展名检查要采取“允许jpg,gif”这样的检查,而不要采取“不允许asp”这样的检查;例如IIS允许执行.asa类型的脚本。案

38、例:http:/www.krcert.or.kr/english_www/inc/download.jsp?filename=IN2005016.pdf最好对上传文件的目录设置不可执行,这可以通过web服务器配置加固实现。,目录,Web对象直接引用,二,三,四,恶意代码执行,一,背景,注入攻击,五,跨站脚本攻击,六,Google Hack,OWASP漏洞攻防,七,注入攻击:OWASP 2007 Top 2,目标:借Web应用的”刀“来攻击服务器数据库或操作系统方法:检查Web应用调用数据库服务器或操作系统功能所有调用点,检查是否能构造恶意输入,进而影响调用命令。下面重点讲解SQL Inject

39、ion。,操作系统,Web应用,数据库服务器,恶意输入./././etc/passwd,OK!,调用数据库查询,直接调用操作系统命令,通过数据库调用操作系统命令,Bubble,SQL Injection:字符串参数,/login.asp,管理员,管理员,程序员考虑的场景:Username:adminPassword:p$w0rdSELECT COUNT(*)FROM Users WHERE username=admin and password=p$w0rd,登录成功!,程序员未预料到的结果Username:admin OR 1=1-Password:1SELECT COUNT(*)FROM

40、UsersWHERE username=admin OR 1=1-and password=1,SQL Injection:字符串参数,/login.asp,攻击者,登录成功!,学员练习3Min,是SQL字符串变量的定界符,攻击关键通过定界符成功地将攻击者的意图注入到SQL语句中!通过注释保证SQL语句正确!,-是MS SQL的注释符,SQL Injection可能影响的系统,几乎所有的关系数据库系统和相应的SQL语言都面临SQL注入的潜在威胁MS SQL ServerOracleMySQLMS AccessPostgres,DB2,Sybase,Informix,等等各种后台语言/系统进行数

41、据库访问的方式ASP,JSP,PHP访问后台数据库的Perl和CGI脚本 XML,XSL 和XSQL VB,MFC,以及其他基于ODBC的工具和API等等,SQL Injection:数字参数,管理员,程序员考虑的场景:age:20SELECT name,age,locationFROM Users WHERE age20,程序员未预料到的结果age:1000000 union select name,age,password from usersSELECT name,age,locationFROM Users WHERE age999 union select name,age,pass

42、word from users,Fact:大多数程序员都注意到了的问题,他们用来代替用户输入的,从而防止字符串SQL注入;但很多人缺忽略了同样严重的数字注入问题。其防范方法是检查用户输入的数字是否合法。,Union暴库是常见的注入方法,Union语法要求前后两句SQL中Select的数据项类型和数量一致;这两句sql都符合string,int,string的模式,999是不可能符合的条件,这样union的结果就只剩第二句sql查询的内容,打开培训示范论坛,不用登录,直接查看用户属性,SQL Injection:Case,学员练习20Min,一个简单的测试显示这里可能存在注入漏洞。从错误看出是M

43、S SQL Server。从链接的形式id=?来看应该可能是数字型。因此报错是必然的。从报错来看,程序员把替换成了,SQL Injection:Step 1,学员练习20Min,用试验,发现出来了一部分数据,test用户名及其email地址,这证明至少有一条SQL正确运行。但是依然有SQL报错,很可能是后台有两条SQL语句都分别用到了id变量,而两语句使用的环境不同。,SQL Injection:Step 2,学员练习20Min,实际情况是第一条SQL是where id=?,第二条SQL是where(xx=xx)and(id=?)。因此要第二条不错,id只能用2)-,但这样第一条又会出错,难以

44、两全。从错误行号来看,第一句SQL位于84行,第二句SQL位于207行。,SQL Injection:Step 3,学员练习20Min,对于Select查询,几乎都可以用Union查询来暴库。Union要求前后两句对应的数据项数量相同,类型一致,因此需要首先检查第一句SQL的数据项数量。方法是用order by n,逐步增加n。,SQL Injection:Step 4,学员练习20Min,N=30正常,N=31错误!因此第一句SQL有30项。,SQL Injection:Step 5,学员练习20Min,由于union还要求类型一致,30项要逐个猜测类型是不现实的,因此用通配符null!准备

45、30个null。提示这个错误的原因说明前一句sql中有image类型,而union缺省是distinct的,要解决这个问题,使用union all即可。,SQL Injection:Step 6,学员练习20Min,使用Union All后,终于又看到了test的信息。,SQL Injection:Step 7,学员练习20Min,调整union第一句的条件为“不可能满足”,这样显示出来的始终是第二句,即使为null,SQL Injection:Step 8,学员练习20Min,这两个位置显示的是30项null中的某两个。因此可以利用这里来回显信息!,需要找到这两个数据位于30个null中的何

46、处。首先试验把第二个null换成字符型的null。错误提示不是告诉类型不匹配,而是说有语法错误。从而再次确认:开发者用替换了。,SQL Injection:Step 9,学员练习20Min,要写出不带的sql语句并不困难。如果您对SQL语法熟悉的话,就知道有一个char函数可供利用。,SQL Injection:Step 10,学员练习20Min,64是的ASCII码数值,10进制。成功回显,SQL Injection:Step 11,学员练习20Min,第二个null位置回显于此处,试出两个回显点的位置:,第四个null位置回显于此处,SQL Injection:Step 12,学员练习20

47、Min,把后面的sql替换成select null,password,null,.,null from users的形式,希望能显示一个密码,但是失败了。系统不存在users表。再猜测几个表发现依然失败。看来仅仅靠猜测是不行的。,不同的数据库都有系统表,可以利用来枚举表结构,在不同的DBMS枚举表结构MS SQLSELECT name FROM syscolumns WHERE id=(SELECT id FROM sysobjects WHERE name=表名)sp_columns tablename(这个存储过程可以列举表的字段名)MySQLshow columns from table

48、nameOracleSELECT*FROM all_tab_columnsWHERE table_name=表名,数据库系统表,OracleSYS.USER_OBJECTSSYS.TABSYS.USER_TEBLESSYS.USER_VIEWSSYS.ALL_TABLESSYS.USER_TAB_COLUMNSSYS.USER_CATALOGMySQLmysql.usermysql.hostmysql.db,MS AccessMsysACEsMsysObjectsMsysQueriesMsysRelationshipsMS SQL Serversysobjectssyscolumnssysty

49、pessysdatabases,SQL Injection:Step 13,学员练习20Min,查询一下是否有列名为pass(word)的表,首先简单测试一下:Select name from syscolumns where name like%p%结果提示错误!,原因:服务器自动进行URL解码。除了把%20转化为空格外,还会把+转化为空格。因此数据库查询变成了 like%p%,SQL Injection:Step 14,学员练习20Min,解决办法:用+的URL编码后的形式%2B,服务器解码后就成了+。结果如下:,有一列为parent_obj符合条件,SQL Injection:Step

50、15,学员练习20Min,下面的查询列出所有含有类似pass列的表名和列名:Select sysobjects.name,syscolumns.name from syscolumns,sysobjects where syscolumns.name like%pass%and sysobject.type=U and sysobject.id=syscolumns.id,系统中有一个FORUM_FORUM表,含有一列F_PASSWORD_NEW,SQL Injection:Step 16,学员练习20Min,但是我们对Forum_Forum这个表不感兴趣,所以查一下结果数目。使用count(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号