远程攻击学习ABC—从SATAN开始的漏洞收集(下)
寒路
12、获取NNTP(网络新闻传输协议)信息:
很多时候通过NNTP是攻击时获取目标主机信息的最好办法。NNTP本身是用于新闻组server之间交换新闻的协议,它也适用于新闻浏览器跟新闻server之间的协议。仔细的搜索每条向目标主机地址中发送的网络新闻你就会发现这里面也有目标主机内投送源的Email地址或者部分由目标主机用户投送的消息。但不管源自何处,这对攻击来说都将是收集目标主机信息的方便之门。尽管NNTP可以在投送时选择信任的主机来保护它的信息。但诸如tin可以解释在新闻中潜入的MINE语句,可投送本身却隐藏着一个错误。如果有一条对.rhost文件做外部ftp的MINE语句,那么就会很容易的为信任攻击打开系统之门。这对安全来说可不是什么好事情。
13、收集关于路由的信息:
得到目标host所在的该网关是否运行这对攻击来说是很重要的。因为网关程序信任来自未授权源的路由包。当然了,首先你得明白网关与主机间的区别。网关是连接到多于一个网络的设备,它可以有选择把数据从一个网络转发到其它网络中。路由器则是有着专用的网关。而网关化的路由程序允许向其它路由守护程序广播路由表信息,这些路由包可以用来建立目标主机中每个系统的路由表图,它们还有助于向这个域内的系统珍表增加host name。这些查询可以利用netstat -nr来完成。通过查询可以知道目标段的IP是采取的哪个路由器connect的。
14、获取identd信息:
获取目标host是否运行了一个或者多个identd server,这对于判断出跟有连接的网络信息。像获得运行着pidentd,那么起码可以得到一些用户的信息和系统版本的信息。比如说当现在我有个认识的人他在我的ICQ中,而他同时又是semxa.com的一个用户,此时他正登陆在semxa.com上,那么我可以利用ICQ发消息给他保持住跟他的connect,这样我就可以利用工具SOidlook(ftp://semxa.technotr.com/tools/)得到identd信息。获取identd信息之后很有用,可以针对semxa.com的auth port利用ICQ跟semxa.com的用户的连接再做N次connect的尝试,impersonation成该用户再摸索一些诸如FTP server的bounce等漏洞(如果有的话),指定shell或者注册port作为server的目标port,并且scan客户机上all可能的port。如果说可以匹配的话那么就可以得到有用的rsh或rlogin对semxa.com访问权的用户。当然现在这只是猜想而已。最重要的还是能得到identd信息。
15、获取IP层信息:
我需要知道semxa.com是否允许IP源路由及IP转发。可以在传输层通过IP转发向NEtWork发出一个包尝试得到响应。但不幸运它的firewall没那么差。捷径没有但还可以利用Kit Vtivoy的路由跟踪程序Rtracker(ftp://semxa.technotr.com/tools/)来完成,通过对loose源路由用-g选项从源路由给目标路由发一个包如果能得到一个响应的话就算OK。获取是否允许IP源路由及IP转发是因为IP包分段本身不安全。如果说能通过Packet pry看到这种分段的happen,理念上可以截获连接同时再deceiving TCP头利用这种分段得到
根的impersonation。我尝试了tcpdump但无收获。前几天那位来自Gallo
Mr rhinoceros在这里提到过可以在合适的时候"passed aggravate load begets of middle router fragments......"(CITE),不知道他可否能将步骤变成文字与大家Share。
16、获取Simple network Management Protocol(SNMP)信息:
SNMP是一个允许远程程序方便NetWork管理的server,它是个简单的NetWork管理协议,是与TCP/IP NetWork中像router、交换器、集线器(HUB)进行通讯的一系列标准。通过SNMP可以获取到host与route的信息。收集SNMP信息得从SNMP传输请求想起。一个SNMP请求包含一个Community name,它用于目标系统上的snmpd守护程序认证访问请求,而请求有两种,一种是SNMP GetRequest;另一种是SNMP SetRequest,在这里我不会假设你已经掌握了关于SNMP技术,因为We here of MOSES Dave Goldsmith的那篇〈once The attacked on
entireness using SNMP〉比什么都详细,你需要去读一下(如果你还没看过的话)。不过我
个人认为SNMP的明天不会很长。
17、其它更多的信息:
事实上在获取信息的时候每个数据都是不应当放过的,因为一时的疏忽可能会使你失去机会。了解目标主机中所有的信息,这对最后整理很有用。除了以上所说的之外还应获取更多的(如果有时间的话)像可否进行Packet pry、NTP、relay chat、talk、systat、gopher、UUCP、CGI、编译器信息等等。最近以来,UUCP的安全问题一直在GOLD COAST上讨论的比较热闹,而我在一段时间内也很注意UUCP,但从上次Chameleon的“UUCP--age-old UUCP of
safety problem”起,其可利用性也就随着“age-old”在我脑海沉没了。虽然如此,但也并不意味着放弃(如果有的话)。
从上面开始到了现在也算是收集的大部分的信息,那么整理这些信息是很有必要的,这样看起来清楚一点不至于有疏漏。一般情况下我在收集完结束之后会搞一个像下面的一样的表格:
host :www.semxa.com
port server:21ftp、22SSH、23telnet、25SMTP、117UUCP……
——————————————————————————————
ftp server open os Digital UNX Version
bugs log:
………………
这样下来可以随手找到信息的。很方便。
前头所描述的是一般普通攻击手工简单收集和获取目标主机的信息的一种思路,之所以在表现SATAN中很大篇幅的说它,那是因为跟SATAN的本身是很有关系的。所有的信息手工收集起来需要很长时间也同样是一个巨大的工程。可能会花去你四到五个小时去做。而这些工作换成SATAN去做的话,仅仅在几分钟便可完
成,同时还会对那些已经植入代码的漏洞进行攻击尝试。如果说上述的信息都可用SATAN来完成的话,那么就可以断定,用SATAN扫描网络将是一个很危险的动作,这危险是相对恶意破坏而言的。
SATAN在扫描中很重视到目标系统中各种TCP and UDP端口上比较活跃的进程。但这些又取决于用户指定的扫描类型。在SATAN中,它的类型根据网络状况存在着三种扫描程度,这分别是:low-grade(轻度)、normal(标准)和grievous(重度)scan。而这三种程度又具体表现为:
low-grade(轻度)扫描:
这种状态下的扫描是从DNS、rpc、portmap进行的。
DNS扫描时利用nslookup(Unix上一种交互式查询Internet主机、server名字的命令程序)来收集有关目标主机的更多点信息,这些信息包括目标主机的MX记录和授权nameserver。
rpc扫描目标主机portmap请求一张服务列表,而后对列表进行扫描查询:
bootparam、ypbind、selection-SVCnfs、rexd、arm、mountd、rusersd、
netinfobind以及admind。
如果说portmap的服务列表中显示有mountd,那么SATAN就会进行showmount扫描,首先会要求目标的mountd给出一个列表,列表中显示哪些文件系统输出和哪些主机被允许加载它们。最后会要求目标mountd列出实际加载文件系统的host和被加载的文件系统。showmount是Unix中一个消息查询的命令,它可以给出一台远程主机上的NFS信息,比如用$showmount -e 4.4.4.4。这样的扫描不做普通的TCP and UDP扫描的,扫描范围比较小。
normal(标准)扫描:
标准扫描包含了轻度扫描的所有内容,同时增加了对fingerd、各种TCP服务以及UDP服务的扫描。扫描时会根据结果和扫描规则库有选择的对rusers(这是个Unix上消息查询的命令,可以显示出一台远程机器上登陆用户列表)、bootparam和yn进行扫描。
finger的查询无须再说了。
SATAN随后会对TCP进行扫描,以便得到目标端口上活跃的gopher、http、FTP、telnet、SMTP、NNTP、UUCP以及X等服务。再者就是UDP端口上的DNS与Xdmcp的扫描。如果说查询时portmap报告回来目标的rusersd是可以用的,那么SATAN就会请求rusersd给出都有哪些用户,他们是从哪个系统上登陆进入的等等。
rpc bootparam服务可以让SATAN获取NIS的域名,如果SATAN一旦获得了这个域名的话,SATAN就会开始启动一个up -chk程序来尝试从NIS server上获得passwd、byanme映射。
现实中SATAN标准扫描是比较常用的。因为很多机器到这里就已经可以达到驾驭它的目的了。
serious(重度)扫描:
这次扫描包含了上述两种的全部内容。增加了对那些比较活跃的服务的更多一些的扫描。TCP的端口也从1到了65535(但默认时是1到9999),UDP的端口则是1到2050,32767到33500。很显然,这需要时间和多点资源了。
上面这三种扫描其实仅仅只是SATAN扫描的前个阶段,主要是为了收集目标机器的信息。
在SATAN的规则扫描中包含了一些常见的安全漏洞的检查。但并不包含所有已知漏洞,这需要你来自己增加。经常的更新自己的SATAN漏洞库集对发现新漏洞是很重要的。通过创建一个新的.satan并将它放到bin/目录中就可以完成增加一个新的扫描了。
建立SATAN也很简单,但却很麻烦。在SATAN软件包里包含了大量的HTML构造起来的Web页,这些Web页是很重要的,因为很多漏洞的信息来自这些页面。上面简单的说了些关于建立SATAN的方式。在config/目录下编辑paths.pl and paths.sh文件,实现你做需要的文件放置位置;接着可以根据你自己的要求去编辑config/satan.cf,可以根据自己的需要考虑给$only-attack-these and $dont-attack-these增加一些
简单的实用的内容(这两个变量提供对SATAN扫描主机时的控制);运行rcsonfig脚本(应当注意的是这个脚本是Perl5.00x and a Web浏览器的增强脚本,如果rcsonfig选择的Web不适合,那么编辑config/paths.pl指向这个选择的浏览器,这时的Web浏览器变量是$MOSAIC);在satan-1.1.1/目录下执行make指令;如果你想隐藏自己或者是需要一个代理的话(因为这个时候会提示给你的)在SATAN的文档中特别说明了不需要设置代理环境变量或浏览器代理;以root登录运行SATAN脚本,如果没有给出命令行参数,脚本调用一个小的Web server,也就是html.pl,再与之进行对话……一切妥当之后SATAN的主界面便会出现。
由于SATAN操作很简单,就如何使用它来描述可能有点prosiness。《:-)首先启动SATAN,毫无疑问,启动它需要#。administrators在使用SATAN的候最好是将其配置成拒绝本地以外的IP来运行SATAN,但这也不完全可以防止。因为一般情况下使用IP欺骗便可以饶过这个环节。接着配置管理选项,对www.semxa.com这单一的目标进行扫描必须将proximity最大设置成0并且关闭子网的扩展或者过早的编辑config/satan.cf,根据需求再利用$only-attack-these变量将扫描限制在单一之上。然后选择"Change the C-nfiguration File"项save修改。很多时候把限制放松到一个整的网段效果会好许多,但这取决于你是否有这个时间和精力。
最后在"Target Selection"中植入目标地址,接着选择scan degree启动扫描就over了。后来需要做的就是等待结果。当SATAN的子线提示已经完成时,就可以在SATAN的Data Gather Of Screen选
"View primary target results"来浏览结果。也可以在SATAN的子目录results/s-ata-data来看。
信息和弱点收集结束接着能做的就只有空洞的分析那些结果了。This is the
job nerve-racking,当然只是就我而言的。:-\对于www.semxa.com,现在已经收集到了很多信息在我的表格中了,“对号入座”是目前该做的事情了。在SATAN收集到目标机器的OS的时候,我抽了这个空余时间到www.netsafety.com收集关于那个OS的所有漏洞的信息,有了它我就可以在SATAN的报告中标识出哪个可以用哪个该放弃。所以说经常留意最新的安全弱点报告是很重要的。但目前应当做的还是需要第一个能登陆系统的用户和它的口令。
对于匿名可以进入的系统来说,这无疑是一个好的兆头。虽说匿名的FTP本身并不是个漏洞,但是它却可以使攻击者能获得这个系统的信息以及更多的包括内部SATAN不能逾越的漏洞,甚至可以因为管理员的低级配置而获得/etc/passwd文件。
目前在Internet上,提供匿名服务的系统依然很多。我们花点时间来探讨一下这些吧(如果你也有时间的话)。但匿名FTP的未来我想应该不会很长远吧,毕竟它是一个潜在的安全隐患。
从Unix上设置匿名的FTP服务路径:
$mkdir/home/ftp
$cd /home/ftp
$mkdir bin
$mkdir etc
$mkdir pub
$mkdir lib
$cp /bin/ls /home/ftpbin
$chmod 111 /home/ftp/bin/ls
接着需要创建只能被匿名FTP用户使用的FTP组,这个组没有其他成员的组,把这个新创建的组所能使用的项加到/etc/group文件里,再创建一个单独的
$mkdir /home/ftp/etc/group
FTP::50
建设匿名的FTP用户名,方法是把该用户的项放在/etc/passwd中,并创建一个为/home/ftp/etc/passwd文件,当然它只能包含该FTP项。内容表现为:
FTP:*:23:32::no shell
接着需要做的就是把这个项设置成只读444:
$chmod 444/home/ftp/etc/passwd
$chmod 444/home/ftp/etc/group
以上这是一般的Unix上匿名FTP的配置。从上面的no shell不难看到匿名的FTP用户登陆后是无法通过shell对系统进行操作的。如果说出现可以通过shell来操作系统或的匿名FTP用户拥有合法的shell的话,那这个管理员一定是个Zanily Gink。
而所谓的匿名用户获取/etc/passwd那也是属于管理员配置上的低级错误。匿名FTP的/home/ftp/etc目录里包含了passwd和group文件,这几个文件允许匿名用户使用ls来显示它们名称,但不是UID。至于passwd文件的密码域则是不可用的。但如果说管理员不慎把/etc/passwd和/etc/group文件copy到了/home/ftp/etc目录下,那么攻击者就该偷笑了。还有的危险就是telnet to ftp 21如果允许执行SITE CHMOD and
SITE EXEC、/home的所有者是匿名FTP的用户,那么随便就可把权限设置成777或者更多的进行修改等等等等。可semxa却没有匿名FTP服务,所以上面的话只是我想到了才说的。haha……:-x
*就SATAN而言。www.semxa.com的实际漏洞并不是很多,但却有一个绝对够级别的漏洞——mount的漏洞。这是一个很老的漏洞了,据说可以延伸到VAX年代,Sun的描述是“如果两个连续的mount -d -s命令在几秒内发送给机器,则请求被实现……”。而对缓冲区溢出来说,一直是受到关注的。以缓冲区溢出为类型的安全漏洞是最为常见。但要利用缓冲区溢出上的漏洞那么你就得熟悉汇编语言、c and Unix、Windows甚至是Linux以及更多的系统。否则你只能看着别人去模仿,这是很不自然也很不方便的。当然了,最重要的还是你得知道溢出的是什么缓冲区。Mixter95年曾经写过一篇初级的关于缓冲区溢出的利用的文章《Writing buffer overflow exploits - a tutorial
for beginners》,我在这里纯粹是起一个“广而告之”的作用。看这篇文章你可以到http://semxa.kstar.com/HANLU/buffer95.txt看到全部。*
我提倡把扫描的结果建立成表格的形式,是因为这样可以使你更好与漏洞进行匹配,这是很值得的。熟悉英文的用户在建立了表格之后可以去BUGTRAQ找,最重要的在这里你甚至还可以相匹配的攻击代码。而厌烦English的用户则可以去www.105.com.cn,这是一个很有价值的站点,在这里可以找到97年至今的各个系统的安全漏洞,当然大部分也是带有代码的。
怎么利用所收集到的漏洞进行攻击暂时不是这个文章所讨论的问题。可事实上讨论漏洞如果利用却一直是很得到重视的,很多朋友都这么以为。可我认为这是后话,只是觉得一个真正的技术上的成功的背后大多是有着坚韧而不舍弃、勇往追求的执着精神努力而来的,绝不是从天上掉下来或者是从娘胎里带出来的“天生的天才”。如果说一个潜在的漏洞所能给你得到的是一个最高权限的话,那么没有任何漏洞的情况下呢?当我们还在尝试Modem的拨号入侵甚至是再深奥一点的时候,美国人却正在进行着DCC attack,不由得发现世界如此之大,可我们太肤浅了……
请相信一步难上青天,需要点点滴滴……