【渗透测试框架】Phpsploit-Framework(PSF)基础教程系列(二)

文章目录

七、Phpsploit-Framework软件的实战演示(CTF竞赛方向)

本文章仅提供学习,切勿将其用于不法手段!

如何操作共享内存?在CTF竞赛中,共享内存的意义与价值是什么?

共享内存,是一片可以由多个不同进程共享访问的内存区域。

共享内存,可以由用户层软件自行根据需求创建,通常创建共享内存,需要确定共享内存资源的KEY(键值)、SIZE(存储空间容量)、PERMS(访问权限)这三项最为重要的设置内容。共享内存可以被创建很多块,与硬件资源的配置(物理内存空间越大的硬盘配置,可以创建与使用的共享内存资源也就越多)、操作系统的位数(可寻址范围,64位的操作系统要比32位的操作系统拥有更大的可寻址空间)、操作系统中已创建的共享内存资源数量(共享内存资源数量受限于整型数字的最大值)等息息相关!

共享内存资源,可以很方便地用于跨进程通信,可以使多个进程对同一块内存资源进行访问操作。在访问权限方面,您需要了解的基础知识为:读4、写2、执行1,其中任意两个到三个数字相加组合即可形成更加综合的访问权限设置,例如,一块共享内存资源的访问权限为八进制数的660,即代表创建共享内存资源的用户和创建共享内存资源的用户所属的用户组中的其它用户都可以对这块共享内存资源进行读写访问!设置合理的访问权限,可以使共享内存资源发挥更大的价值与用途!

使用Phpsploit-Framework软件创建的共享内存资源的访问权限为八进制数660(也就是创建共享内存资源的用户及其对应的用户组中的其它用户都可以对其进行读写访问)!这样做的原因,笔者推测,可能是由于Phpsploit-Framework软件的运行环境等因素的影响。

在进行CTF比赛时,当指定进程可以访问指定共享内存资源时,如果将shellcode代码存储在共享内存之中,则更加有利于绕开CTF竞赛对手的安全防御(原因很简单,shellcode代码在共享内存之中,而并非处于指定进程所对应的硬盘文件之中)!

使用Phpsploit-Framework软件创建共享内存资源,您需要使用 memory (共享内存)模块下的 add (创建共享内存资源)子模块,可以正常接受的内容格式为shellcode代码的标准格式(例如,\x90\x90\x90\x90\x90\x90\x90\x90 ,最小可输入的字节数为8字节,最大可输入的字节数为1048576字节。注意!\x<两位16进制数>的格式内容构成一个字节)。

Linux操作系统下的共享内存资源列表,可以通过 memory (共享内存)模块下的 system(系统环境的共享内存资源列表)子模块进行查看。system 模块可以较为方便地查看Linux系统环境中都创建了哪些的共享内存资源(可以查看到的共享内存资源列表内容与运行Phpsploit-Framework软件的用户权限相关)。

使用Phpsploit-Framework软件创建的共享内存资源,可以通过 memory (共享内存)模块下的 search(搜索共享内存资源)子模块进行查找。search 模块的功能在您已经创建了很多的共享内存资源时,会比较实用!您可以通过输入指定的 KEY (共享内存资源的键值)的方式来搜索符合匹配条件的共享内存资源。

使用Phpsploit-Framework软件创建的共享内存资源,可以通过 memory (共享内存)模块下的 list(共享内存资源列表)子模块进行查看。list 模块的功能支持对于共享内存资源列表进行分页浏览,您可以较为方便地查看自己都创建了哪些共享内存资源。

使用Phpsploit-Framework软件创建的共享内存资源,可以通过 memory (共享内存)模块下的 clear(共享内存资源清理)子模块进行一键清理。clear 模块的功能支持使用Phpsploit-Framework软件创建的共享内存资源进行一键清理(Phpsploit-Framework软件内置了相应的数据结构,并维护着一张使用Phpsploit-Framework软件创建的共享内存资源的列表,清理共享内存资源的操作,主要通过遍历列表资源的方式进行)。

综合来说,Phpsploit-Framework软件自带的共享内存资源管理功能(memory)是非常实用的。如果 memory 模块的功能与 elf (ELF格式文件内容分析)模块的功能搭配使用,则可以较为方便地开展包括渗透测试、安全审计、CTF竞赛等在内的行为环境下的二进制安全审计工作(包括,fuzzy测试(模糊测试)等)!

下面,我们来看一下,使用C语言配合Phpsploit-Framework软件来操作共享内存资源的一些方法(注意,下面介绍的方法,仅适合于渗透测试行为,常规的软件开发行为中请不要采用!牢记)!

1、获得共享内存资源对应的ID(如果资源不存在,则自动创建资源,八进制数6代表可读写)

int shmid = shmget(key_t <共享内存资源的KEY(键值)>, size_t <共享内存资源的SIZE(大小:以字节为单位)>, int <IPC_CREAT|0660>);

注意:读取共享内存资源的进程的调用者(用户)需要和创建共享内存资源的进程(这里指的是运行Phpsploit-Framework软件的进程)的调用者(用户)位于同一个用户组内!这点,非常重要!

2、将指定的共享内存资源与当前进程进行绑定(使当前进程可以操作指定的共享内存资源)

void * shm_addr = shmat(<共享内存资源对应的ID>, NULL, 0);

注意:向shmat函数传递的共享内存资源ID,应该是shmget函数的返回值(-1,代表失败)!

3、将共享内存资源中的数据拷贝到进程中(0660的访问权限,代表资源内容不可被直接执行)

//将字符数组的空间大小设置为与共享内存资源的空间大小相同,是为了避免发生缓冲区溢出!

char shellcode[<共享内存资源的SIZE(大小:以字节为单位)>];  //创建资源数据的内容拷贝空间

//正式将指定的共享内存资源的内容拷贝到当前进程的指定字符数组所对应的存储空间之中

memcpy((void *)shellcode, (const void *)shm_addr, <共享内存资源的空间大小>);

shmdt(shm_addr); //解除指定共享内存资源与当前进程之间的绑定关系

4、执行共享内存资源中的代码数据

(*(void(*)()) shellcode)();

注意,以上方法仅可被用于得到合法授权的渗透测试与安全审计行为!任何未经合法授权的渗透测试与安全审计行为都是非法的,请您谨慎对待!另外,上述方法中的部分代码,对于挖掘二进制安全中的0day漏洞等工作,同样具有较为重要的参考意义和价值!

您需要注意,对于Phpsploit-Framework软件的使用,Phpsploit-Framework软件作者已经做出了较为明确的用途性限制说明(仅可用于得到合法授权前提下的渗透测试、安全审计、安全技术学习与研究等行为)!任何超出Phpsploit-Framework软件用途限制的行为,都可能会被Phpsploit-Framework软件作者追究相应的法律责任。笔者提醒您,需要谨慎对待哦!^_^!

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值