pwn2.

记一次小pwn

文件链接
提取码:vn4i

1.checksec一下
在这里插入图片描述

• RELRO:RELRO会有Partial RELRO和FULL RELRO,如果开启FULL RELRO,意味着我们无法修改got表
• Stack:如果栈中开启Canary found,那么就不能用直接用溢出的方法覆盖栈中返回地址,而且要通过改写指针与局部变量、leak canary、overwrite canary的方法来绕过
• NX:NX enabled如果这个保护开启就是意味着栈中数据没有执行权限,以前的经常用的call esp或者jmp esp的方法就不能使用,但是可以利用rop这种方法绕过
• PIE:PIE enabled如果程序开启这个地址随机化选项就意味着程序每次运行的时候地址都会变化,而如果没有开PIE的话那么No PIE (0x400000),括号内的数据就是程序的基地址
• FORTIFY:FORTIFY_SOURCE机制对格式化字符串有两个限制(1)包含%n的格式化字符串不能位于程序内存中的可写地址。(2)当使用位置参数时,必须使用范围内的所有参数。所以如果要使用%7$x,你必须同时使用1,2,3,4,5和6。
2.查看函数
在这里插入图片描述

3.查看system函数地址
在这里插入图片描述

4.查看汇编
4.1这个是system

在这里插入图片描述

4.2这个是get_shell_
在这里插入图片描述

5.用pattern生成乱序字符串
在这里插入图片描述

6.进行溢出调试让他报错
在这里插入图片描述

7.查看覆盖RBP的字符串
在这里插入图片描述

8.查看偏移:48
在这里插入图片描述

9.写脚本:
在这里插入图片描述

使用脚本定位溢出字符串为48,在栈帧中,RBP下方为返回地址所以覆盖返回地址的字符串是从48+8开始的。
这里的8是因为该程序为64bit程序RBP为64位寄存器。

10.运行结果

在这里插入图片描述

### PWN 中 GDB.Attach 和 Pause() 的使用 #### 使用 `gdb.attach` 进行调试 当利用 pwntools 库中的 `gdb.attach()` 方法来启动 GDB 并附加到目标进程中时,可以实现对二进制文件的动态分析。此方法通常用于暂停正在运行的目标进程以便设置断点、查看寄存器状态或内存内容等操作。 ```python from pwn import * io = process('./vuln_program') gdb.attach(io, gdbscript=''' b *main+0x1a # 设置断点于 main 函数偏移地址处 c # 继续执行直到遇到断点 ''') # 此时程序将在指定位置停止等待进一步指令 io.sendlineafter('>', 'input data') # 向程序发送输入数据 ``` 上述代码片段展示了如何通过传递给 `gdbscript` 参数自定义的一系列GDB命令字符串来控制调试过程[^2]。 #### 结合 `pause()` 实现交互式调试 为了使调试更加灵活可控,在调用 `gdb.attach()` 后立即跟上 `pause()` 可让脚本在此处挂起并提示用户按下任意键继续。这种方式特别适合那些希望能够在特定时刻介入调试流程的情况: ```python def debug_with_pause(): io = process('./target_binary') gdb.attach(io) pause() payload = cyclic(100) # 构造payload io.sendline(payload) if __name__ == '__main__': context.log_level='debug' # 设定日志级别为debug以获得更详细的输出信息 debug_with_pause() ``` 这里展示了一个简单的例子,其中包含了创建一个新的子进程实例以及在其上调用 `gdb.attach()` 来开启GDB调试环境;紧接着调用了 `pause()` 让当前线程阻塞直至收到用户的按键事件再恢复执行[^1]。 #### 编译选项配置 对于64位Linux平台上的C/C++源码编译成可被轻松逆向工程和漏洞挖掘的形式,建议采用如下所示不含PIE保护机制且禁用栈防护功能的GCC参数组合: ```bash gcc -no-pie -fno-stack-protector -z execstack -m64 -o output_file source_code.c ``` 这些标志能够确保最终生成的ELF格式可执行文件具有固定的加载基址,并允许堆栈区域内的代码被执行,从而简化了某些类型的攻击面研究工作[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值