title: authentication

date: 2016-01-13 14:33:22

categories: information-security

tags: authentication

  • Exercise1
  • There are many bugs and vulnerabilities in the current utility for transferring money.

    Find as many bugs as you can. For now, just focus on bugs that an adversary can trigger

    by giving unanticipated values to the transfer page.

    Think carefully about what kinds of inputs an attacker might provide,

    and try them out by entering them on the transfer page.

    Please write down detail descriptions of your observation in bugs.txt.

    (You should find at least 4 different bugs.)
     这个网站存在以下漏洞:
    (1)没有判断转账金额和自己余额的大小
    (2)没有判断转账金额是否为负数
    (3)没有判断被转入用户的余额上界
    (4)没有判断转出用户的余额下界
    (5)没有判断被转账用户是否存在

  • Exercise2
  • Fix as many bugs as you can
	在handle.c文件中的handlePostTransfer函数中
我们添加一条判断输入是否合法的语句
来控制是否修改数据库里面的金额。
if(money<0 || !Db_checkUser(to) || strcmp(from, to) == 0
||(money > fromBalace) || (toBalace + money <0))
{
handlePostLogin (fd, from, 0, 0);
return;
}
实验结果显示:能成功阻止E1中的漏洞。

  • Exercise3

  • Read the source code of the login web page (in your browser),and the server's source code.

    Make sure that you make it clear that how the server identify who is transferring.

     首先,一个新的用户登录
    server将会接收fd 发送给httpd进程
    然后httpd进程开始发分析客户请求
    GET请求将会发送给filesv进程
    POST请求将会发给banksv进程 在交易之前
    banksv进程处理request请求的body部分
    得到交易金额、人员等信息
    然后开始更新数据库 我们可以发送POST请求
    伪装request请求的body部分
    就可以达到偷偷转账的目的

  • Exercise4

  • Try to construct a POST request about the money transferring,

    which steal money from some account if you know the victim’s account.

    You can use browser.c or some tools, such as firebug to construct the request.

      Char *req="POST / HTTP/1.1\r\nHost: 127.0.0.1\r\n
    Content-Type:
    application/x-www-form-urlencoded\r\n
    Content-Length:
    72\r\n\r\n
    transfer_from=a&transfer_to=b&transfer_money=20&submit_transfer=Transfer\r\n";

  • Exercise5
	用户登录时候生成cookie,
用户操作账户金额时验证cookie的机制来保护信息不被恶意操作,
为了每次cookie的值都不是固定的,我们可以通过登录时间和用户名的组合产生cookie。
产生cookie之后,服务器发送cookie给浏览器,
进行转账交易之前,将post请求中的cookie与服务器中的cookie做比较,
相同则进行转账,不同则拒绝转账。
现在我们进行转账的时候,抓包工具就可以抓取到cookie字段了
其中:
服务器在用户登录时候产生cookie并发送至浏览器:
productCookie(name,logintime);
strcpy(cookieGet,cookie);
write(fd,cookieGet,strlen(cookieGet));
从浏览器中获取cookie:
Header_t head=tree->headers;
while(head)
{
if(strcmp(head->key,"Cookie:")==0)
strcat(cookieGet,head->value);
head=head->next;
}
验证请求:
if(validCookie(cookieGet,from))
{
handlePostLogin(fd,from,0,0);
return;
}
生成cookie函数:
char cookie[100]="Set-cookie:mycookie=";
static char cookieGet[100]="";
//product cookie
void productCookie(char *name,char *time)
{
int len=strlen(time);
char cookie1[100]="\0";
char cookie2[200]="\0";
strcat(cookie2,name);
strcat(cookie2,"#");
strncpy(cookie1,time,len-1);
strcat(cookie2,cookie1);
strcat(cookie,cookie2);
strcat(cookie,";path=/;domain=127.0.0.1\r\n\r\n");
}
验证cookie函数:
int validCookie(char *parameter,char *name)
{
char cookie1[100]="";
char cookie2[100]="";
int i=0;
int k=0;
int flag=0;
if(parameter[0]=='\0')
return 1;
for(;i<strlen(parameter);i++)
{
if(flag)
{
cookie1[k]=parameter[i];
k++;
}
if(parameter[i]=='=')
flag=1;
}
i=0;
while(cookie1[i]=='#'&&i<strlen(cookie1))
{
cookie2[i]=cookie1[i];
i++;
}
return strcmp(cookie2,name);
}

  • Exercise6
  • Using the Wireshark to steal the cookie,

    and then use the cookie to make fake POST request.

    Send the request to the server and transfer some one else's money.

    • 抓包偷cookie
     char *req="POST /index.html HTTP/1.1\r\n
    Host: 127.0.0.1\r\n
    User-Agent: Mozilla/5.0 Firefox/43.0\r\n
    Cookie: mycookie=a#Sun Dec 27 22:20:52 2015\r\n
    Connection: keep-alive\r\n
    Content-Type: application/x-www-form-urlencoded\r\n
    Content-Length: 72\r\n
    transfer_from=a&transfer_to=b&transfer_money=20&submit_transfer=Transfer\r\n";

  • Exercise7
  • Encrypt the cookie
     Cookie加密:我们的cookie是明文传输的,现在通过简单的加密函数,让其以密文的形式在网络中传输。
    生成cookie的时候加密:
    key(cookie2);
    验证cookie的时候解密:
    unkey(cookie1);
    void key(char *test)
    {
    int i;
    int count=strlen(test);
    for(i=0;i<count;i++)
    {
    test[i]=test[i]+i+5;
    if((int)test[i]>126)
    test[i]='~';
    }
    test[i]='\0';
    } void unkey(char *test)
    {
    int count=strlen(test);
    int i;
    for(i=0;i<count;i++)
    test[i]=test[i]-i-5;
    test[i]='\0';
    }

信息安全实验四:information-security的更多相关文章

  1. Oracle 实验四-七

    shutdown immediateORA-01097: 无法在事务处理过程中关闭 - 请首先提交或回退 解决:先 "commit" 实验四 SQL Production :: C ...

  2. 20145204&20145212信息安全系统实验四报告

    20145204信息安全设计基础实验四报告 博客链接:信息安全设计基础实验

  3. 科软-信息安全实验1-ICMP重定向

    目录 一 前言 二 Talk is cheap, show me the code 三 效果演示 四 遇到的问题&解决 一 前言 文章不讲解理论知识哈,想学习理论知识的,认真听课

  4. php实验四

    实验四 1.创建一个Person类,Person中包含三个属性name,age,wealth,分别设置为public,private,protected,再定义Person类的子类Student. 2 ...

  5. 实验四 简单的PV操作

    实验四 简单的PV操作 专业 网络工程   姓名 方俊晖 学号 201406114309 一.        实验目的 1.掌握临界区的概念及临界区的设计原则: 2.掌握信号量的概念.PV操作的含义以 ...

  6. Java实验四

    20145113 Java实验四 快捷键 之前没怎么记ISDEA的快捷键,但是熟练使用快捷键可以带来很多的便利,于是先开始学习一些常用的快捷键,就采用它默认的快捷键,这样后期就不会出现冲突,一些and ...

  7. 20145316&20145229实验四:驱动程序设计

    20145316&20145229实验四:驱动程序设计 结对伙伴:20145316 许心远 博客链接:http://www.cnblogs.com/xxy745214935/p/6130871 ...

  8. 20145301&20145321&20145335实验四

    20145301&20145321&20145335实验四 这次实验我的组员为:20145301赵嘉鑫.20145321曾子誉.20145335郝昊 实验内容详见:实验四

  9. 20145212 实验四《Andoid开发基础》

    20145212 实验四<Andoid开发基础> 实验内容 安装Android Studio 运行安卓AVD模拟器 使用Android运行出模拟手机并显示自己的学号 实验过程 一.安装An ...

随机推荐

  1. [Java Concurrent] 多线程合作 wait / notifyAll 的简单案例

    本案例描述的是,给一辆汽车打蜡.抛光的场景. Car 是一辆被打蜡抛光的汽车,扮演共享资源的角色. WaxOnCommand 负责给汽车打蜡,打蜡时需要独占整部车,一次打一部分蜡,等待抛光,然后再打一 ...

  2. [Design Pattern] Command Pattern 命令模式

    发现公司的代码好像有用到 Command Pattern,回顾重温下. Command Pattern 的类图结构如下: 参考 <Head First Design Patterns(英文版)& ...

  3. Robot Framework web测试demo

    1.Open RIDE: ride.py 2.New Project: "File" -> "New Project" ,click "OK&q ...

  4. HBase技术介绍

    HBase简介 HBase - Hadoop Database,是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群. HB ...

  5. 从APP消息推送所理解的观察者模式

    #1.什么是观察者模式? 观察者模式=(出版者+订阅者)模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能 ...

  6. Unity3D NGUI UIPlayTween控件(一)动态打开关闭窗口

    利用NGUI自带的脚本控件实现按钮点击窗口滑动出现与隐藏. 创建界面 首先建立如下图的三个BUtton与三个Panel 绑定脚本 然后在每个Button上添加UIPlayTween脚本,在Intera ...

  7. Citrix 服务器虚拟化之十三 Xenserver虚拟机内存优化与性能监控

    Citrix 服务器虚拟化之十三   Xenserver虚拟机内存优化与性能监控 XenServer的DMC通过自动调节运行的虚拟机的内存,每个VM分配给指定的最小和最大内存值之间,以保证性能并允许每 ...

  8. 构建基于Javascript的移动web CMS——加入jQuery插件

    当看到墨颀 CMS的菜单,变成一个工具栏的时候.变认为这一切有了意义.于是就继续看看这样一个CMS的边栏是怎么组成的. RequireJS与jQuery 插件演示样例 一个简单的组合示比例如以下所看到 ...

  9. [Angular 2] Rendering an Observable Date with the Async and Date Pipes

    Instead of simply pushing numbers on a timer into the template, now we'll move on to pushing actual ...

  10. iText

    iText是著名的开放项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转化为PDF文件. 官方网站:http://itext ...