Mctrain's Blog

What I learned in IT, as well as thought about life

Metasploit Learning Outset

| Comments

这周开始看和学《Metasploit》,真是一个神器啊!原来这种工具还有一种比较学术的、很有正义感的名字叫”Peneration Test Tool”啊,不过也确实很有道理就是了,毕竟攻击与防范真是因人而异,其实我觉得如果要实现一个相对安全的系统就先拿所有这些所谓的Penetration tools测试一遍,虽然说从来就是先有矛再有盾,但毕竟如果能对抗所有已有的矛,那这个盾也足够强大了,至于那些新发明的矛,可以通过一些特征标识检测机制来减少,如果想彻底防范所有的攻击那是不可能的!当然啦,要通过现有的所有Penetration Tests困难还是挺大的,而且并不是所有人都有这么高的安全意识,这也就造成现在攻击泛滥、隐私无处藏身的危险境地。做安全的人必需地先懂得攻击,这是我自己理解的,懂得攻击的方式很多,可以从最底层开始,比较理论而深入地去学习每一种攻击的原理,也可以从一些现有的工具下手,来分析它们的漏洞查找手法和所找到的系统漏洞的特点,在我看来,太过于强调前者不是那么地贴近实际,而太过于依赖后者最多也就只能算是个名不见经传的小黑客,所以,我希望能联系两者,即能通过一些paper来比较深入地理解大部分攻击的原理和概念,又能熟练掌握一些或是开源或是收费的工具,更现实而直观地探测它们的可行性。经过了一段时间的survey,我发现了很多超级强大的工具,从各种角度来进行各种攻击,比如进行网络抓包的Wireshark,强调于局域网中间人攻击的Ettercap,简单而又强大的nmap,牛逼的密码破解和ARP攻击的windows下面的Cain,还有寻找漏洞的NeXpose和Nessus…最后我打算从Metasploit这个”神器”入手进行扩展,一个是因为这是一个开源而且被广泛应用的Framework,功能确实无比强大,整合了很多的module和plugin,而且《Metasploit》这本文档也写得很不错,不仅仅是介绍攻击方法,而且框架很清晰,从攻击的流程来进行说明,很有往下看下去的欲望。

在Metasploit这个Framework里面内置了很多plugin,比如前面提到的nmap,NeXpose,Nessus等等,而且它还提供了特别多information gathering和vulnerability scanning的模块你可以直接使用,并用show options来直观地查看它们的用法,当发现了某个漏洞,还可以用它内置的数不尽的payload进行exploit,更重要的是在exploit成功之后还有一个amazing的meterpreter来处理post-exploit的事物,全面控制target。当然啦,到目前为止我只看到这里,后面还有许多方面的介绍,实在是值得一读。而且,它还提供了一个ubuntu系统和一个window XP系统让你进行实验,毕竟攻击真实环境中的机器是不合法的。

这里记录了一些简单的笔记,基本上都能从书中找到,认真学习它肯定能有收获,这个工具的使用是我这个月的计划之一。不懂一个月能不能了解个大概:-)

Terminology:
Exploit
    An exploit is the means by which an attacker take advantage of a flaw within a system, an application or a service.
    Common exploits include buffer overflows, web application vulnerabilities(such as SQL injection) and configuration errors
Payload
    A payload is code that we want the system to execute and that is to be selected and delivered by the framework.
Shellcode
    Shellcode is a set of instructions used as a payload when exploitation occurs, after which in most cases, a command 
    shell or a meterpreter shell will be provided.
Module
    A module in the context of this book is a piece of software that can be used by the Metasploit Framework.
Listener
    A listener is a component within Metasploit that waits for an incoming connection of some sort.

还有一些指令和module:

Basic Scan
msf > db_connect postgres:psw@127.0.0.1/msfdb
msf > db_import file.xml
TCP Idle Scan: auxiliary/scanner/ip/ipidseq
Port scan: search portscan
SMB Scan: scanner/smb/smb_version
MS SQL Server Scan: scanner/mssql/mssql_ping
FTP Scan: scanner/ftp/ftp_version, auxiliary/scanner/ftp/anonymous
NeXpose
msf > db_connect postgres:pwd@127.0.0.1/msfdb
msf > load nexpose
msf > nexpose_connect username:password@ip:3780 ok
msf > nexpose_scan target_ip
msf > hosts -c address
msf > vulns
Nessus
msf > db_connect postgres:pwd@127.0.0.1/msfdb
msf > load nessus
msf > nessus_connect username:password@ip:8834 ok
msf > nessus_policy_list
msf > nessus_scan new <policy id> <scan name> target_ip
msf > nessus_scan_status
msf > nessus_report_list
msf > nessus_report_get <ID>
msf > hosts -c address,svcs,vulns
Validating SMB Logins
msf > use auxiliary/scanner/smb/smb_login
msf > set RHOSTS/SMBUser/SMBPass
msf > exploit
VNC Authentication
msf > use auxiliary/scanner/vnc/vnc_none_auth
Open X11 Server
msf > use auxiliary/scanner/x11/open_x11
#key-stroke logging using Back|Track's xspy tool:
cd /pentest/sniffers/xspy/
./xspy -display ip:port -delay 100

云云尔尔…


另外,这周还看了一个关于彩虹表的介绍,确实是牛逼啊!很想下个120G的彩虹表下来,这里用wiki上的例子简单介绍下这个彩虹表吧,具体的参看wiki, 之所以会出现彩虹表这个东西,主要是由time cost和space cost的trade-off引入的。简单来说背景是这样的(采用这里的例子):大家知道如果要破解一个经过hash加密(比如md5)的密码,有两种最直观的方法:

1. 枚举所有你可能想得到的明文,用md5算一遍,如果结果等于该密码则成功,这要消耗大量的计算资源和时间
2. 列一张包含所有明文映射成密文的表,通过表查找密文,这要占据大量的存储空间

举个例子,对于14位的大小写加数字(不包括特殊字符),组成的密码集合为(26x2+10)的14次方即12亿亿亿,如果每纳秒可以计算一个,需要4亿年时间,如果hash结果为128bit即16字节,存hash就需要10的26次方字节空间,如果1GB硬盘算五毛,需要5亿亿人民币!况且查那么大的表也需要时间,这个谁能受得了?如果再加上特殊字符就更不可想象了。

而rainbow table就是平衡了这两种资源,采用了一种叫Hash chain的技术:

假设我们知道这个加密的Hash function H,以及一个有限的密码集合P,在初始化阶段,我们定义另外一个hash function R,从P中随即选取一组密码,对每一个进行如下计算:

aaaaaa --H-> 281DAF40 --R-> sgfnyd --H-> 920ECF10 --R-> kiebgt

进行k次,k的大小决定了chain的长度(k越大,最后计算的时间可能更多,单占用的存储空间可能更小,这取决于你的decision),我们仅仅存储第一个(aaaaaa,称为starting point)和最后一个(kiebgt,称为end point),之后当我们需要破解一个密码h(比如920ECF10)时,我们从h开始计算chain,从应用R开始:

910ECF10 --R-> kiebgt

当遇到一个值等于所记录的所有end point中的其中一个则从相应的start point开始重新计算一遍它的chain:

aaaaaa --H-> 281DAF40 --R-> sgfnyd --H-> 920ECF10

所以得到密码为sgfnyd。当然还有另外一种情况如下:

FB107E70 --R-> bvtdll --H-> oEE80890 --R-> kiebgt

虽然它的end point为kiebgt,但是910ECF10并不在这条chain中,这种情况称为false alarm,当遇到这种情况我们就忽略这个match,从kiebgt开始继续计算chain,当计算的次数超过k,则表示在我们的存储中没有相应的密码h,则从P中重新选取另外的集合计算chains。

这是rainbow table最基本的原理,当然它没有这么简单,还有许多需要考虑的问题,比如R如何选择,k要取多少……具体的细节请参考rainbow table wiki。


这周还把电脑换成64位了,现在的本本已经有8g的内存啦!!!用起来好爽啊!硬盘也整理出来更多的空间,等暑假买了mac就可以有两台本本给我好好折腾了,想想都happy啊~不过装机的代价就是这周又没干什么正事,明天想好好看篇paper,这周选的是:

Vanish: Increasing Data Privacy with Self-Destructing Data

主要是因为现在有一个关于attack-aware system的不成熟的idea,不过想想觉得可能比较不现实,总之先简单survey下吧。想idea真是一个苦差事啊,未来的5年怎么办啊!!!


考研的国家线就快要出来啦!小呆一定要进复试然后被录取啊!现在突然感觉好寂寞啊,每天都不想出去就待在实验室,以后的生活一定不会是这样的单调,有点期待去交大的生活了,毕竟是去一个新的环境,认识新的人,开始新的生活。但是现在人生突然没有了激情啊。。。连打球都没了激情,小呆快点过来啊!木头现在好寂寞啊。。。

Comments