MENU

通过LIBC基址来爆破TLS

September 30, 2021 • Read: 71 • Pwn,CTF

在有些情况下,我们需要知道 TLS 的位置以便于修改其中的一些值,例如 canary、tcache struct ptr、key。

但是在大多数情况下,远程的 ld.so 距离 libc 基址的位置不确定与本地 patchelf 之后的不一致,这时候优先可以考虑起一个 docker 来看看偏移(因为题目大多数都是用 docker 搭建的),我这里推荐这个项目:https://github.com/PIG-007/pwnDockerAll

如果还是不正确,则说明我们需要爆破偏移,这里的爆破偏移和往常的不同,因为这个偏移值的量在每次连接的时候都是固定的,所以我们只要循环执行足够多的次数,那么就一定能够攻击成功。而且偏移的变化值往往在地址末尾的第四个、第五个数(末三位不变),我们只需要考虑爆破这两个数字即可。

这里提供一个爆破的模版,可以参考一下

for x in range(0xF):
   for y in range(0xF):
      try:
         libc_base = 0x1234
         offset = 0x6 << 20
         offset += x << 16
         offset += y << 12
         offset += 0x888
         tls = libc_base + offset
         sh.interactive()
      except:
         print 'trying...'
         sh.close()
Archives QR Code Tip
QR Code for this page
Tipping QR Code