logi靶机
端口扫描

访问80端口
信息搜集

只是个静态页面
但是有个提示
never give up记住这个要考
目前不懂是什么意思
看看网站源代码

猜测就是用户的密码
ame:jiayouachunyu
目录扫描
扫个目录
有两个登录路由

来到/user

输入刚刚的账号密码
成功登录

但是经过测试
这个页面也是没啥用
没啥信息
我们来到/admin登录路由

看看网站源代码

提示我们账号密码和校验码并没有用
倒是有个token
猜测可能在用户登录的时候产生了一个token作为凭证
我们用bp去抓个包
刷新并抓包刚刚我们登录的/user
确实有一段jwt作为token

我们拿去破解一下这个jwt

可以看到在载荷中有个sub和role他们分别为ame和user
猜测我们可以伪造一个admin的jwt直接登录到admin账号
但是还缺少密钥
刚刚在首页的时候提示我们never give up后面会考
猜测这个可能就是密钥了
我们拿去伪造一下
jwt伪造

当我输入那一串字符串的时候直接就显示是正确的密钥且签名是正确的
那么我们之前的猜测是没错的
我们直接伪造admin的jwt

修改一下sub和role改为admin

将token的内容改成我们伪造的jwt
放包
成功登录

提示我们有一个php文件
我们访问看看


fuzz
提示我们要fuzz测试
那么拿上字典去fuzz测试一下
这个php文件很有可能就是一句话木马
直接用参数测试命令执行

完成爆破

发现只有cmd的状态码是500
其他全是200
400的就是一些不可见字符导致的不用理会
其实这里也有可能是post方法
我们也试一下

确实没有什么变化
猜测就是get方法了
我们拿cmd去测试一下
我测试了ls dir whoami等命令
全是500
我接着又测试了system(‘ls’) var_dump(‘a’) var_dump(`id`)
也全是500
这个时候我接了个逗号
system(‘ls’); var_dump(`id`); var_dump(‘a’);

这个时候有变化了
成功执行了var_dump()这个php函数
命令没法直接执行
没有逗号也没法执行php函数
猜测这个一句话木马的参数首先是cmd
然后使用的是eval函数
方法是GET
这个时候我们看看他的php探针

之前system函数没法用就是因为这里限制了这个函数
我们换个exec弹shell就可以了
成功拿到shell

user
有个ame用户

本来想传个fscan去爆破的
但是这个靶机没有wget命令
那我还是老老实实的去找密码吧
经过一顿翻找
终于在/var目录下发现密码

成功登录ame

获得user的flag

root
1 | sudo -l |
有个wall可以用

稍微去查了这个命令
可以读取任意文件
1 | sudo wall --nobanner /filepath |
我们尝试直接读取root.txt
1 | sudo wall --nobanner /root/root.txt |

一开始我真的以为这个就是flag
问了一下说不是
那应该是文件不对了
既然可以任意文件读取
我们看看能不能直接登到root的用户上
1 | sudo wall --nobanner /root/.ssh/id_rsa |
root确实有设置ssh的密钥对


也允许我们可以使用私钥登录root

我们把私钥写到本地文件上
然后直接拿着登录就行
在复制密钥的时候一定要注意去掉文件里面的空格和制表符
不然没法使用这个密钥
1 | cat file | tr -d ' ' > file1 |
这样可以去掉空格
但是下面的空格也被去掉了

我这里手动改了一下(笑)
都搞好之后可以检查一下
1 | od -d file |

看起来是没有空格了
1 | chmod 400 file |
成功拿到root

成功拿到root的flag

说些什么吧!