pwntools 文档学习

Context

context(arch = 'i386', os = 'linux',log_level='debug'设置目标机的信息

arch设置架构为amd64,可以简单的认为设置为64位的模式,对应的32位模式是’i386’

log_level设置日志输出的等级为debug,这句话在调试的时候一般会设置,这样pwntools会将完整的io过程都打印下来,使得调试更加方便,可以避免在完成CTF题目时出现一些和IO相关的错误。

r = remote('exploitme.example.com', 31337) 用来建立一个远程连接,url或者ip作为地址,然后指明端口

asm(shellcraft.sh())     asm()函数接收一个字符串作为参数,得到汇编码的机器代码


checksec

checksec可以查看当前二进制文件的指令架构以及采取了哪些保护机制

需要特别注意目标进程是否开启了DEP(Linux下对应NX(No Execute))、ASLR(Linux下对应PIE)等机制,

例如存在DEP(NX)的话就不能直接执行栈上的数据,存在ASLR的话各个系统调用的地址就是随机化的

程序保护

  1. CANARY:canary英文为金丝雀,意指曾今矿工用金丝雀的存活与否来确认矿地中是否有有毒。在这里我们就是用这个canary指值来确认栈是否溢出。
  2. NX:开启的NX保护的程序是堆栈不可执行的。所以以前常用的jmp espjmp rsp等跳板技术跳到栈中执行shellcode的技术就不能用了。
  3. ASLR:Address space layout randomization地址空间布局随机化技术。这里的地址随机化仅仅视对用户态的,不是内核的地址随机,内核的地址的分布还是使用的固定虚拟地址。关闭地址随机化的选项

在编译时加入-fno-stack-protector和-z execstack

gcc -fno-stack-protector -z execstack -o level1 level1.c  这个命令编译程序。-fno-stack-protector和-z execstack这两个参数会分别关掉DEP和Stack Protector


原文地址:https://www.cnblogs.com/rookieDanny/p/8509033.html