实战是各个方向的结合,甚至没有明确的方向区分。下面将展示实战思路和Lampiao靶机渗透
实战思路
上面是我整理的一份实战思路和总结,看不清楚可以点这里
Lampiao靶机渗透
什么是Lampiao靶机?知道Lampiao前得先介绍一下什么是vulnhub
vulnhub是一个提供漏洞靶机的经典靶场,其中不乏一些高频漏洞,例如Log4j,Dirty cow,常见CMS漏洞等,非常适合萌新黑客练手。并且,vulnhub提供的靶机使用的是VMware镜像,和在线靶场所使用的docker靶机不一样,渗透环境更加真实。Lampiao是vulnhub中的一个非常经典的Dirty cow漏洞复现靶机。
接下来我们直接开始模拟一次真实的渗透过程
渗透环境
攻击者:kali(ip: 192.168.2.6)
受害者:一台服务器,其他信息全部未知,只知道和这台服务器在同一个内网
渗透过程
第一步:信息收集
我们已经知道需要入侵内网中一台服务器,可是服务器在哪?要怎么入侵它?一切都是未知的,既然这样,第一步当然就是信息收集
我们可以使用nmap -PS 192.168.2.1-225
对同一C段的内网进行存活主机扫描。-PS
是使用ping发包探测主机是否在线,同时可以粗略地检测端口。
经过扫描可以看到这台机子上开放了一个80端口和一个22端口,根据上面的总结不难看出这大概率是一台服务器,因为80端口通常就是用来提供http服务的
我们可以直接输入ip地址尝试访问
为了进一步验证猜想,可以用nmap -O 192.168.2.13
来探测这台设备的操作系统,结果如下
可以看到nmap推断其大概率运行的是Linux 3.X或4.X内核的系统
为了获得更具体的系统版本,可以通过各个端口服务的对应版本来推断。什么意思呢?就是我们需要扫描一下80端口和22端口提供服务的软件版本分别是什么,是提供给哪一个linux发行版的
可以使用-sV
参数再次进行扫描
通过扫描可以看到,22端口的ssh服务由openSSH提供,同时可以看到出这是个ubuntu版本,因此可以知道这台机器运行的系统是ubuntu,具体版本未知
接下来我们继续使用-A
参数来扫描有关这台机器的所有详细信息(刚刚不这么做是因为进行粗扫描能够更快断定一些有关信息,便于后面渗透方向判断),这里我们还需要设置一下全端口扫描,你可以使用-p 1-65535
或-p-
参数来设置。扫描结果如下
可以看到,在设置了全端口扫描后还发现了一个刚刚没扫出来的1898端口,并且是一个Apache的httpd服务,意味着我们同样可以使用http协议访问
尝试访问结果如下
可以发现这是一个后端登录界面,乱点看了一圈后发现没用什么有价值的信息,但页面最下面的一句Powered by [Drupal](https://www.drupal.org/)
引起了我的注意,搜索后发现这是个前端框架,并且发现了一个可利用的CVE漏洞
第二步:Getshell
经过上面信息搜集并了解这个CVE漏洞后, 知道CVE-2018-7600 根本原因出在 Drupal 对表单的渲染,发现可以直接使用MSF自带的攻击模块进行利用。先对msf自带的drupal模块进行搜索
根据Description内容,选中第4个模块,并设置options
show options
用来查看这个模块需要设置的内容。这里根据required
一列可以看到还差RHOST
这一项。在MSF所有攻击模块中,RHOST
需要填上的是被攻击对象。
需要注意的是,在这个攻击模块中RPORT
默认是80,需要修改成1898
执行run
就能成功拿到Shell
不过这个没有交互式Shell前缀的界面看着不太舒服,我们可以利用这台服务器上自带的python服务自己构造一个”伪Shell“,代码如下
python -c 'import pty;pty.spawn("/bin/bash")'
有兴趣可以去看一下pty这个包是什么
执行后就能得到一个类似正常交互式Shell的前缀,就能直观地看到当前所在目录和用户名了
第三步:权限提升
只拿到shell依然不能满足我们很多操作,例如我们没法看到一些存放在root文件里的东西,也没法执行一些需要更高权限指令。因此提权就十分重要。
到这里,还记得我们在信息搜集步骤时留下的一个问题吗?我们还不知道这个系统的具体版本是什么。但现在我们已经拿到了shell,查看版本就很简单了,只需要执行以下uname -a
就能知道
可以看到ubuntu版本是14.0.1。版本也知道了,要怎么提取最高的root权限呢?
直接给大家介绍一个曾轰动一时的提权漏洞,Dirty cow(脏牛)。
Dirty cow漏洞是一种发生在写时复制的竞态条件漏洞,它影响所有基于Linux的操作系统,包括Android,这个漏洞2007年起就存在于Linux内核中,直到2016年才被发现和修复。可以利用这个漏洞修改受保护的文件,也可以利用这个漏洞提权。 ——引自CSDN
下面来看看如何利用脏牛漏洞进行提权
kali中集成了许多漏洞的payload,可以使用searchsploit dirty
命令搜索自带的带有dirty
关键字的payload
这里我们选择第四个40847.cpp
作为payload进行提权,当然也可以选择其他的payload,只是经过测试后这个payload最稳定,成功几率也最高。其中这个payload的完整路径如下
/usr/share/exploitdb/exploits/linux/local/40847.cpp
我们回到刚刚的shell界面,执行两次exit
后退回到meterpreter,执行下面命令将脚本上传至服务器的 /tmp
目录下
upload /usr/share/exploitdb/exploits/linux/local/40847.cpp /tmp
再执行一次上面的python伪shell构造后(也可以不用这步),直接执行下面这段命令对payload进行编译
g++ -Wall -pedantic -O2 -std=c++11 -pthread -o re /tmp/40847.cpp -lutil
这里解释一下各个选项的用处
-Wall
允许发出gcc能提供的所有有用的警告,也可以用 -W (warning) 来标记指定的警告-pedantic
允许发出 ANSI/ISO C 标准所列出的所有警告-ON
指定代码优化的级别为 N , o <= N <= 3-std = c++11
就是用按 C++ 2011标准来编译的-pthread
在 Linux 中要用到多线程时,需要链接 pthread 库-o re
FILE 指定输出文件名,在编译为目标代码时,这一选项不是必须的。如果FILE没有指定,缺省文件名是a.out,这里是 re
编译完后会生成一个re
可执行文件,使用./re
执行
执行结果如下
可以看到payload已经帮我们成功修改了root用户密码为dirtyCowFun
,直接拿它登录即可
至此,我们便成功拿到了这台服务器的最高权限,成功黑入
附加步骤:通过普通权限的shell搜集有用敏感信息
假设你还没有进行提权,也可以通过对可读取文件进行一系列搜索,拿到一些类似数据库密码的东西
我们现在还是只单纯拿到了shell,对所有能看的文件进行查看后,在./sites/default/settings.php
文件里发现了下面这段代码
这就很明显了,数据库账号密码全部一览无余。直接尝试链接数据库
成功进入数据库,经过一顿查表查字段后,在drupal
库的users
表发现如下信息
可以看到密码被加密。可以选择爆破这串哈希值。但黑客有黑客的想法,既然爆破成本高时间慢,那不如就找个正常的密码算一下哈希值把这个密码替换掉吧
可是加密算法是什么呢?在目录里又是一顿找,发现./scripts/password-hash.sh
就是加密算法。经过代码审计后发现,利用方法也很简单,这里我用redshome作为替代密码,代码如下
再进入数据库把这段加密替换进去,这里以替换tiago为例
之后,就可以在刚刚的后台界面用账号tiago
和密码redshome
登录了