理论学习
1. Web应用程序体系结构及其安全威胁
Web应用体系结构
Web 应用程序 (Web Application) :是 一种使用浏览器在互联网或企业内部网上进行访问操作的应用软件形态,通常以浏览器支持的语言(如 JavaScript 等脚本语言及 HTML 等渲染标记语言)所编写,或能够在浏览器控制的环境中运行(如 Java Applet),依赖于浏览器来对应用程序进行渲染与执行。
Web 应用的体系结构由浏览器作为“瘦” 客户端主要完成数据显示与展示内容的渲染(render)功能;而由功能强大的“胖”服务器负负完成士哎业务的计算处理;两者之间通过因特网或内联网上 HTTP/HTTPS 应用层协议的请求与应答进行通信。
-
浏览器(Browser)
标准的Web 客户端就是我们所熟知的浏览器,如 IE 、Firefox 、Chrome 等,它们都使用 HTTP/HTTPS 协议、HTML 语言和Web 服务器进行交互,获取 Web 服务器上的信息和应用服务。 -
Web 服务器 (Web Server)
Web 服务器软件通常被简单地描述为 HTTP 守护程序,接收Web 客户端对资源的请求,在这些请求上执行一些基本的解析处理以确定资源的存在,然后将它传送给Web 应用程序来执行,待 Web 应用程序执行完逻辑并返回响应时,Web 服务器再将这个响应返回给 Web 客户端,在浏览器上进行本地执行、渲染和展示。
-
Web 应用程序(Web Application)
负责服务器端的业务逻辑处理,最为常见的三层体系结构:表示层:接受Web客户端的输入并显示结果;业务逻辑层:从表示层接受输入并完成某些工作,需要数据层的协作,再将结果送回表示层;数据层:以数据库或本地文件的形式,提供非易失的信息存储。 -
数据库(Database)
数据库有时也被称为“后台”,是 Web 应用存储数据的地方,数据层也作为 Web 应用程序多级结构中的最后一层。 -
传输协议 HTTP/HTTPS
浏览器和由 Web 服务器、Web 应用程序和数据库所构成的 Web 站点之间的通信传输
协议是 HTTP/HTTPS 协议。
Web 应用安全威胁
-
针对浏览器和终端用户的 Web 浏览安全威胁:具体包括以浏览器渗透攻击为核心的网页木马,Phishing 网站钓鱼等。
-
针对传输网络的网络协议安全威胁:如针对 HTTP 明文传输协议的敏感信息监听,在网络层、传输层和应用层都存在的假冒身份攻击,以及拒绝服务攻击等。
-
系统层安全威胁:Web 站点的宿主操作系统,如Windows Server、 Linux等,存在 着远程渗透攻击和本地渗透攻击威胁
-
Web 服务器软件安全威胁:Web 服务器软件如 IIS、Apache作为一种典型的网络服
务,也不叫避免地存在着安全漏洞与弱点。 -
Web应用程序安全威胁:程序员在使用 ASP、PHP 等脚本编程语言实现 Web 应用
程序时,由于缺乏安全意识或有着不良的编程习惯,最终导致 Web 应用程序出现安
全漏洞,从而被攻击者渗透利用,包括 SQL 注入攻击、XSS 跨站脚本攻击等。 -
Web数据安全威胁:Web 站点中在 Web 应用程序后台存储的关键数据内容, 以及
Web客户输入的数据内容, 存在浒被窃取、篡改及输入不良信息等威胁。
Web 应用安全攻防技术概述
Web 应用的信息收集
Web服务器端口与其他开放服攻击也需要首先进行信息情报的搜集,对目标WEbu应用服务进行发现与剖析,针对WEB应用的主要收集内容包括服务器域名、IP地址和虚拟IP地址、务、Web站点类型和版本、Web应用程序类型及版本、Web服务器及其存在的安全漏洞信息等。
-
手工审查 Web 应用程序结构与源代码:
- 静态和动态生成的贞面
- 目录结构
- 辅助性文件
- 输入表单
- 查询参数字符串
-
自动下载与镜像 Web 站点页面:提升手动审查的自动化程度。
-
使用 Google Hacking 技术审查与探测 Web 应用程序:Google Hacking 技术特指使用 Google 搜索引擎或其他的 Google 应用,在 Web 站点中的配置、计算机代码及包含数据中,寻找安全漏洞与敏感信息的计算机黑客技术。
- Web 应用程序安全评估与漏洞检测:针对Web应用程序的攻击主要集中在身份验证、会话管理、数据库操作、输入数据合法/合理性检查。安全辅助分析工具主要包括浏览器插件、免费工具集、商业Web应用安全评估系统和漏洞扫描器。
攻击 Web 服务器软件
-
数据驱动的远程代码执行安全漏洞:作为一种典型的网络服务守护进程, Web 服务器软件包也面临着缓冲区溢出、不安全指针、格式化字符串等一系列数据驱动安全漏洞的远程渗透攻击,这类攻击往往能够让攻击者在 Web 服务器上直接获得远程代码执行的权利,并以相当高的权限执行任意命令。
-
服务器功能扩展模块漏洞:扩展模块往往较 Web 服务器软件的编写质量要差许多,因此也就存在更多的安全漏洞。
-
样本文件安全漏洞:Web应用服务器包含的样板脚本和代码示例存在漏洞。
-
源代码泄露:源代码泄漏漏洞让渗透测试人员能够查看到没有防护措施Web服务器上的应用程序源代码。
-
资源解析攻击:Web服务器软件在处理资源请求时,需要将同一资源的不同表示方式解析为标准化名称,这一过程被称为资源解析。这里面缺乏对输入合法性与合理性验证的处理
攻击 Web 应用程序
Web应用程序安全威胁类型包括:
- 针对认证机制的攻击:
针对用来确认用户、服务或应用身份机制的攻击手段;
-
授权机制的攻击:
针对用来确定用户、服务或应用是否具有执行请求动作必须权限机制的攻击手段; -
客户端攻击:扰乱或渗透攻击web站点客户端用户的攻击手段;
-
命令执行攻击:在web站点执行远程命令的攻击手段;
-
信息暴露:
获取web站点具体系统信息的攻击手段; -
逻辑攻击:扰乱或渗透攻击web应用逻辑流程的攻击手段。
攻击 Web 数据内容
Web 站点除了通过服务器软什和应用程序中存在安全漏洞和弱点遭受攻击之外,还面临着针对敏感数据内容的攻击威胁,具体包括安全敏感数据泄漏、网站内容遭受篡改,以及不良信息内容上传。
安全敏感数据泄露:
web服务器存在目录遍历漏洞或不安全的目录文件枚举配置,在不经意间泄露;
利用web服务器(通常可能同时是FTP服务器)的upload、incoming等上传目录临时中转文件时泄露;
由于缺乏安全意识,在web站点公开的文档资料中包含个人隐私、企业秘密、甚至国家秘密信息。
-
网站篡改(Website Defacement): 是一类较早出现且流行已久的网站攻击形式,一般是网络骇客们所为,在利用特定攻击手段入侵网站后,将网站页面内容进行替换,从而宣示入侵成功或表达攻击者的某种观点诉求。一般不具备破坏性
不良信息内容上传:Web站点被攻击者入侵和控制之后,以及一些允许用户上传内容的论坛、博客类网站,可能遭受不良信息内容上传的威胁。
Web 应用安全防范措施
-
Web 站点网络传输安全设防措施:使用HTTPS、SSH、SFTP等安全协议。关键的web服务器,设置静态绑定MAC-IP映射,在服务网段内进行APR等各类欺骗攻击的检测与MAC封禁机制,在网关位置部署防火墙与入侵检测系统对WEB服务器实施保护和安全检测,采用冗余等机制要应对拒绝服务攻击。
-
Web 站点操作系统及服务安全设防措施:对 Web 站点的操作系统与服务器软件进行及时的补丁更新;对 Web 站点服务器的操作系统及各种开放服务进行远程安全漏洞扫描;采用提升系统与服务安全性的一般性设防措施
-
Web 应用程序安全设防措施:在设计时就应该谨慎考虑
Web 站点数据安全设防措施:提高网站内容维护人员的数据安全意识,对维护网站的数据安全实施日常监测和防护。
SQL注入
代码注入攻击通过利用 Web 应用程序的输入验证个不完善漏洞,使得 Web 应用程序执行由攻击者所注入的恶意指令和代码,造成敏感信县泄漏、权限提升或对系统的未授权访问等危害后果。
根据攻击目标分类:
-
恶意读取、修改与操作数据库的SQL注入攻击;
-
在WEb服务器端安装、执行Webshell等恶意脚本的PHP注入或ASP注入攻击;
-
在Web服务器端恶意执行操作系统命令的shell注入攻击;
-
其他多种多样的注入攻击,如LDAP注入、邮件命令注入、空字节注入、SSL注入、Xpath注入、XML注入、Xquery注入等;
SQL 注入攻击原理
利用 Web 应用程序的数据层存在的输入验证不完善性安全漏洞实施的代码注入攻击技术。由于用户输入没有被正确地过滤以消除SQL语言中的转义字符,或没有进行严格的类型判断,使得用户可以输入并执行一些非预期的SQL指令代码。如’、“、‘、;、%、#、--、——等
永真式;未进行类型约束检查;
SQL注入攻击步骤和过程
-
发现SQL注入点:
-
存在http://SITE/xxx.asp?some_rec=yyy的动态网页时,当some_rec字段为整形参数,通过不同的三种字符串可判断该动态页面是否存在SQL注入点。同理也可以对字符型做,下面展示整型情况。
- yyy修改为yyy' 造成SQL出错,动态页面返回错误提示信息。
- yyy修改为yyy and 1=1 不对查询条件造成任何影响,返回正常页面。
- yyy修改为yyy and 1=2 查询不到任何信息。
-
判断后台数据库类型
-
利用数据库服务器的系统变量。
-
利用数据库服务器的系统表进行判断
-
-
利用SQL注入进行后台口令拆解
-
猜解后台口令表表名。
-
猜解字段名。
-
猜解字段值: 二分法逼近。口令可能为MD5散列后的密文
-
上传ASP后门,得到默认账户权限:在破解得到Web应用管理员用户名和口令后,通过找出后台管理界面登录,攻击者就可以通过后台管理界面通常所提供的的下载上传文件等功能上传ASP后门,对Web站点进行远程控制。
-
本地特权提升
-
利用数据库扩展存储过程执行shell命令:通过SQL注入点执行相应的扩展存储过程。
-
SQL注入攻击工具
Wposion 能够在动态 Web 文档中找出 SQL 注入漏洞;wieliekoek.pl 能够以并以网站镜像工具生成的输出为输入,找出含有表单页面,允许在配置文件中对注入字符串进行修改,进行 SQL 注入漏洞探测;SPIKE Proxy 工具允许使用者对待注入的字符串进行定制,并执行自动化的 SQL 注入测试;SPI Toolkit 工具包中也包含了一个名叫"SQL Injector" 的自动化 SQL 注入测试工具。
SQL 注入攻击防范措施
大多数的 SQL 注入攻击都是利用 Web 应用程序中对用户输入没有进行严格的转义字
符过滤和类型检查的安全漏洞,因此对 SQL 注入攻击的防范措施主要依靠对用户输入中特殊字符严格的输入验证机制,及对输入参数类型与长度的严格检查与限制机制。
- 使用类型安全 (type-safe) 的参数编码机制
- 凡是来自外部的用户输入,必须进行完备检查
- 将动态 SQL 语句替换为存储过程、 预编译 SQL 或 ADO 命令对象
- 加强 SQL 数据库服务器的配置与连接
XSS 跨站脚本攻击
XSS 跨站脚本攻击的最终目标不是提供服务的 Web 应用程序,而是使用 Web 应用程序的用户。XSS 跨站脚本漏洞存在于 Web 应用程序中,使得攻击者可以在 Web 页面中插入恶意的 HTML 或 JavaScript 代码,当用户浏览该网页时,客户端浏览器就会解析和执行这些插入的代码,从而造成获取用户敏感信息、客户端渗透攻击等危害后果。
XSS 攻击技术原理
与代码注入类似,XSS 攻击的根源同样是 Web 应用程序对用户输入内容的安全验证与 过滤不够完善,在许多流行的 Web 论坛、博客、留言本及其他允许用户交互的 Web 应用程序中,用户提交内容中可以包含 HTML、 JavaScript 及其他脚本代码,而一 旦 Web 应用程序没有对这些输入的合法性进行有效检查与过滤,就很有可能让这些恶意代码逻辑包含在服务器动态产生或更新的网页中。用户在浏览网页时,客户端浏览器会解析这些插入的代码,造成获取用户敏感信息、客户端渗透攻击等后果。
xss 攻击类型
安全业界普遍将其分为两种主要的 XSS 漏洞类型,即持久性 XSS 漏洞(Persistent Cross Sile Scripting)和非持久性 XSS 漏洞(Non-persistent Cross Site Scripting),利用这两类漏洞的攻击也被称为持久性 XSS 攻击与非持久性 XSS 攻击。
持久性漏洞:持久性 XSS 漏洞是危害最为严重的 XSS 漏洞,它通常出现于一些可以将用户输入持久性地保有在 Web 服务器端,并在一些“正常”页面中持续性地显示,从而能够影响所有访问这些页而的其他用户,因此该类 XSS 漏洞也被称作存储性(stored)XSS 漏洞。
非持久性漏洞:非持久性 XSS 漏洞(也被称为反射 XSS 漏洞)则是最为普遍的类型,当 Web 浏览器在 HTTP 请求参数或 HTML 提交表单中提供的数据,被立即由服务器端脚本使用产生一个提供给该用户的结果页面,而缺乏恰当的请求数据安全验证与过滤,那么就很可能存在着非持久性的 XSS 漏洞。
针对这一非持久性 XSS 漏洞的具体攻击包括如下几个步骤:
-
攻击者构造一个包含恶意脚本的bank.com登录请求连接,通过email等方式将该攻击发送给其他用户。
-
用户点击连接后会将恶意连接中包含的恶意脚本当做用户名参数提交给.
-
bank.com登陆处理页面,网站将会在反馈的欢迎页面中包含恶意客户端脚本。
-
攻击者的恶意客户端在受害者浏览器中执行,会驱动浏览器发送会话令牌。
-
攻击者获得用户会话令牌后,可以劫持用户会话,伪造用户登录进一步实施攻击。
XSS 攻击防范措施
XSS 跨站脚本攻击是由于Web 应用程序未对用户输入进行严格审查与过滤所引起的,但是恶意脚本执行却是在客户端的浏览器上,危害的也是客户端的安全。因此,对 XSS 跨站脚本的防范分为服务器端和客户端两个方面。
服务器端防范措施:与其他输入验证不完备类型安全漏洞类似,XSS 漏洞的首要防范措施是对所有来自外部的用户输入进行完备检查,以 “ 限制、 拒绝、 净化” 的思路来进行严格的安全过滤。
-
输入验证:如果 Web 应用程序在某个位置收到的用户提交数据将来有可能被复制到响应页面中,Web 应用程序应根据这种情形对这些数据执行尽可能严格的验证与过滤。
-
输出净化:如果 Web 应用程序将用户提交数据复制到响应页而中,那么 Web 应用程序应对这些据进行 HTML 编码,以净化可能的恶意字符。
-
消除危险的输入点:Web 应用程序页面中有一些位置,在这里插入用户提交的输入就会造成极大的风险;因此,开发者应力求寻找其他方法执行必要的功能。
客户端防范措施:跨站脚本最终是在客户端浏览器上执行的,因此对抗 XSS 攻击需提升浏览器的安全设置,如提高浏览器访问非受信网站时的安全等级、关闭 Cookie 功能或设置 Cookie 只读等
理论实践
实践一
参考实验指导书,先配置环境
运行命令 %sudo service apache2 start启动,然后配置 DNS:
PHP 提供了自动对抗 SQL 注入的机制,被称为 magic quote,我们需要关闭它。
- 找到/etc/php5/apache2/php.ini
- 找到 magic_quotes_gpc = On 这一行
- 改为 magic_quotes_gpc = Off
- 重启 Apache:”sudo service apache2
restart”
使用的SQL注入方式刚开始没看懂,后来看了别人博客才知道Ted'#是利用了在登录用户名输入框注入SQL来将整条SQL查询语句中后面的登录口令校验给注释掉了,所以只需要输入正确的用户名即可登录,即此时的sql语句变成了
SELECTuser_id,username,user_password,user_active,user_level,user_login_tries,user_last_login_try FROMUSERS_TABLE WHEREusername=‟Ted‟ #ANDuser_password=‟md5($password)‟;
利用注释方式注释掉对登录口令的校验,很容易就登录了该系统。
首先是tab,然后alice实践
成功以用户名Ted登录系统以后,就可以进行修改操作,点击profile按钮,即可进入修改信息表单,首先尝试着随便填写一些东西,然后点提交,无特殊字符,这次是成功的
同样登入alice,这次我在表单里输入了一些特殊字符,所以提交不成功,给出了反馈信息,分析可知提交表单使用了一条Update语句,并且是根据user_id来进行修改的
这里要求修改别人的信息,那么可以尝试着在表单里注入SQL语句来修改最后面的where user_id =语句,将id改为其他编号,即把表单里的修改信息更新到数据库里id为其他编号的那条数据
明白了SQL注入破解登录的原理,这里就简单多了,在表单最后一个提交的输入框里输入该项的值,并加上'where user_id =6#,即可将修改信息更新到用户id为6的账户上
修改成功后,查看用户列表,用户ted的信息已经被修改
实践二
当登入账户以后,添加新的消息,输入如下信息,并提交,其中即为执行弹窗行为的脚本命令,这里把本来作为文档显示的内容当做了命令执行,当查看该消息时,script里的动作行为被执行,显示了弹窗信息
下一步是获取页面cookie,重新添加一个消息,并在内容中加入script脚本信息,获取cookie并弹窗显示出来,其中即为执行弹窗获取cookie的脚本命令
继续码字中loading。。。。
使用Live HTTP HEADER抓取到的网络请求里的那样,尝试修改POST content里的message信息,然后再次提交,观察用户发布的信息是否有变化,果然成功了,原来的用户信息是God is a girl,现在被篡改成了God is a Boy,这里的实现原理大概就是使用劫持Cookie的方式来修改提交的信息,并进行二次提交(重放),来实现篡改原来的用户信息。
使用Live HTTP HEADER就实现了篡改用户信息的攻击,然后尝试着使用java编写POST请求程序来实现篡改,源码如下,其中Cookie和String Data信息必须要根据LIVE HTTP HEADER抓取到的POST信息来进行填充,并修改其中的message信息,即用户发布的信息内容,然后编译运行java程序
执行javac HTTPSimpleForge.java,然后再执行java HTTPSimpleForge,查看网页信息是否被修改,由于编码问题,在Linux中执行会显示乱码,执行完打开网页,已经被修改了。
假冒用户发布新消息,首先用Live HTTP HEADER监听发布信息的POST请求信息,如下图所示,注意和之前的修改用户信息作区分,这里的mode变为了newtopic,而之前的是editpost
同样先使用Live HTTP HEADER对获取的cookie进行修改内容,然后重新发送,观察网页新增了一条用户消息,这是一条新的消息,并不是修改了之前发布的信息
接下来使用同样的办法,将对应的cookie和string data信息填写到java程序里,执行也起到了同样的效果
做崩了,用户登陆不进去xss的那个站点了,,,
问题
刚开始很多的命令执行出来都不知道原理,因此查阅了一些数据库的知识;
实践刚进行时我参考孙启龙进行,后来发现版本问题导致实验环境不行,就放弃了,按照实验指导书进行,在实践中也出了不少问题。
总结
通过学习与实践,对web安全技术和安全意识有了一些了解,特比时后面的SQL注入涉及数据库,虽然原来学过,但在实践中也是一种挑战,通过理论与实践相结合的方式,让我对web安全攻防有了更深刻的了解。