ShellCode的编写和利用

本文探讨了ShellCode在渗透测试和二进制安全研究中的重要性,讲解了如何在程序中嵌入并执行ShellCode。通过实例展示了一个简单的PWN题目,解释了如何利用特定的汇编代码(Shellcode)绕过安全措施,以及如何处理不可打印字符的问题。文章还提到了工具在ShellCode变形过程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ShellCode的编写和利用

原文链接https://hvnt3r.top/2018/10/Shell-code的编写和利用/
在渗透测试和漏洞利用中,Shellcode是一个十分重要的部分,在二进制的安全研究中,Shellcode也充当着十分重要的角色,本文会记录我学习Shellcode的编写和利用原理。

在程序中嵌入Shellcode并执行

首先拿一道十分简单的PWN题来演示程序是如何执行Shellcode

文件下载

首先,这是一个32位的程序,我把它放到了32位的kali虚拟机中

gdb-peda$ checksec
CANARY    : ENABLED
FORTIFY   : disabled
NX        : ENABLED
PIE       : disabled
RELRO     : Partial

程序开启了NXCANARY,实际上并没有检查此程序开启的安全措施的必要,因为分析IDA中的伪C代码可知,此程序会将用户输入的数据当作汇编代码进行执行,代码如下:

int __cdecl main(int argc, const char **argv, const char **envp)
{
   
  int v3; // ST2C_4
  void *v4; // ST30_4
  int v5; // ST38_4
  char s; // [esp+3Ch] [ebp-84h]
  unsigned int v8; // [esp+BCh] [ebp-4h]

  v8 = __readgsdword(0x14u);
  v3 = open("/home/challenge/flag", 0);
  setbuf(_bss_start, 0);
  setbuf(stdout, 0);
  alarm(0x1Eu);
  v4 = mmap(0, 0x80u, 7, 34, -1, 0);
  memset(v4, 195, 0x7Fu);
  memset(&s, 0, 0x7Fu);
  puts("OpenCTF tyro shellcode challenge.\n");
  puts("Write me some shellcode that reads from the file_descriptor");
  puts("I supply and writes it to the buffer that I supply");
  printf("%d ... 0x%08x\n", v3, &s);
  read(0, v4, 0x20u);
  v5 = ((int (*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值