信息系统安全 | 系统安全

网安 · 2023-06-01 · 303 人浏览
信息系统安全 | 系统安全

前言

编译server时,会报错

fatal error: bits/libc-header-start.h: 没有那个文件或目录

可以通过以下命令完善lib

sudo apt-get install gcc-multilib
sudo apt-get install g++-multilib

这个时候可以成功编译server了

Task 1

首先为 touchstone 程序添加 setuid root 权限,并执行

image-20230530194727543

在/tmp目录下创建test.txt文件,并将其 owner 改成 root

touch /tmp/test.txt
sudo chown root /tmp/test.txt

image-20230530195032693

接下来修改exploit代码,需要修正lib的地址和一些函数的偏移地址

image-20230530195610329

image-20230530195751269

其中frame pointer的值server已经给出(非常节约任务量)

image-20230530200053028

修改后的exploit代码如下(记得把ul_arg取消注释)

image-20230530201147068

运行python3 exploit-template.py 127.0.0.1 80,/tmp目录下的test.txt成功删除!

image-20230530201017054

Task 2

修改server程序,添加chroot支持(记得重新编译)

image-20230531095722163

使用chroot-setup.sh改变root directory为/jali,并在jali中启动server

chmod +x chroot-setup.sh chroot-copy.sh
sudo ./chroot-setup.sh
cd /jail
sudo ./touchstone

执行chroot-setup.sh脚本,注意这里如果系统选的中文,那么需要注释掉sh脚本中的开始的特权级判断

#!/bin/sh -x
# if id | grep -qv uid=0; then
#     echo "Must run setup as root"
#     exit 1
# fi

image-20230531093934005

image-20230531093719225

运行touchstone程序,并更新exploit程序中的lib基地址(因为用到的lib已经复制到了jail目录下,位置已经发生改变)和frame base

# 查看基地址
ps -ef | grep banksv
sudo gdb
attach xxxx # banksv's pid
info proc mappings

image-20230531095946332

image-20230531100028392

image-20230531100116305

再次执行攻击,发现无法删除/tmp下的test.txt文件

image-20230531100440153

Task 3

修改server源码,在提示的三个地方使用setresuid(1000,1000,1000)设置为普通用户权限.重新编译

image-20230531101445736

修改exploit代码中的framebase和基地址,执行攻击。发现无法删除root用户的test.txt文件

image-20230531103109322

Task 4

首先安装seccomp库

sudo apt install libseccomp-dev libseccomp2 seccomp
sudo apt-get install libseccomp-dev:i386

默认拒绝 显示允许

修改banksv.c代码如下,添加如下代码。实现系统调用的默认拒绝,以及对于unlink的显式允许。

void Seccomp(){
  // init seccomp
  scmp_filter_ctx ctx;
  // 默认拒绝
  ctx = seccomp_init(SCMP_ACT_KILL);
  // permit unlink
  int rc = seccomp_rule_add(ctx, SCMP_ACT_ALLOW,SCMP_SYS(unlink), 0);

  seccomp_load(ctx);
  seccomp_release(ctx);
}

修改Makefile中编译banksv的选项,添加-l seccomp

image-20230531110632605

重新编译后,可以看到bansv的动态库使用的是i386的文件,这个时候可以按照Task 1的思路重新确定exploit代码中的各个偏移

image-20230531110846541

image-20230531111402542

修改exploit脚本并运行,/tmp下的test.txt成功删除

image-20230531113027368

默认允许 显示拒绝

修改banksv.c代码如下。实现系统调用的默认允许,以及对于unlink的显式拒绝。

image-20230531114912951

再次使用exploit脚本进行攻击,发现无法删除test.txt

image-20230531120828308

Task 5

首先安装apparmor拓展

sudo apt install apparmor-utils

允许server,并使用aa-genprofbanksv生成profile

image-20230531150427398

image-20230531152128143

重新加载配置文件

sudo systemctl reload apparmor.service

通过aa-status指令可以看到刚刚给banksv创建的profile成功被加载

image-20230531152232711

执行exploit脚本,无法删除文件,并且通过dmesg打印系统消息可以看到banksv的行为被apparmorDENIED,无法删除test.txt

image-20230531151348653

系统安全 Lab2
Theme Jasmine by Kent Liao