Netdiscover 找到靶机地址,nmap扫描
dirserach扫描先
访问链接,注意到有=号,page=login可能对应着包含login.php文件
尝试包含其他文件,注意这儿文件没有跟.php 说明代码中有处理,所以一般我们包含其他文件如/etc/passwd或者其他格式文件是显示不出来的。 需要使用伪协议来操作
文件包含可以参考:https://github.com/Go0s/LFIboomCTF
先尝试读取login.php
/?page=php://filter/read=convert.base64-encode/resource=login
解码后得
可以看到,数据库账户密码在config文件中,同时这儿采用了预编译,所以注入不了
重新包含config文件后可得
尝试使用密码登陆ssh和mysql
发现22没端口没开 遍历所有端口看是不是开在了大端口
仍未发现 好吧 尝试mysql
找到了用户密码,登陆后自动跳转到了上传页面,可以传马了
传php马会报错格式限制,
查看upload文件
白名单验证后缀,保存文件时人为添加后缀,绕过不了。。
接着回到dirsearch截图,查看到还有index.php
Index.php包含了一个文件,而这个文件我们可控
先上传一个图片马
接着在cookie处添加lang变量访问index.php,
Shell来了
提权:
看到home下有4个目录,各自权限都是自己 。看到底下三是数据库里显示的那三个
尝试登陆他们账号 先切换到tty
python -c '__import__("pty").spawn("/bin/bash")'
kent空的
kent竟然不对。。
kane有东西
msgmike文件是个可执行文件,调用了cat命令,并且存在setuid setgid !
那么我们可以将cat命令替换成bash,就可以获取msgmike所属的mike权限了
已经是mike权限了,先将环境恢复
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
来到mike的home目录 ,又来了个msg2root
执行msg2root后仍然是将输入变输出,但是尝试id
后发现输出是会被执行的,但是一直是本地执行
分析该程序
前面能看到这个程序把我们的输入写入到messages.txt中,后面猜测红框处是不是一条变量语句,其中先输出我们的输入,后获取messages.txt内容,然后调用system命令执行
输入1;bash -p ,使用分割符绕过并执行命令。
总结:
考察了文件包含,伪协议,替换原生命令以利用给定条件,逆向盲猜等
难度简单