格式化串漏洞利用姿势

读/写栈上数据

  • 读:计算出要读的地址是第xxx个不定参数,然后利用%xxx$x 读取(x-十六进制读,lx长整读取(64位))
  • 写:同上,计算xxx,yyy为要写入的值,%yyyc%xxx$hn(写)即可实现栈上数据写入(h-短整型,l-长整型),注意,此时修改的内容不是第xxx个不定参数的内容,而是它指向的内存地址的内容

读/写任意地址数据

  • 读:addr + %xxx$s + signal_str,读取addr地址处的字符串,xxx是根据addr在栈上的地址计算出的不定参数的值,signal_str用于截取获取的字符串,recvuntil(signal_str)
  • 写:addr+%yyyc+%xxx$hn,xxx计算方法同上,yyy+len(addr)为要写入的数据

DynELF时leak函数至少返回1字节,并且addr地址中可以出现\x00