二进制安全-第四天

本文讨论了在逆向工程中,如何利用canary机制保护程序,Ret2syscall的原理以及ROP(Return-OrientedProgramming)在绕过安全检查中的应用。作者还提到了动态链接和gdb中的地址偏移问题,以及在实际场景中处理环境差异带来的挑战。
摘要由CSDN通过智能技术生成

ps:突然发现单独学习pwn的题目太狭隘了,准备这两天整理下思路再从逆向开始。

 

当canary打开的时候,会在如图位置放一个canary区域,canary中存放一个随机值,当程序读取canary区域时发现随机数发生变化,则会直接退出。

 

 

 

 

 

返回导向编程:

Ret2syscall

 

 

 

使用的自带函数中,例如printf并不是简单实现的,而是调用写好的存放在系统层的功能,通过动态链接调用。libc中存放了大量库函数。

为什么要动态链接调用呢?

因为系统libc在不断更新,不可能更新后去更改所有二进制的指向。通过修改软连接的指向就可以达成。

被调用的库函数会在被调用时进入shared libraries段中的libc的对应库函数的地址。是对系统调用的包装,

 

 

这是一段系统调用,先将execve的系统调用号存入eax,在其他寄存器中去存放参数,最后是一个系统调用中断号。而这一段代码的作用是system所包装的,和system调用sh的作用是一样的。

ROP的目的:程序中没有完整的可以调出这样的汇编代码,但有对应的代码片段,用rop执行分离的代码也能达成相同的作用。

 

 

 

 

Pop_寄存器_ret 这样的片段就是要的gadget

通过 ROPgadget --binary 文件名 --only   "pop|ret"来寻找有pop或者是ret的片段。

 

 

 

在gdb动态调试中,相当于把程序放在一个自己的虚拟层中去运行,因此偏移是可靠的,但是地址可能和实际的地址有出入。

 

main是栈中的第一个栈帧,在main之前的函数没有栈帧。

 

在调试修改后的ret2shellcode的题目时,在本地运行出错,在ctf题目中也会经常遇到远程能打通,本地打不通的情况,特别是调用libc动态链接库的程序,在环境差异的情况下,很有可能会出现。

题目做法放到明天了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值