漏洞分析Side Channel Attack Lab(自用,记录)

本文档介绍了如何通过边信道攻击(Side Channel Attack)获取一个root shell的过程。实验目的是设计攻击代码,利用sidechannel.c中的漏洞,通过比较不同密码输入时程序的执行时间差异来逐个猜出密码。实验原理在于,正确和错误密码的执行时间不同。攻击思路是通过循环尝试不同字符,记录用时,从而确定每个密码字符。在攻击过程中,需要编译并执行攻击代码attack.c,最终获得root权限。
摘要由CSDN通过智能技术生成

1 实验介绍

1.1 实验目的

通过使用所提供的漏洞代码sidechannel.c,设计一个攻击代码,利用边信道攻击的方式获取正确的密码,并执行后面的shellcode 来获取一个 root shell,其中的 s.pass为root只读的密码文件。

1.2 具体场景

有人留了一个root所有suid程序为后门,和一个root只读的s.pass文件,密码正确就能执行输入的shellcode,普通用户只能看到s.pass大小为19个字节,也能猜测其中为可打印字符,实验就是利用边信道攻击在不知道s.pass内容的情况下,攻击得到密码从而执行shellcode获得root shell ,编译sidechannel.c的时候记得加上堆栈可执行

1.3 实验原理

  • 边信道攻击(side channel attack简称SCA),又称侧信道攻击:针对加密电子设备在运行过程中的时间消耗、功率消耗或电磁辐射之类的侧信道信息泄露而对加密设备进行攻击的方法被称为边信道攻击。
  • 本实验中,错误的密码和正确的密码用时会不一样,猜测出第1个字符再猜第2个,依次猜完19个字符就搞定了,最后一个字符有点特殊。
  • 精确计时,比较不同字符程序运行的时间,错误字符和正确字符用时的差异不是特别大,但是在seed机器上还是可以测出来
  • 关键代码如下:
    在这里插入图片描述

2 攻击过程

2.1 分析sidechannel.c代码

//sidechannel.c
//s.pass root只读
//S1deCh4nnelAttack3r

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
   
       FILE *in = 0;
       char pass[20]="";
       unsigned int i=0, j=0;
       unsigned short correct=0,misplaced=0;
       unsigned short pwlen=strlen(pass) - 1, inlen=0;
       if(argc != 3 || (inlen=strlen(argv[1]) - 1) > 19)
               return 1;

       setresuid(geteuid(),geteuid(),geteuid());

       in = fopen("s.pass","r");
       pass[fread(pass, 1,19,in)] = 0;
       fclose(in)
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值