攻防世界-mfw

一道有关git泄露以及命令执行漏洞的题目

 

 一、基础知识

  • git泄露

Git是一个开源的分布式版本控制系统,开发者可通过其对站点进行部署。在配置不当的情况下,可能会将“.git”文件直接部署到线上环境,这就造成了git泄露问题。

漏洞确认方式:存在.git文件夹。漏洞利用:可以使用githack工具对泄露的文件进行下载。

使用方法,在cmd命令行输入python GitHack.py http://www.target.com/.git/自动下载文件

检查断言是否为false,将传入的参数视为代码执行。判断是否会执行错误,没有错误则返回True否则返回False,与在参数中传入调用外部命令的方法如system可以构造出一个webshell

  • PHP逻辑运算符

and、or、||、&&等,逻辑与在连接两个逻辑表达式时,若第一个为假就不会执行第二个表达式;逻辑或连接两个逻辑表达式时,若第一个为真就不会执行第二个。

二、解题过程

点进题目是几个页面,在About页面中发现了网站相关信息,看到git,尝试是否存在git泄露

 

在原url后加上/.git看是否存在目录。

 

 

 存在此目录,使用GitHack工具下载源码。使用方法python GitHack.py http://61.147.171.105:64085/.git/

 

 

 

 

 

得到源代码,在index.php文件中发现有assert函数,存在命令执行漏洞

 

 

 同时发现可通过可控变量$page来改变$file变量从而改变传入的代码字符串,结合system函数可以实现调用外部命令的目的。另外要想执行其他的函数,那么就要破坏strpos的结构。可通过')来对strpos进行闭合,同时使用//将后面的代码字符串非注释掉。中间可用逻辑运算符来连接其他想要执行的表达式代码。由于strops结构不完整,所以会返回false,所以我们用逻辑或连接system('ls')来实现代码执行。另外要在system()后加上;//来构成完整的php代码语句。

 

 

 查看源码发现能够执行ls命令

 

 

 

 执行cat templates/flag.php来查看flag

 

 

 得到flag为<?php $FLAG="cyberpeace{4744d8196a4a73e15ccafe5c685aa555}"; ?>

三、一点好奇

 

 

 

 

 另外中间用(按位与)【|】(小数点)【.】(按位异或)【^】拼接都能执行system(),具体原因是什么我还不知道。同时使用&&替代and不可以,而且按位与&也不能拼接,使用||替代or却可以。

 

posted on 2023-01-26 21:23  你呀你~  阅读(264)  评论(0编辑  收藏  举报

导航