信息安全实验四:information-security
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的更多相关文章
- Oracle 实验四-七
shutdown immediateORA-01097: 无法在事务处理过程中关闭 - 请首先提交或回退 解决:先 "commit" 实验四 SQL Production :: C ...
- 20145204&20145212信息安全系统实验四报告
20145204信息安全设计基础实验四报告 博客链接:信息安全设计基础实验
- 科软-信息安全实验1-ICMP重定向
目录 一 前言 二 Talk is cheap, show me the code 三 效果演示 四 遇到的问题&解决 一 前言 文章不讲解理论知识哈,想学习理论知识的,认真听课
- php实验四
实验四 1.创建一个Person类,Person中包含三个属性name,age,wealth,分别设置为public,private,protected,再定义Person类的子类Student. 2 ...
- 实验四 简单的PV操作
实验四 简单的PV操作 专业 网络工程 姓名 方俊晖 学号 201406114309 一. 实验目的 1.掌握临界区的概念及临界区的设计原则: 2.掌握信号量的概念.PV操作的含义以 ...
- Java实验四
20145113 Java实验四 快捷键 之前没怎么记ISDEA的快捷键,但是熟练使用快捷键可以带来很多的便利,于是先开始学习一些常用的快捷键,就采用它默认的快捷键,这样后期就不会出现冲突,一些and ...
- 20145316&20145229实验四:驱动程序设计
20145316&20145229实验四:驱动程序设计 结对伙伴:20145316 许心远 博客链接:http://www.cnblogs.com/xxy745214935/p/6130871 ...
- 20145301&20145321&20145335实验四
20145301&20145321&20145335实验四 这次实验我的组员为:20145301赵嘉鑫.20145321曾子誉.20145335郝昊 实验内容详见:实验四
- 20145212 实验四《Andoid开发基础》
20145212 实验四<Andoid开发基础> 实验内容 安装Android Studio 运行安卓AVD模拟器 使用Android运行出模拟手机并显示自己的学号 实验过程 一.安装An ...
随机推荐
- 深入JS系列学习2
今天看和学习了深入理解JS系列2.3.4.5,更加明白了函数声明和表达式的区别,自执行函数和立即执行函数,js强大的原型链继承,js中对象的想过写法,modules模式等. 在ECMAScript中, ...
- cryptopp开源库的使用(二):base64加密
很多时候我只是优秀工具的使用者,优秀的工具用好了才能发挥作用 最近使用cryptopp的base64对压缩后的zip文件内容进行加密遇到了问题. 首先zip压缩没问题,可是最后得到的base64字符串 ...
- HDOJ(HDU) 2090 算菜价(简单水题、)
Problem Description 妈妈每天都要出去买菜,但是回来后,兜里的钱也懒得数一数,到底花了多少钱真是一笔糊涂帐.现在好了,作为好儿子(女儿)的你可以给她用程序算一下了,呵呵. Input ...
- Javascript 操作select控件大全(新增、修改、删除、选中、清空、判断存在等)
1判断select选项中 是否存在Value="paraValue"的Item 2向select选项中 加入一个Item 3从select选项中 删除一个Item 4删除selec ...
- migration vmware vms to openstack kvm 修改vmware windows scsi to ide
- Fork 一个仓库并同步
Fork 一个示例仓库 Fork 是对一个仓库的克隆.克隆一个仓库允许你自由试验各种改变,而不影响原始的项目. 一般来说,forks 被用于去更改别人的项目(贡献代码给已经开源的项目)或者使用别人的项 ...
- [置顶] 【Git入门之八】分支管理
原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12309385 1.分支又是神马? 我为什么说又是... 分支就是一个我们能通 ...
- 【Python排序搜索基本算法】之Dijkstra算法
Dijkstra算法和前一篇的Prim算法非常像,区别就在于Dijkstra算法向最短路径树(SPT)中添加顶点的时候,是按照ta与源点的距离顺序进行的.OSPF动态路由协议就是用的Dijkstra算 ...
- android中画文字的换行 办法(对于遇到canvas.drawText(String s )无法实现换行问题的解决)
在使用canvas.drawText()绘制文字的时候,发现,如果需要绘制的文字较长,需要换行,通过在文字中加上“\n"或者”\r\n"都无法实现换行,如果非要使用canvas.d ...
- 外键约束列并没有导致大量建筑指数library cache pin/library cache lock
外键约束列并没有导致大量建筑指数library cache pin/library cache lock 清除一个100大数据表超过一百万线,发现已经运行了几个小时: delete B001.T_B1 ...