• Pwn_工具食用方法(动态更新)


    Tools食用方法

    IDA

    空格可以调整视图

    F5进行一键反汇编

    双击变量可以看到变量地址或进入函数

    Ctrl+S 可以看到区段地址(如bss段、plt、got)

    对变量或函数按x可以查看上级调用

    可以在函数框Ctrl+F搜索函数名

    在变量右键可以Rename变量名,方便代码审计

    gdb

    • gdb 程序名 打开程序

    • pdisass/disassemble 反汇编

    ​ 查看当前函数帧的反汇编代码,前者依赖于pwndbg有高亮,后者没有。

    ​ 如: pdisass main

    ​ disass

    • -q 参数不显示欢迎信息等

    • canary 查看canary的值

    • -n 不加载任何插件,使用原生gdb

    • info +想看的信息,例如 info functions 查看函数信息

    • b/breakpoint 设置断点

    ​ 如 b *内存地址

    ​ 如 b main

    ​ 在无PIE模式下,* 16位地址 即可

    ​ 在PIE下, *$rebase(16位地址)

    • del/delete breakposints n,删除断点

    ​ n是 断点编号,可用info breakpoints 查看断点信息

    • start 命令启动程序并停在开辟完主函数栈帧的地方

    • c/continue 继续执行程序,遇到断点停下

    • f/finish 结束程序

    • r/run 运行程序,遇到断点停下

    • ni 单步步过

    ​ 一步一步执行指令,遇到函数调用时直接执行完整个函数

    • si 单步步入

    ​ 一步一步执行指令,遇到函数调用时跳转到函数内部

    • vmmap 查看内存映射

      可以看到各段的权限

    • checksec 查看程序防护措施

    • p/print 打印信息

    ​ 如寄存器 p $ebp

    • set 设置某个地址的值

    ​ *addr=value

    • x/<n/f/u> <地址> 查看某地址的值

    ​ n/f/u 参数为可选,

    ​ n:查看多少个内存单元,即从当前地址开始计算,每个内存单元的大小由后面的u指定。

    ​ f:显示格式,如s代表字符串,i代表指令形式,u代表内存单元大小,b(1字节) h(双字节) w(4字节,默认),g(8字节)。后缀w代表16进制形式查看变量

    ​ 例如: x/s 地址

    ​ 查看某地址的字符串值

    • stack value 查看value大小的栈值
    • cyclic value: 生成value个垃圾字符,可以用来帮助测栈溢出大小
    • cyclic -l 地址 查询偏移,返回值就是覆盖(溢出)点

    LibcSearcher

    根据得到的泄露地址来查找libc版本,也可以在如下网址手动搜索

    https://libc.blukat.me

    安装方法:

    git clone https://github.com/lieanu/LibcSearcher.git

    cd LibsSearcher

    python setup.py develop

    当遇到返回多个Libc版本库的时候,可以通过add)condition(leaked_func,leaked_address)来添加限制条件。也可以手工选择其中一个版本。

    Vim

    通过vim xxx.py来创建文件

    通过 i进入插入模式

    esc返回指令模式

    :wq 保存并退出

    Pwntools

    (我并分不清pwntools和python基础语法,故在脚本中能利用的都放在这里)

    • 在脚本中gdb交互: gdb.attach(进程名,'命令')

    frtstr_payload

    针对格式化字符串漏洞的工具

    fmtstr_payload(offset, writes, numbwritten=0, write_size='byte')
    第一个参数表示格式化字符串的偏移;
    第二个参数表示需要利用%n写入的数据,采用字典形式,我们要将printf的GOT数据改为system函数地址,就写成{printfGOT: systemAddress};本题是将0804a048处改为0x2223322
    第三个参数表示已经输出的字符个数,这里没有,为0,采用默认值即可;
    第四个参数表示写入方式,是按字节(byte)、按双字节(short)还是按四字节(int),对应着hhn、hn和n,默认值是byte,即按hhn写。
    fmtstr_payload函数返回的就是payload

    Ropgadget

    • 查找bin_sh字符串地址:ROPgadget --binary ./re2libc3 --string"/bin/sh"

    • ROPgadget--binary ./re2libc3 --only"pop|ret"

    • ROPgadget--binary ./re2libc3 --only"pop|ret"|grep"eax"

    • ROPgadget--binary ./re2libc3 --only"pop|ret"|grep"ebx"|grep"ecx"|grep"edx"

    • ROPgadget--binary ./re2libc3 --string"/bin/sh"

  • 相关阅读:
    CSP-J2019游记&解题报告
    旋转立方体实现
    博客背景线条实现
    垃圾基数排序
    链表实现队列(指针)
    公共子序列(luogu P1439)
    可并堆(左偏树)
    搜索(靶形数独)
    线段树(压位)luogu P1558色板游戏
    线段树区间取反
  • 原文地址:https://www.cnblogs.com/Uninstalllingyi/p/16207571.html
Copyright © 2020-2023  润新知