Metasploit第一次渗透记录(前渗透阶段)

      暑假闲着没事,图书馆借了本书叫《Metasploit 渗透测试手册》。其实很久以前就对渗透测试很感兴趣,就是没时间。渗透测试是个好听的说法,其实在我的角度看来就是入侵。请叫我屌哥,因为我两天前,开始学习,今天就差不多搞定了一台主机,虽然root权限搞不定。下面我就说说我的第一次入侵。

      我是要找练手的机器。本来我是好心好意,用xp虚拟机来测试漏洞,谁知道每次使用ms08_067_netapi 都会导致 Generic Host Process for Win32 needs to close,简直就是坑爹。据说是因为虚拟机Chroot Jail Cell不知道什么的原因。见这里。所以我还是找真机吧。

信息搜集:

目标网络:

      有什么地方是大规模的网络,而且被发现也不会被抓的?答案就是学校。所以我就从我们学校下手。选择学校还有其他原因:主机难以维护更新缓慢,使用者素质不同总会有漏洞。第一步就是上网找学校ip段,你懂的。假设我找到的是10.0.0.0-10.0.63.255。下一步就是nmap端口扫描。

扫描准备:

      扫描端口之前,有件事要先准备一下。就是准备一个VPN,这样可以稍微掩盖一下不法行径。而且VPN最好是查不到的。我就选择了AWS直接建个VPS,反正365天不要钱,不用白不用。

端口扫描:

      这时候就用到了metasploit,普通的nmap不能将扫描后的数据自动存到数据库,而且分析也是靠人的。然而metasploit里的db_nmap可以完成数据存储和初步分析。所以果断的,用db_nmap。首先要进入msfconsole,细节以后讲。

      差不多一个意思的nmap来一下,要注意不要一下子太多ip了,干等也不是办法。扫描完成后,可以用msfconsole的内置命令,hosts查看扫描的主机,以及vulns。一般都会有结果,就看临幸哪台主机了。比如我这出来的结果。最理想的是选择老的服务器,nmap有-O选项来检测操作系统。更有smb来更精确的检测,细节留下次。(在此之前我犯了2个错误,1是一定要windows服务器,2是认为内网更容易入侵)vulns

漏洞检测:

      差不多选定了一台主机,就到了深入检测的时候。这是在nmap利用充分之后的下一步。nessus著名的漏洞检测软件。虽然现在不开源,但是作为个人用,有免费版,虽然有限制,但我感觉完全够用。这个还有下载安装注册。具体见主页

      nessus确实吊。是他找到了我这次入侵的突破点,虽然我完全不知道这是如何做到的。。其中这个结果引起我的注意。自己尝试一下,确实是个漏洞。然后又google了一下,发现这可能还有个更危险的漏洞,CVE-2011-4908,可以上传文件。那一切就好说了。我认为这就是切入点,虽然我还不清楚这个joomla!的版本,但能确定这个版本很老。现在都3.0了。joomla

上传shell:

      metasploit自带上传文件的工具,如下一气呵成,这就是metasploit的威力。exploitstep

      可是没有成功。我很疑惑,手动去上传,改名字什么的都行。参考web application,我也实现的同样的效果。我觉得是metasploit出bug了(后来发现应该是网站做了防护措施,检测文件编码和大小)。所以这还得靠手动上传。步骤如下:

  1. 找个合适的能运行命令的php文件,改名为r.ph.p。具体代码见参考
  2. 上传到网站页面,(我就不显示网址了)
  3. 重命名去掉. r.ph.p => r.php
  4. 运行r.php

      这些步骤具体都能在web application里找到。最后结果:webshell

总结:

      现在我只是上传了一个文件,能远程执行代码。这完成了入侵的第一步。接下来的事情才更有趣。真的是像探险一样。各种发现,各种偶然,我真TM是个侦探!
      这给我们的教训是:不要使用过期的软件,要及时更新系统!
      以上仅供学习,我还是那句话:进攻是为了更好的防御。说不定现在我的博客网站正在被攻击,而我从这次入侵中学到的教训可能救了我网站一命。还有,我不会恶作剧,可以看看接下去我发现了什么,我可以做一件足以让其主人崩溃的事,rm -rf。。。但是我没有,我会跟他讲的,他的邮箱已经找到。我也没有泄露网址,所以我不是个坏人,不要抓我。。
      今天先说到这。累成狗。

参考:

  1. nmap常用命令
  2. nessus blog

 

复制来的简单php shell代码,我忘记从来的了,文件里也没有署名,真对不起作者。

 

[第13天]定时器优化

      强迫症改不了,本来想好12,13天一块写掉,因为能记录的内容不多,但这样总感觉不舒服。所以还是分开写了。

      今天是定时器的优化,为什么要优化呢?这跟处理鼠标和键盘数据的道理是一样的。定时器会触发一个中断,而处理中断的时候CPU不能做其他的事情。所以要加快中断处理。因为之前的是char类型的FIFO,在时间处理上不太够,因此重写使用int类型的FIFO32。

优化思路:

  • 定时器链表:因为每个定时器都有一个超时时间,只要按超时的早晚顺序把这些定时器链接起来即可,每次只要看看第一个定时器有没有超时即可。
  • 哨兵:这是为了简化程序,哨兵是链表经常使用的技术。在这里,是设置一个永远不会超时的定时器,实际上就是0xffffffff。由于这个的存在,实际上这个操作系统在经历 (0xffffffff/中断频率) 秒后就会失效。

      所以得出的中断处理的代码如下。其他代码见github

疑问:

      我就想不通,为什么不是每次中断然后把这个中断信息存到FIFO里,然后在主程序里处理呢?这就是处理鼠标和键盘数据时的做法。直到第16天,我才恍然大悟,确实定时器是特别的。因为定时器涉及到任务切换。仔细想想,如果我是多任务的,然后定时器的数据都由主任务处理,那么在执行其他任务的时候就不能处理定时器了,就再也不能任务切换了。但也可以每个任务都处理相同的定时器,这得多麻烦。所以在中断时直接处理是合理的,而且直接导致后面的任务切换也在inthandler20里。妙及了。

性能:

      作者是通过计数来测试性能的。作者的电脑是有多老,我的计数结果差不多是其百千倍。。所以看看结果如何。

couter4

[第12天]定时器

      6月简直就是废了,大作业加考试,没时间搞自己的东西了。我擦,换了个键盘,打字真tm舒服。

      接着干《30天自制操作系统》,时间太久,都不知道第12天到底干了什么了。原来是定时器。为什么操作系统需要定时器呢?因为中断,因为要多任务分配时间槽。MD,一下子就明白了多任务的原理。以前完全不了解。以前我是这么想的:多任务肯定需要调度,那么必须有一个主任务一直在运行,那么其他任务怎么运行?

PIT:

      操作系统使用的是PIT(Programmable interval timer),就是用他来产生中断,然后处理中断。而这个跟硬件的时钟频率密切相关。基本上用的都是Intel 8254。如下设置,可以使其产生100HZ的中断频率,具体原因看说明。然后bochs有点问题,可能是我配置不当。时钟总是不对。virutalbox和qtemu都没有问题。

中断处理:

      接下来就是中断处理。跟鼠标键盘事件一样先要注册中断处理程序,具体见github。然后可以扩展到真的定时器,原理:设置超时时间,每次中断后比较是否超时。当然这是最简单的,效率不高,可以优化很多。这里就展示一下核心的中断处理程序。

 多个定时器:

      这个的实现原理与图层类似,就是设定一个数组,存放对应的定时器信息。有了这个就可以进行多任务了。但是今天和明天都还有很多优化要做。

      顺便提一句,GCC的优化是必要的。GCC -O1直接将编译好的代码缩小了近2/3。但是这会导致之前第十天说的bug,所以还是跟作者一样把检测内存的代码改成了汇编。好像volatile也可以起到作用。最后是今天结果。

counter