环境

  • VMware Workstation 15
  • 靶机 DC-2
  • 攻击机 Parrot
  • 网段 192.168.136.0/24

信息收集

大佬一点开文章就看到本渣在用nmap扫描局域网

sudo nmap -sS -Pn -A 192.168.136.0/24

好的,发现一个IP,根据nmap收集到以下信息

  • 80端口
  • Apache 2.4.10
  • Debian 系统

访问Web

当打开192.168.136.132时,发现地址栏变成http://dc-2/,找不到IP

回过头看一下nmap反馈的信息,我遗漏了一个信息,就是当我们访问web时会重定向到http://dc-2

问题找到了,我们可以在修改/etc/hosts,添加一行

192.168.136.132   dc-2

保存退出,重新访问一次即可

很明显,这是一个WordPress搭建的博客,根据Wappalyzer插件这插件我吹爆可以得出相关服务版本信息,并且发现了一个Flag页面,浏览一下

Flag1

反手复制打开translate.google.com粘贴,

Flag1:

您惯用的字词列表可能无法使用,因此,也许您只需要cewl。

密码越多越好,但有时您根本无法赢得所有密码。

以一个身份登录以查看下一个标志。

如果找不到,请以其他身份登录。

提示可能需要爆破用户名和密码,好的,先使用WPScan工具扫一下有没有其他可以利用的漏洞

WPScan是很多安全系统默认自带的一款漏洞扫描工具,它采用Ruby编写,能够扫描WordPress网站中的多种安全漏洞,其中包括主题漏洞、插件漏洞和WordPress本身的漏洞。最新版本WPScan的数据库中包含超过18000种插件漏洞和2600种主题漏洞,并且支持最新版本的WordPress。值得注意的是,它不仅能够扫描类似robots.txt这样的敏感文件,而且还能够检测当前已启用的插件和其他功能。

如果没有可到Github下载,安装过程不演示了

WPScan扫描

# 先来更新一下数据库
wpscan --update
# 因为我们已经在hosts文件添加了一条解析,所以我这里直接用dc-2 先不添加可选参数试试
wpscan --url dc-2

WPScan不添加可选参数默认会扫描了一些版本信息,插件,配置文件备份等等,这里扫描到了xml-rpc接口,该接口可以管理WordPress,比如发布文章等,也可以用来爆破用户密码,所以感觉没有特殊情况关闭为好

xml rpc是使用http协议做为传输协议的rpc机制,使用xml文本的方式传输命令和数据。

看一下WPScan常用的参数

  • --url URL
  • -e, --enumerate [OPTS] 枚举

    • vp 枚举有漏洞的插件
    • ap 枚举所有插件
    • p 枚举所有插件
    • vt 枚举有漏洞的主题
    • at 枚举所有主题
    • t 枚举流行的主题
    • tt 枚举缩略图
    • cb 枚举备份配置文件
    • dbe 导出数据库
    • u 枚举用户
    • m 枚举媒体
  • -t, --max-threads VALUE 最大线程数,默认为5
  • -U, --usernames LIST 枚举用户

    • --password-attack ATTACK 指定用户爆破密码
  • -P, --passwords FILE_PATH 爆破密码,当没有指定用户时候,会默认使用-e u枚举出来的用户进行爆破

枚举WP用户

wpscan --url dc-2 -e u

很快枚举出了三个用户adminjerrytom,接下根据Flag1提示进行爆破,但是我使用Github找到字典爆破了一个多小时都没爆出来,感觉方向错了,不妙,然后涉及知识盲区,无奈之下瞄了一眼WriteUp,发现Flag1中我又遗漏了一个重要信息,就是cewl,这个cewl翻译出来是鼠标,只怪自己知识面太窄了,不知道这玩意,然后根据writeup提示,这是一个字典生成工具,原来Flag1的提示叫我们用cewl生成字典爆破,难怪他会说我们的字典需要足够强大

Cewl

此处关于Cewl用法转载自Freebuf

Cewl是一款采用Ruby开发的应用程序,你可以给它的爬虫指定URL地址和爬取深度,还可以添额外的外部链接,接下来Cewl会给你返回一个字典文件,你可以把字典用到类似John the Ripper这样的密码破解工具中。除此之外,Cewl还提供了命令行工具。一般安全系统都会自带,例如Kali、Parrot

默认用法

以下命令爬虫会根据指定的URL和深度进行爬取,然后打印出可用于密码破解的字典

cewl http://dc-2

保存字典

cewl可将打印出来的字段存储为文件,使用-w参数将密码字典存储为txt文件

cewl http://dc-2 -w dict.txt

生成指定长度的字典

使用-m参数设置长度,例如生成长度至少9位的密码

cewl http://dc-2 -m 9

从网站中获取Email

使用-e选项来启用Email参数,并配合-n选项来隐藏工具在爬取网站过程中生成的字典

cewl http://dc-2 -n -e

计算网站字典中重复的单词数量

计算目标网站中某个词重复出现的次数,使用-c参数

cewl http://dc-2 -c

增加爬取深度

使用-d参数指定爬取深度,默认深度为2

cewl http://dc-2 -d 3

生成包含数字和字符的字典

生成包含数字和字符的字典文件,可以使用--with-numbers参数

cewl http://dc-2 --with-numbers

更多用法参考FreeBuf

爆破密码

好了,回到DC-2靶机,我使用了cewl简单生成了一个名为dict.txt字典文件,使用WPScan爆破,设置50线程,跑快一点

wpscan --url dc-2 -e u -t 50 -P dict.txt

很快就跑出了两个用户的密码

jerry:adipiscing

tom:parturient

登录后台

既然已经拿到了两个用户的密码,就登录一下看看有没有可以GetShell的可能时长两年半的渗透实习生未曾Get过Shell,毕竟根据Flag1提示说登录以下找到下一个Flag,如果一个用户找不到就切换用户

首先登录一下jerry:adipiscing,好的问题来了,登录地址搁哪呢?好吧,我们可以使用各种网站目录扫描工具扫描一下,尝试扫出登录地址,例如御剑、dirseachdirmap等等,或者在网上查询一下WordPress的默认后台地址,这里使用各种目录扫描工具均能扫描出后台http://dc-2/wp-admin

运气很好,我在jerry后台页面的Pages选项找到了Flag2页面

内容为

Flag 2:

If you can't exploit WordPress and take a shortcut, there is another way.

Hope you found another entry point.

随后我就尝试根据WordPress版本在网上找各种与该版本有关漏洞的信息,也上exploit-db.com寻找了一翻,大多都关于修改主题文件、添加主题等等操作进行写入WebShell,但是我验证了tom账号,两个账号都是普通账号,没有这些权限,又找到了一篇关于媒体ID的SQL注入漏洞,但我在上传的时候发现没有该目录写入权限,然后就陷入了沉思,我到底遗漏了哪里?再一次,我又无解了,再一次瞄了一下writeup,惊讶的发现还有一个ssh端口,我没扫出来,因为ssh更换了端口,而我一开始使用nmap扫的时候是默认扫描Top1000。

然后我又使用nmap扫了一遍

SSH端口

nmap -SS -Pn -A -p- 192.168.136.132
Not shown: 65533 closed ports
PORT     STATE SERVICE VERSION
80/tcp   open  http    Apache httpd 2.4.10 ((Debian))
|_http-generator: WordPress 4.7.10
|_http-server-header: Apache/2.4.10 (Debian)
|_http-title: DC-2 – Just another WordPress site
|_https-redirect: ERROR: Script execution failed (use -d to debug)
7744/tcp open  ssh     OpenSSH 6.7p1 Debian 5+deb8u7 (protocol 2.0)
| ssh-hostkey: 
|   1024 52:51:7b:6e:70:a4:33:7a:d2:4b:e1:0b:5a:0f:9e:d7 (DSA)
|   2048 59:11:d8:af:38:51:8f:41:a7:44:b3:28:03:80:99:42 (RSA)
|   256 df:18:1d:74:26:ce:c1:4f:6f:2f:c1:26:54:31:51:91 (ECDSA)
|_  256 d9:38:5f:99:7c:0d:64:7e:1d:46:f6:e9:7c:c6:37:17 (ED25519)
MAC Address: 00:0C:29:6A:EB:1F (VMware)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

知道了SSH端口,尝试使用爆破出来的两个账号密码登录

登录SSH

尝试使用jerry用户登录SSH,发现登录失败

# -p 指定端口
ssh jerry@dc-2 -p 7744    

尝试使用tom用户登录SSH,登录成功

ssh tom@dc-2 -p 7744

登录成功后,反手一个ls看一下,发现一个flag3.txt,赶紧cat查看以下内容,但是报错了,说找不到cat这个命令,顿时陷入沉思...

没办法,只怪自己知识储备不够,只能把报错丢上Google了,经查阅得知原来rbash全称Restricted Shell,是一个受限的shell,也被称为“阉割”shell,即是被管理员限制了用户的命令,管理员指定了你能使用什么命令就只能使用什么命令。与此相似的还有rshrkshPython(lshell)

一旦使用了rbash,它将有以下限制:

  1. 使用cd来改变路径
  2. 设置或取消SHELL,PATH,ENV或BASH_ENV变量的值
  3. 指定的命令里包好/
  4. 指定包含/的文件名作为传递参数给内建命令的参数
  5. 指定包含斜杠(slash)的文件名作为-p选项的参数,传递给hash内建命令
  6. 启动时从shell环境中导入函数定义
  7. 启动时解释shell环境中SHELLOPTS的值
  8. 使用 >, >|, <>,>&, &>, >>等重定向操作符重定向输出
  9. 使用exec内建命令来意另一个命令替换shell
  10. 使用enable内建命令的 -f 和 -d 选项来增加和内建命令
  11. 使用enable内建命令来允许和禁止shell内建命令
  12. 指定command内建命令的 -p 选项
  13. 使用set +rset +o restricted来关闭受限模式

知道这么一回事之后,让我们来康康我们能使用什么命令

先看一下当前的环境变量

echo $PATH
/home/tom/usr/bin

但是我们不能cd切换目录,但是我们能使用ls命令,使用ls命令查看目录文件就行了

ls usr/bin

发现几个命令

欸,有lessvi,可以用这里个命令来编辑flag3.txt

可怜的老汤姆总是追随杰瑞. 也许他应该承受自己所造成的所有压力

嗯,这句话愣是没看懂,再使用ls查看其他目录看看

经过一番ls,在jerry的家目录找到了flag4.txt,使用less看一下内容

很高兴看到您已经做到了这一点 , 但您还没回到家.

您仍然需要获得最终的Flag(唯一真正重要的Flag)

这里没有提示 您现在就一个人了

继续 git outta here !!

根据第四个flag知道还有一个flag,很明显就是root权限了,估计在/root/目录下,但是没有权限,只能提权了

但是只有限制的shell这几个命令不足以提权,所以首先需要绕过限制的shell才能进一步提权,那么如何绕过这种shell呢?又是一顿搜索,找到了不少文章,在FreeBuf找到一些关于man, less, vi/vim等等一些命令的绕过方式,刚好这里可以使用viless,但是一顿尝试之后发现不行,在Google找到了一篇关于受限的shell和一些绕过的文章写的很好很全面,但是还是绕过不了。

绕过Restricted Shell

最后终于找到了绕过方式

BASH_CMDS[a]=/bin/sh;a  # 把/bin/sh赋值给BASH_CMDS[a]变量
/bin/bash
echo $0     # 查看脚本本身的名字
echo $?  # 命令执行结果反馈,0代表成功,其余表示失败
export PATH=$PATH:/bin/        # 将/bin作为PATH环境变量导出
export PATH=$PATH:/bin/bash    # 将/bin/bash作为PATH环境变量导出

执行完上面命令(可以不执行echo那两句)之后就可以执行所有命令了

提权

由于自己没接触过提权,根本不知道从何下手,只知道SUID提权,当时就使用find命令查找有没有 S标志位的可以利用的可执行文件

已知可用来提权的Linux可行文件:

  • nmap
  • vim
  • find
  • bash
  • more
  • less
  • nano
  • cp

查找系统上运行的所有SUID可执行文件的命令

find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -print 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;

执行完三条查询都没找到一个可以利用的,再次陷入沉思..

然后想到了很牛*脏牛提权,之前就想玩一下了,一直拖,趁现在赶紧试试

根据网上的教程试了一下,提权不了,这里就不详细写了,网上太多这样的文章了或者迟些写一篇简单复现使用Dirty Cow提权 留个坑

无奈之下,又瞄了一眼writeup,原来flag4已经提示是git提权了,只是我自己一开始不懂什么意思罢了,好的,知道可以用git进行提权,又来到了搜索引擎,搜到了提权方法

sudo git help config
    !/bin/bash 或者 !'sh'  完成提权
    
sudo git -p help 
    !/bin/bash

当我兴致勃勃的敲上命令时,惊奇发现,tom用户没有找到sudo命令,我猜测可能是因为在绕过限制shell的时候导出的环境变量不完整还是咋的,回过头来看,在绕过shell,配置环境变量的时候,知道除了/bin//bin/bash,没有导出/bin/sh,于是我导出一遍/bin/sh

export PATH=$PATH:/bin/sh

然后我再执行一遍sudo,发现还是不行,然后我在执行su,惊喜发现可以用,于是尝试切换到jerry用户,密码用爆破出来的试试,成功登录上,但是之前使用ssh登录不上,可能是限制了jerry用户使用ssh登录

jerry用户尝试使用sudo命令,成功执行

于是就在jerry用户尝试使用git提权

成功提权,切换到/root目录下

果不其然,真在里面

DC-2靶机到此完结

自我总结

这个总结是必须要写的,经过这次初探vulnhub入门级靶机,发现了自己很多的不足。第一,知识储备不足,整个流程几乎都是基于搜索引擎,还要瞄了几次writeup,真是太**了;第二,不够细心,急于求成,错过很多重要信息,错过了7744 SSH端口,不知道cewl,没看懂flag4提示的git提权,当中还有很多很多,深感自己不足,不过收获还是很大的,不得不说实战的确学到很多,很多东西必须是自己亲自动手去整、去试才是真正学到东西,看别人的writeup不动手去试,很快就会遗忘。

标签: 渗透测试靶机

已有 2 条评论

  1. 写得很棒,当中有不会的,就来看你的了(笑哭)。已经转了你其中的部分内容,有引用注明出处。
    PS:笑哭这个好像不能当评论打进去,不然jquery会出错。

添加新评论