ctfshow baby杯web
Posted yu22x
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ctfshow baby杯web相关的知识,希望对你有一定的参考价值。
baby_captcha
点击首页的无脑给了一个500常用5密码。看来是要爆破密码了。
然后练习下听力,根据放的声音写出来验证码,抓包进行爆破,payload用给的500常用密码。
拿到密码fire,登录就有flag。
ctfshowcms
简略审计了下代码,index.php中存在文件包含。install下的index.php存在任意文件写入,并且内容可控。
因为文件包含的地方加了目录和后缀,所以比较难控制。我们先来看下写文件的地方。
首先当前目录下不能存在installLock.txt,我们可以先直接访问下/install/index.php,发现回显的是你已经安装了ctfshowcms,请勿重复安装。
想到前面有个文件包含,正好可以绕过这个限制(因为存在文件包含的index.php所在的路径下没有installLock.txt),/?feng=../install/index
。接着为了不die掉我们把那些参数都给赋值。
最后发现在后面还是会die掉。看来写文件的想法也是走不通的了。
但是我们往上看看,发现进行数据库连接的时候我们三个字段都可以控制。也就是说我们可以让网站连接任意的sql服务器。这时候我们可以搭建一个恶意服务器去读文件。
首先需要在自己的vps上设置数据库可以被远程连接。这个网上文章挺多的,大家可以自己找一下。
接着需要用到个脚本(R1师傅给了个可用的)https://github.com/MorouU/rogue_mysql_server/blob/main/rogue_mysql_server.py
修改下里面的端口和要读的文件,端口改成3307,其他的也可以,只要不是3306。在vps上运行。
接着post传值,数据库用户名和密码是自己vps上的。
就可以 接收到flag了。
应该不难
参考文章https://www.dz-x.net/t/1017/1/1.html
babyphp
过了一遍代码,发现可以利用file_put_contents写文件。
两个前提:case 'upload'
和return !preg_match('/php/i', $input)
为true。
大家可以试一下
<?php
var_dump(highlight_file(__FILE__));
返回的结果是true,所以第一个我们只要不给a传值就可以了。
绕过第二个限制可以上传.user.ini,内容为auto_prepend_file=2.jpg
,接着上传2.jpg,内容为<?=`ls /`;?>
刷新一下就可以了。
完美的缺点
题目设置了open_basedir,所以我们写文件和include都只能限制在该目录下。文件名和内容都有长度限制。
但是我们发现只要post传一个ctfshow就可以使用include函数,那我们试试可不可以使用data伪协议呢。
因为有长度限制我们可以这样写file_name=data:,<?=`ls`;
’
接着打开flag.php,file_name=data:,<?=`nl *`;
记得bp里面url编码下。
当然data伪协议都可以用了,http自然也可以。
我们先来看下最短的ip的情况下也就是http://1.1.1.1
长度为14,所以如果你vps的ip足够小,就可以直接远程文件包含了。如果比较大的话我们可以试试转成10进制或者16进制。
https://tool.520101.com/wangluo/jinzhizhuanhuan/
以上是关于ctfshow baby杯web的主要内容,如果未能解决你的问题,请参考以下文章