博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
信息安全实验四:information-security
阅读量:6283 次
发布时间:2019-06-22

本文共 4105 字,大约阅读时间需要 13 分钟。

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

  • 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
    126) test[i]='~'; } test[i]='\0'; } void unkey(char *test) { int count=strlen(test); int i; for(i=0;i

转载于:https://www.cnblogs.com/ailx10/p/5251649.html

你可能感兴趣的文章
Unbuntu安装遭遇 vmware上的Easy install模式
查看>>
几个常用的ASP木马
查看>>
python分析postfix邮件日志的状态
查看>>
Mysql-5.6.x多实例配置
查看>>
psutil
查看>>
在git@osc上托管自己的代码
查看>>
机器学习算法:朴素贝叶斯
查看>>
小五思科技术学习笔记之扩展访问列表
查看>>
使用Python脚本检验文件系统数据完整性
查看>>
使用MDT部署Windows Server 2003 R2
查看>>
Redhat as5安装Mysql5.0.28
查看>>
通过TMG发布ActiveSync
查看>>
Web服务器的配置与管理(4) 配置访问权限和安全
查看>>
吉林出差所见、所闻、所感
查看>>
RHEL7修改root用户密码
查看>>
mysqldump导出 timestamp类型数据 时区偏差8小时
查看>>
我的友情链接
查看>>
中小型企业如ERP选型四大标准
查看>>
笔记——quota磁盘配额
查看>>
索引表批量数据装载
查看>>