巅峰极客2024 php_online
这个题目搞了很久,前前后后涉及很多细节,复现的过程中出现了很多问题,也暴露出自己的基础不够扎实。网上有很多方式方法,这里一并梳理下。
这个题目搞了很久,前前后后涉及很多细节,复现的过程中出现了很多问题,也暴露出自己的基础不够扎实。网上有很多方式方法,这里一并梳理下。
给了个登录框,试了几个sql注入的poc,提示invalid,用dirsearch扫了一下,发现了admin.html,给了一个上传和命令执行的功能点。
传文件然后执行,但是命令执行那里过滤了很多,需要fuzz,他这里是按字符去过滤的:

* . / 以及空格都是可以用的,这里其实考察的就是临时文件执行。php上传文件的时候,会产生一个临时文件,/tmp/phpxxx 。当然这和PHP版本有关系,另外一个就是linux系统的一个特性,可以用. 来执行任意文件里面的命令。所以我随便传一个txt,里面的内容写上
1 | #!/bin/sh |
然后命令执行那里 . /t*/* 就可以执行我们的ls命令。这里的. 类似于source命令,当然,也看linux系统的版本,比如我在kali2024上面,也就是ubuntu上面. 就没啥效果。这里的环境经过cat /proc/version 发现是 redhat
成功执行。根目录下面有flag。但是这里的flag没有权限去读,可以通过ls -l / 发现权限问题,所以要提权。
这里用的是find提权
which find 找到 find的位置,发现是/usr/bin/find ,然后ls -l /usr/bin/find 可以发现是有s权限的。
直接提权:find . -exec cat /flag \;

比较基础的一些知识点
最近比较忙,只能晚上看看题了。。。