pwntools常用脚本语句
接收远端传来的数据
1 |
|
接收远端传来的数据
1 |
|
环境设置以及脚本调试
1 |
|
ljust()方法
描述
Python ljust() 方法返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。
语法
ljust()方法语法:
1 | str.ljust(width[, fillchar]) |
参数
1 |
|
返回值
返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。
实例
以下实例展示了ljust()的使用方法:
1 | #!/usr/bin/python |
以上实例输出结果如下:
1 | this is string example....wow!!!000000000000000000 |
elf.symbols[]
elf.symbols[] 是 pwntools 中 ELF 类的核心属性,也是 PWN 做题的地址速查手册。
简单说:加载 ELF 文件后,它是一个字典 → 键 = 符号名(函数 / 全局变量名),值 = 该符号在程序中的虚拟内存地址(无 PIE)/ 偏移(有 PIE)。
| 符号类型 | 返回值(无 PIE) | 返回值(开 PIE) | 实战用途 |
|---|---|---|---|
| 程序自身函数(win/main) | 函数绝对虚拟地址 | 函数文件偏移 | 直接劫持 EIP/RIP 跳转到后门 |
| 全局 / 静态变量(buf/flag) | 变量绝对虚拟地址 | 变量文件偏移 | 读写 / 覆盖全局变量 |
| 动态函数(libc:printf/read) | 函数GOT 表地址 | 函数GOT 表偏移 | 泄露 libc 基址、构造 ROP |
简写:elf.sym[xxx] = elf.symbols[xxx]
1 |
|
避坑指南
Stripped 程序(去符号)
编译时加
-s的程序,elf.sym[]只有动态函数符号(read/printf),自身函数(main/win)查不到 → 只能去 IDA 手动找偏移。符号名严格匹配
不是
scanf,而是__isoc99_scanf;不是gets,而是_gets→ 用print(elf.symbols)打印所有符号核对。栈上变量拿不到
elf.sym[]只能查全局 / 静态变量,栈上局部变量(如函数内的 buf)查不到 → 只能算栈偏移。32/64 位无差异
语法完全一致,只是地址长度用
p32()/p64()区分
本质:
elf.symbols[] 本质是 pwntools 帮你解析了 ELF 的符号表:
.dynsym:动态符号表(存libc函数、导出函数).symtab:静态符号表(存所有函数 / 变量,stripped后会被删除)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Sy-Blog!





