首页 > 其他分享 >你想有多pwn

你想有多pwn

时间:2023-12-07 18:12:16浏览次数:31  
标签:addr rbx pop rbp 地址 pwn 断点

第一章

1.1 认识程序

file、ldd

1.2 gdb调试

一、指令
    1、start、run
    
    2、断点
        设置断点 b mian、b *0x123456
        查看断点 info b、i b
        让断点失效 disable b 序号
        恢复断点 enable b 序号
        删除断点 d 序号
        步过、步进、步出 n、s、finish

    3、info r查看寄存器
        · RIP存放当前执行的指令地址
        · RBP存放当前栈帧的栈底地址
        · RSP存放当前栈帧的栈顶地址
        · RAX通用寄存器,存放函数返回值

    4、打印(可做加减)
        · print、p $rbp-0x10

    5、查看内存、设置内存(重要!!!)
        · x/20gx 0x123456 
            · 查看内存: g查看8字节、w查看4字节、b查看2字节
            · x显示16进制、d显示10进制               
        · x/20s 以字符串的形式显示            
        · x/20i $rip 从rip开始编译20行的汇编代码
            · disassemble $rip           
        · x/20b $rbp-0x10 逐字节查看值

        · set *0x123456 = 0x61
        · set *((unsigned int)$ebp) = 0x62

第二章

2.1 ret2csu_x1

一、原理(看汇编语言)
    满足 rbp = rbx + 1 则不会跳转,程序会继续往下到retn        
    · 要能够控制rbp和rbx
    · rbx要等于0,且要能够控制r15(call [r15+rbx*8])
    · r15控制func
    · 三个参数(r12控制rdi、r13控制rsi、r14控制rdx)

二、步骤
    1、先跳转到pop pop pop处
    2、然后ret到上面mov mov mov处
    3、参数设置完之后,控制到call函数
    4、控制程序不跳转继续往下执行add pop pop pop
1、先控制程序到pop_rbx_addr然后
2、rbx=0、rbp=1、r12=arg1、r13=arg2、r14=arg3、r15=call func(GOT表地址)
3、然后,ret到mov_rdx_r14_addr
4、加上7*p64(0xdeadbeef),最后在加上一个返回地址
5、!!!注意 !!!
    · 由于是直接call,所以函数地址r12必须是got表地址,不能是plt或栈上地址
    · 所以有必要调用一次read_got,把泄露的system和/bin/sh\00写到bss段
    · 最后再(注意sleep(1))

2.2 总结+杂项

一、防护(NX、Canary、PIE、RELRO)
二、栈迁移(自学)

栈迁移(自学)

    · 用法:栈溢出空间不足以布置栈
    · 步骤:
        1、动态调式泄露s的真实地址
            · 把s字段数据填满,由于没有\00截断符,所以print会打印ebp
            · 再通过动态调试用ebp-0x38得到s_addr起始地址
        2、接下来通过第二个read,在s的内存中布置payload
            · bin_sh_addr = s_addr + 16(system_addr+12)
            · fake_ebp = s_addr - 4
        3、

标签:addr,rbx,pop,rbp,地址,pwn,断点
From: https://www.cnblogs.com/monster-hang/p/17883391.html

相关文章

  • PWN入门之Stack Overflow
    本文是i春秋论坛签约作家「Binarystar」分享的技术文章,旨在为大家提供更多的学习方法与技能技巧,文章仅供学习参考。大家好,我是Binarystar,目前从事于公安行业,擅长Web、二进制和电子取证方向。能把网络安全技能运用在工作中,与我的职业结合起来做有意义的事,是非常自豪的,我希望通......
  • CTFpwn全保护简单介绍及一道保护全开题
    今日份心脏骤停,噔噔咚!每种保护介绍FullRELRO保护原理:其实就是不让你改写got表中的内容。影响:不能劫持stack_chk_fail函数以绕过canary,不能劫持动态链接里面已经调用过的函数。(不懂libc快去翻我文章doge)Canary保护原理:在所有函数的栈的末尾(比如rbp-8)插入一个值,叫做canary,在......
  • CTFpwn格式化字符串两种应用及2023ISCTF的fmt题解wp
    三个例子的引入目前我遇到的格式化字符串漏洞(formatstring,后文简称fmt)主要存在于printf函数,本文也就以printf举例。例一,标准格式的printf read(0,buf,33);printf("%s",buf);例二,占位符与变量 printf("%d%c%s",a,b,c);//%d%c%s会访问变量以输出整型,字符等。其中a,b,c为三......
  • PWN学习之LLVM入门
    一、基本流程①找到runOnFunction函数时如何重写的,一般来说runOnFunction都会在函数表最下面,找PASS注册的名称,一般会在README文件中给出,若是没有给出,可通过对__cxa_atexit函数"交叉引用"来定位:②通过逆向,找到函数名及参数,编写基本exp③找到漏洞,写利用exp.c,其中的pwn的目标是op......
  • 【pwn】orw&rop --泄露libc基址,orw
    我们先看看程序的保护的情况因为题目提示了orw,我们可以沙箱检测一下可以发现是禁用的execve函数的,接着看函数逻辑这里格式化字符串漏洞可以泄露canary和puts函数地址,先确定一下参数位置可以发现参数是在第六个位置,接下来就是构造ROP,调用read函数读取shellcode到mmap开辟的......
  • 【pwn】puts or system? --格式化字符串漏洞泄露libc基址
    还是先看一下保护情况开了canary,接着看主函数逻辑看到这里的代码逻辑,我一开始是想通过printf泄露出canary的值,然后再用ret2libc来打,但是我发现这个libc不好泄露,一般的泄露的思路都是构造ROP,通过puts函数泄露出puts的got表内容,但是我在寻找rdi这个gadget的时候,是找不到的这也......
  • CTfpwn攻防世界int_overflow对于strlen的利用以及汇编是神
    分析这题题目已经在暗示用int数据的overflow了,不过不急,先分析一下。保护基本没啥保护,也挺好,适合不用搞太多花里胡哨的泄露,只需理解这题想告诉你的知识。后门函数看到有一个whatisthis函数,正是我们要的catflag函数。main函数login函数main函数里需要的操作很简单,只需输入一个1就......
  • XCTF-pwn-level0
    下载改题目提供的文件,使用file和checksec进行分析该文件是一个64位的ELF可执行文件,而且开启了NX保护机制,不知道其作用如何使用ida打开,是一道基本的栈溢出return返回vulnerable_function()方法,继续追踪可以看出vulnerable_function()这个方法有return返回了read()方法......
  • BUUCTF-pwn-rip(第一个栈溢出)
    这两天在学习pwn,在ctfwiki学习了典型的栈溢出,参考:https://ctf-wiki.org/pwn/linux/user-mode/stackoverflow/x86/stackoverflow-basic/在做题目的时候发现buuctf的rip和ctfwiki的示例题目一样,考的都是gets()方法的不限制输入首先,根据ctfwiki的描述,总结栈相关的知识:栈在......
  • pwn中常见的绕过(以后见多了会慢慢更的,咕咕咕)
    如题,总结一下我目前在pwn中常见的一些绕过,方便以后随时查阅strlen这是检验字符串长度的函数,常见的形式是“当字符串个数>number时,失败”,绕过它其实很简单,在输出的字符串开头加上'\x00',这样strlen就不会检测后续字符串的个数了,就完成了绕过strncmp指定比较size个字符串,有三个参......