大佬同学学校就是不一样。。都是实践类的作业做的累死了。。。
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; 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; 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和密码是否匹配即可。