本文记录了CSAPP配套实验——Attack Lab的详情WriteUp

  • 运行环境:

    • Ubuntu 22.04

任务

类似于Bomb Lab,需要明白控制过程在机器级代码中的表现形式和运行过程。

实验分为两个部分:

  • Code Injection Attack (代码注入攻击)——phase1-3,对应文件ctarget
  • Return-Oriented-Programming(面向返回编程)——phase4-5,对应文件rtarget

知识储备

  • 请先阅读CSAPP 3.10部分的内容
  • 官网下载阅读attack.pdf
  • 注:cookie.txt是每个CMU学生的一个ID,自学者默认ID为0x59b997fa

A:hex2raw的使用

​ hex2raw接收字节序列格式的输入,如"30 31 32 33 34 35"代表输入数字"012345",支持/**/形式的注释,假设我们现在已经写好一个字节序列格式的文本文件exploit.txt,我们可以用如下几种方式向ctargetrtarget输入该序列。

unix> cat exploit.txt | ./hex2raw | ./ctarget		/* 使用pipes */
unix> ./hex2raw < exploit.txt > exploit_raw.txt
unix> ./ctarget < exploit_raw.txt				/* I/O重定向 */
---------或---------
unix> ./hex2raw < exploit.txt > exploit_raw.txt
unix> ./ctarget -i exploit_raw.txt -q			/* -i表示文件输入,-q表示脱机使用 */
unix> ./hex2raw < exploit.txt > out			/* 转换为二进制文件out */

B:生成字节码Byte Codes

​ 假设我们事先已生成汇编代码example.s,可以以如下方式得到机器码

unix> gcc -c example.s
unix> objdump -d example.o > example.d

​ 在文件example.d即可看见对应的机器码。


WriteUp

Part1:Code Injection Attack

Phase1
Phase2
Phase3

Part2:Return-Oriented Programming

Phase4
Phase5

参考

https://zhuanlan.zhihu.com/p/36807783

https://github.com/luy-0/CS-APP-LABs/blob/master/Lab-Answer_HB/Lab3-AttackLab/L3-Attack-Note.md