实验5-通用gadget之lab4

实验原理与目的

上一篇以及介绍了实验原理,就是程序在编译时会加入一些通用函数来进行初始化操作,我们可以针对初始化函数来提取一些通用的gadget,通过泄露某个在libc中的内容在内存中的实际地址,通过计算偏移量来得到system和bin/sh的地址,然后利用返回指令ret连接代码,最终getshell。然而本次实验比较巧妙的地方就是利用了leave指令。

leave|ret

leave指令其实是两个指令合在一起的指令,即

    mov rsp,rbp 
    pop rbp

也就是说我们可以利用这条指令,通过修改rbp,来修改rsp。换句话说就是改变栈上上一级函数的栈基址来修改rbp,再通过mov rsp,rbp来修改rsp,从而使程序继续执行我们想要跳到地址。所以本次实验需要先泄露rbp内的地址,算出偏移量,得到目标地址,然后构造payload。

实验步骤

chechsec命令检查是否有canary保护
在这里插入图片描述
图中显示并没有,如果有的话,就先进行泄露。

IDA反汇编

 __int64 __fastcall main(__int64 a1, char **a2, char **a3)
 {
 setvbuf(stdin, 0LL, 2, 0LL);
 setvbuf(stdout, 0LL, 2, 0LL);
 while ( sub_400676() )
   ;
 return 0LL;
}

通过看源代码可能看出这是一个无限循环,我们来看一下sub_400676()

int sub_400676()
{
 c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值