网络安全大作业6-cookie欺骗攻击

大佬同学学校就是不一样。。都是实践类的作业做的累死了。。。

cookie欺骗案例 – 博客园

首先了解到博客园存在Cookie欺骗的位置,那么首先我们尝试进入博客园并且登陆,然后我们查看cookie的数值:

上面的红框框里面的就是记录了登陆状态的cookie名字和其对应value值。我们记录下这两个值

1
2
.CNBlogsCookie
88DD4356D8C3480BBBAC57AC480166D9C5E1611C51FB67BDEC623F21676E62F9E6B9660FFD118625E0D5C8B58C5365F8D6E5D5ABA3B3EF2B9099DEC53CE62E0579A76CE52C312254E39D8C76063A0D3F3FDDD102

然后我们此时erase当前cookie,刷新界面,发现没有进行登陆:

之后我们回到刚刚的界面上,重新输入我们刚刚得到的cookie:

刷新页面后,成功登入blog:

cookie欺骗模拟

打开win7,设置IIS。
在控制面板中找到IIS的相关设置,打开IIS的基本功能,然后在管理工具中找到IIS的相关配置。
将IIS中编辑网站绑定的位置增加自己虚拟机的IP和端口,从而可以在本机对其进行访问:

然后。。。开始编写ASP的简单网页(我擦这个实验真是搞人。。。)

代码如下:

login.aspx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<%@ Page Language="C#" Debug="True" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>登录界面</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="用户"></asp:Label>
<asp:TextBox ID="labuser" runat="server"></asp:TextBox><br />
<asp:Label ID="Label2" runat="server" Text="密码"></asp:Label>
<asp:TextBox ID="labpwd" runat="server" TextMode="Password" AutoCompleteType="BusinessZipCode" Width="145px"></asp:TextBox><br />
<asp:Button ID="allow" runat="server" OnClick="allow_Click" Text="确定" />
<br />
<%
string visitname;
try
{
visitname = Request.Cookies["User"].Value;
if (visitname != "")
Label3.Text = visitname + "你已经登录过了";
}
catch{
Label3.Text = "";
}
%>
<asp:Label ID="Label3" runat="server"></asp:Label><br />
</div>
</form>
</body>
</html>

login.aspx.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
public partial class Login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void allow_Click(object sender, EventArgs e)
{
string username = labuser.Text;
string password = labpwd.Text;
if((labuser.Text=="")||(labpwd.Text==""))
{
Label3.Text="用户名与密码不能为空!";
}
else
{
try
{
if(labpwd.Text=="llh111")
{
string curuser=labuser.Text;
Label3.Text="登录成功,欢迎你,llh!";
Response.Cookies.Add(new HttpCookie("User",username));
Response.Cookies.Add(new HttpCookie("Password",labpwd.Text));
int CarCookieExpires = 30; //Expires
Response.Cookies["Password"].Expires = DateTime.Now.AddDays(CarCookieExpires);
Response.Cookies["User"].Expires = DateTime.Now.AddDays(CarCookieExpires);
}
else if (labpwd.Text=="linlihui36+"){
string curuser=labuser.Text;
Label3.Text="登录成功,欢迎你,linlihui!";
Response.Cookies.Add(new HttpCookie("User",username));
Response.Cookies.Add(new HttpCookie("Password",labpwd.Text));
int CarCookieExpires = 30; //Expires
Response.Cookies["Password"].Expires = DateTime.Now.AddDays(CarCookieExpires);
Response.Cookies["User"].Expires = DateTime.Now.AddDays(CarCookieExpires);
}
else
{
Label3.Text="用户名或者密码错误!";
}
}
catch
{
Label3.Text="Sorry!你输入的用户名不存在!";
}
}
}
}

简直多坑。。。现在才知道原来

1
<%@ Page Language="C#" Debug="True" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" %>

这句话的意思是,本页面中的嵌入脚本语言为C#,然后与文件Login.aspx.cs交互
网络拓扑图大概就是:

页面逻辑为:

下面是运行截图:
初次登陆的时候,没有提示内容,要求登陆。密码为固定的llh111:

登陆完成后,再次登陆,会提示当前用户已经登陆:

然后,我们使用插件修改了cookies的内容

此时刷新界面:

成功伪造登陆。
与此同时,在服务器端,防火墙并没有做出反应,说明此伪造能够绕过最基本的防火墙:

防御方法: 把密码同时存入cookies,然后在cookie验证时候,同时验证对应的username和密码是否匹配即可。