[BUUCTF-pwn]——others_shellcode

[BUUCTF-pwn]——others_shellcode

peak 小知识

写这道题之前, 大家首先要了解, 想要获得一个shell, 除了system("/bin/sh") 以外, 还有一种更好的方法, 就是系统调用中的 execve("/bin/sh", NULL, NULL)获得shell。我们可以在 Linxu系统调用号表 中找到对应的系统调用号,进行调用, 其中32位程序系统调用号用 eax 储存, 第一 、 二 、 三参数分别在 ebx 、ecx 、edx中储存。 可以用 int 80 汇编指令调用。64位程序系统调用号用 rax 储存, 第一 、 二 、 三参数分别在 rdi 、rsi 、rdx中储存。 可以用 syscall 汇编指令调用。

言归正传,我们来看看这道题
先checksec一下, 没什么32位程序,开启了NX保护
在这里插入图片描述
在IDA中,看蒙了。之前没遇到过。连个输出都没有,注意到getshell函数上面的result变量 旁边的 eax。函数名叫getshell肯定是暗示在这里进行获得shell的。
在这里插入图片描述
在这里插入图片描述
在汇编中看看, 嘶发现有 int 80 指令。eax = 0FFFFFFFFh - 0FFFFFFF4h = 11。看上面函数也发现result也就是eax的值就是11
在这里插入图片描述
看下Linxu系统调用号表 11对应的就是 execve 可是ebx ecx edx的参数怎么办。
在这里插入图片描述
秉承着走一步写一步的想法。一运行竟然可以, 孩子也是吐了。完全不知道这道题考的什么, 不过多执行试试这个习惯还是很好的,就比如这次, 不就莫名其妙成功了嘛。

exploit

from pwn import *
p = remote('nde3.buuoj.cn', 28531)                                                                       
p.interactive()

希望能够找到ebx ecx edx寄存器对应参数的大佬, 可以在评论里面指教一下。我个人觉得pwndbg肯定可以查看,但是我的pwndbg最近有点问题。看看大佬们有没有其他方法。

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值