现在的位置: 首页 > 综合 > 正文

命令行的封锁与反封锁

2013年05月30日 ⁄ 综合 ⁄ 共 2748字 ⁄ 字号 评论关闭
(前言:这是我以前在SHC上发过的文章,被评为了精华,写这篇文章时参考了BCT的剑心的文章,文章里的代码都是参照别人的,对不起大家啦,嘿嘿。)

正文:

这是我以前学会的,看到有人发关于CMD的文章上来就突然想起来了,
现在拿出来与大家共享。

在CMD启动之前,系统会先查看

HKEY_LOCAL_MACHINE/software/microsoft/command processor/autorun
HKEY_CURRENT_USER/software/microsoft/command processor/autorun(注:HKEY_CURRENT_USER比HKEY_LOCAL_MACHINE的优先权要高)

这两个键值,如果有内容的话就会执行,比如:
我在c:/下建一个批处理名为×××,接着双击autorun这个键,输入"×××.bat",
之后只要一启动cmd就会运行这个批处理。
那么,现在我给出如下批处理(注:这段批处理是借用Rain的,我就先懒一懒吧):

@echo off
title 解除锁定
SETLOCAL
set pass=0
set times=2

echo 为安全起见,您的cmd.exe已经被管理员锁定 要解除锁定,请输入密码

echo 操作: 密码验证激活     时间:%time%   日期:%date% >> c:/log.txt
echo 状态: 等待输入密码 >> c:/log.txt
echo. >> c:/log.txt

:start
set /p pass= 请输入您的密码:
if %pass%==jimmy goto ok
echo 密码错误,请重新输入   您还有 %times% 次机会
if %times%==0 goto end
echo 状态: 用户输入密码 验证失败           时间:%time% >> c:/log.txt
set /A times=%times%-1
goto start

:end
echo 状态: 用户3次输入密码错误 程序锁定     时间:%time% >> c:/log.txt
title 验证失败?此次操作已经禁止?请关闭此窗口
cls
echo 3次验证失败   你已经被锁定 无法继续操作 你可以关闭本窗口了
echo 你也可以通过留言来与管理员取得联系 输入留言按回车提交

:m
set /p m= 请输入您的留言:
echo 日期:%date%     时间:%time% >> c:/message.txt
echo 留言内容: >> c:/message.txt
echo       %m% >> c:/message.txt
echo. >> c:/message.txt
echo 你的留言: %m% 已经记录,你可以关闭窗口或者继续留言
echo 操作: 用户留言             时间:%time% >> c:/log.txt
goto m

:ok
echo 状态: 密码正确 程序锁定解除     时间:%time% >> c:/log.txt
title cmd.exe
ENDLOCAL
cls
ver

如果你输入3次密码不正确,cmd就会被锁住,你还可以在CMD被锁的情况下留言,很有意思吧,
而且所有的操作都会被日值记录下来,在c:/log里。这对于一些木马能起到很好的防御作用,
特别是NC,重定向完全用不了,建议重写代码。

好了,现在再来谈谈这个方法的缺点:
对于一些不是靠后门的入侵,ctrl+c就把它搞定了,我估计你实际上已经登录上去了,只是被迫执行了一个批处理。我在telnet里试过了,但只是在回送地址里试的,有肉鸡的朋友可以在肉鸡上试一试。
然后你可以上传一个注册表文件来突破,新建一个记事本,键入如下内容:

REGEDIT4

[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Command Processor]
"AutoRun"=""

另存为unlock.reg文件就行了.然后另外写个批处理:

@echo off
copy /y unlock.bat %windir%/lock.bat
regedit /s unlock.reg

把unlock.reg放到c:/或windows目录下,运行批处理就可以解锁。
还有,我们一般是直接输CMD来运行它的,但如果加上参数又如何呢,我们可以试试CMD /d(更多参数用CMD/?),我敢保证你用了之后再也看不到这个批处理了。我举一个例子:
大家都知道后门是通过TCP端口绑定一个CMD.EXE,将攻击者的命令重定向到CMD.EXE,再将结果
通过网络传输给攻击者。
现在我给出一段程序(众人:为什么只有一段!!jimmy:不好意思,以后我写一个完整的后门
给大家,先暂时用别人的吧)

. . . . . . . . .
memset(&si,0,sizeof(si));
si.dwFlags=STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
si.hStdError=si.hStdOutput=wp1;
si.wShowWindow=SW_HIDE;
si.cb=sizeof(STARTUPINFO);
CreateProcess(NULL,"cmd.exe",NULL,NULL,1,0,NULL,NULL,&si,π);
. . . . . . . . .

有没有看出来,最后一行启动的是cmd.exe,如果我们改为
CreateProcess(NULL,"cmd.exe /d",NULL,NULL,1,0,NULL,NULL,&si,π);
嘿嘿。。。。。
上面的封锁完全无效。。。。。。。
在ASP后门里我们可以将cmd.exe /c换为cmd.exe /d /c

那么这样我们是不是没法防了呢?答案是否定的
我们可以为注册表设置权限然后把Remote Registry Service服务给停掉,甚至直接把cmd.exe的访问权限设为禁止任何人访问,再或者BT点直接把它删了算了,一了百了,省得活受罪。

那么这样就真的安全了吗?
在webshell的环境下,我们完全可以上传我们自己的cmd.exe,而且你要是写程序够牛,你就完全可以把cmd.exe或类似功能的程序附加在你自己写的木马里,用自己的cmd.exe。

看来真是道高一尺,魔高一丈啊,高手和菜鸟往往只一沟之隔,谁对细节问题把握深了,谁就能赢,黑客嘛,无非是在钻一些“空子”,给他抓住了,你就倒霉了。
在这里向Rain,剑心[B.C.T]致敬,感谢他们的文章给了我那么多启发。最后,祝愿大家技术进步。
                                 

                                                                                                                               -----------By jimmy
                                                                                                                                                                    27-May-2006

抱歉!评论已关闭.