XCTF mfw wp

2021.1.9

网安菜鸡今天来划水了!

CTF题目属于萌新入门级,写下WP仅供自己总结练习,大佬请自行绕路,另外如果有师傅愿意有每日轻松一笑环结,还望不吝赐教。【狗头】

在这里插入图片描述
打开题目,是这样一个界面:欢迎来到我的网站,这是我自己写的。
然后没什么思路,挨个导航栏点击一下看看。
在这里插入图片描述
在这里插入图片描述
在about页面下,发现了这样有趣的东西:
在这里插入图片描述
他告诉我们他用了Git,服务端使用PHP脚本语言,前端框架使用了Bootstrap。
emmm
作为一个萌新,当然不知道有Git源码泄漏这个东西,于是接着搞思路。
查看一下页面的源代码。
在这里插入图片描述
看到了这样的注释:
在这里插入图片描述
并且注意到页面是通过Get提交参数:
在这里插入图片描述
/?page=about
/?page=home
/?page=contact
我们兴高采烈的拿着GET参数去搞flag,结果
在这里插入图片描述
啥都没有,也对,一个三星题这么简单才奇怪。
然后,在网上看到了大佬的思路,进行目录扫描。

在这里插入图片描述
dirsearch是一个很好用的轻量网站目录扫描工具。
扫描命令如下:
python3 dirsearch.py -u http://220.249.52.134:48019/ -e php
这里大家需要注意一下,我用的Kali是2020.3默认没有root权限,所以报错 PermissionError: [Errno 13] Permission denied,其实这是一个很头疼的地方,要么su -切换到root权限下,要么就在就在命令前加上sudo
扫描结果如下:
在这里插入图片描述
发现了/.git/文件夹,访问:
在这里插入图片描述
简单介绍一下Git泄漏漏洞:
网站开发人员使用Git进行版本控制,对站点进行自动部署,如果配置不当,就可能将Git文件夹直接部署到线上环境,这就引起了Git泄漏漏洞。Git泄漏的危害表现在,攻击者可以下载/.get/文件夹下的所有内容,如果文件夹中含有敏感信息,如站点源码,数据库账号密码等,攻击者可以通过这些控制目标服务器。关于Git的相关知识需要进行后续学习补充,这里知道这些即可。
对于Git泄漏漏洞,有现成的利用脚本GitHack:
在这里插入图片描述
这里以网站IP地址命名的文件夹即为我们GitHack下来的/.get/源码。
在这里插入图片描述
下载下来的源码中,有index.php 和 templates,其中templates文件夹下有flag.php,还是什么都没有,所以查看index.php(用vim打开看着能清楚点,好像也不太清楚 )
在这里插入图片描述
这里有两个函数比较重要:1.assert() 2.strpos()
关于assert这个函数有一个概念,叫做断言。
PHP 中的断言常用于调试,检查一个表达式或语句是否为 FALSE。编写程序时,常会做出一定的假设,那断言就是用来捕获假设的异常,我们也可以认为断言是异常的一种特殊形式。断言一般用于程序执行结构的判断,不可让断言处理业务流程。用的最多的场景就是单元测试,一般的单元测试框架都采用了断言。

// PHP 5
assert ( mixed $assertion [, string $description ] ) : bool

// PHP 7
assert ( mixed $assertion [, Throwable $exception ] ) : bool

如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行。断言这个功能应该只被用来调试。你应该用于完整性检查时测试条件是否始终应该为 TRUE,来指示某些程序错误,或者检查具体功能的存在(类似扩展函数或特定的系统限制和功能)。

总结一句话就是:assert()函数会将读入的字符串当作PHP代码执行!
strpos()函数:
在这里插入图片描述
在这里插入图片描述
进行注入的思路就是把后面 ===false这个没用的注释掉,然后在前面构造闭合:
在这里插入图片描述
当我们这么构造payload时,如果page的内容传递进去之后,则assert函数中执行的内容就变成了:

strpos('abc') or system(cat /templates/flag.php);

因为strpos缺少第二个必须的参数,所以返回值一定是false,从而执行or 后面的内容,然后在源码中得到flag。

这里思路应该没有问题,但是没有取得flag。
在这里插入图片描述
简单拿ls做个实验,发现#不好使,应该是被过滤了,所以要用//注释。
在这里插入图片描述
要注意的点:
system(“cat ./templates/flag.php”);
双引号必须要加上,否则返回空页。
在这里插入图片描述
cat ./templates 意为在当前路径下,找templates/flag.php。或者写为cat templates/flag.php 。如果像图上那么写,就导致在根目录下寻找templates,导致找不到,从而die Detected hacking attempt!

知识点总结:

  1. Git泄漏漏洞。
  2. 网站目录扫描,什么时候能用目录扫描?什么时候扫不到?
  3. PHP strpos() assert()函数用法。
  4. 有一个问题,就是为什么在本地下载下来的flag.php里找不到flag,但是能在服务端响应回flag。emmmm 请教完师傅回来补充。
    解决一下第四个问题,因为之前提到Git用于版本控制,所以可能本地和服务器不是一个版本,导致下载下来的flag,php的文件在本地查看不到,只能在服务端查看。

猜你喜欢

转载自blog.csdn.net/weixin_45253216/article/details/112390880