深入理解计算机系统attack lab

这里写图片描述

Attack lab

一:实验梗概

Attack lab:要求你进行五次攻击。攻击方式是code injection代码注入和Reeturn-oriented programming(ROP),在你做完这个lab,你会收获:

  1. 你将知道当程序没有做缓冲区溢出安全时,黑客是如何攻击程序的。
  2. 你将知道编译器和操作系统是如何增强程序的健壮性。
  3. 你将明白怎么编写更安全的程序
  4. 你将明白x86-64构架下,程序是如何使用栈和参数传递。
  5. 你将学会GDB和OBJDUMP的用法。
    文件列表:
    |文件|用途
    |–|--
    |ctarget|用来做Code injection攻击的程序
    |rtarget|用来做ROP攻击的程序
    |cookie.txt|作为攻击的标识符
    |hex2raw|用来生成工具字符串
    |farm.c|稍后解释
    任务:
    这里写图片描述
    话不多说,开始Attack

二:实验准备

GDB

OBJDUMP

ctarget

被攻击程序之一,在该程序里,会首先执行getbuf函数,读取标准输入。
其中Gets函数于书中gets函数类似。
BUFFER_SIZE不告诉你,你自己去找。

unsigned getbuf()
{
	char buf[BUFFER_SIZE];
	Gets(buf);
	return 1;
}

参数 (ctarget和rtarget都有)
-q 不发送成绩
-i 从文件中输入
如果你没有使用-q,就会出现

FAILED: Initialization error: Running on an illegal host [localhost.localdomain]

因为你没有使用CMU的内网,是无法建立连接的。所以你每次进行操作都要带上-q。我用的最多的是-qi.

Code Injection

通过使缓冲区溢出,注入攻击代码。

ROP

介绍下return-oriented programming是什么意思吧。
ROP即使用你程序里的字节代码攻击你的程序。听起来有些神奇,举个例子:

void setval_210(unsigned *p)
{
	*p = 3347663060U;
}

这个程序看起来很普通,但如果反汇编成机器字节代码

0000000000400f15 <setval_210>:
400f15: c7 07 d4 48 89 c7 movl $0xc78948d4,(%rdi)
400f1b: c3 retq

仔细看: 48 89 c7可以编码为movq %rax,%rdi,c3可以编码为ret。如果程序从0x400f18开始执行,将执行

movq %rax,%rdi 
ret

这种带有ret的指令段,称为gadget,而farm.c里有很多这种garget。你可以利用这些garget进行攻击。
(注:farm.c已经编译进了rtarget,也就是说,你反汇编rtarget时,你就会找到farm.c里的函数)
这里写图片描述
这里写图片描述
这里写图片描述

ret c3
nop 90

hex2raw

将16进制转换为字符串,这样,机器才能识别。
用法:
将1.txt文件里的内存转换为字符串并输出到2.txt

./hex2raw <1.txt >
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值