江苏工匠杯_file _include_wp

关键词 江苏工匠杯 文件包含漏洞 php封装器 攻防世界 ctf 解题wp convert.iconv.*

目录

前言

原题地址

文件包含

几次失败的测试

重新整理线索

细微处了解php封装器

总结

参考链接


前言

关于上一题的unseping 回头看看那个匹配项 看到& : |这几个字符我突然就有了灵感绕过“/”

/(||&|;| |\/|cat|flag|tac|php|ls)/

假如我们执行两条命令

cd flag_1s_here;cat flag_831b69012c67b35f.php

cd flag_1s_here&&cat flag_831b69012c67b35f.php

这样就可以绕过“/”了 不过很遗憾;和& 这俩符号都被匹配到了

话不多说 开始这次ctf之旅

原题地址

攻防世界https://adworld.xctf.org.cn/challenges/list

 江苏工匠杯_file _include_wp_第1张图片

点击获取在线场景

江苏工匠杯_file _include_wp_第2张图片

居然直接告诉我 文件包含 那我就不客气了

文件包含

直接?filename=/etc/passwd

江苏工匠杯_file _include_wp_第3张图片

 开来是执行成功 接下来是找flag文件了 有没有注意到主页 还包含了check.php文件

这是干嘛的 先不管了 先包含以一个一句话 来获取shell试试

看看有没有远程文件包含

?filename=http://baidu.com/

没有反应 看来这个利用不了

江苏工匠杯_file _include_wp_第4张图片

我们知道include包含一个php文件 返回的是执行之后的 源码是看不到的 那么怎样才能看到源码呢。这就要请出php的封装了 让任意文件包含漏洞变成任意文件下载漏洞

简单的测试一下

几次失败的测试

php://filter/read=convert.base64-encode/resource=check.php

江苏工匠杯_file _include_wp_第5张图片

不行!!!()

之后我又尝试好几种方法

data流执行系统命令id (allow_url_indlude on)

data://text/plain;base64,PD9waHAgZWNobyBzaGVsbF9leGVjKGlkKTs/Pg==

do not hack

封装器文件写入phpinfo()

php://filter/write=convert.base64-decode/resource=test.php&txt=PD9waHAgcGhwaW5mbygpOyA/Pgo=

do not hack

POST方法 (allow_url_fopen on allow_url_include on)

?page=php://input

do not hack

用环境变量

file:///proc/self/environ

无 do not hack 但也不无返回结果

利用日志文件

file:///var/log/apache2/access.log file:///var/log/apache2/error.log

无 do not hack 但也不无返回结果

...

最后没有什么办法了 那我就扫描你目录了 看看有什么文件上传点

dirsearch -u http://61.147.171.105:60128/ -f -e html,txt,php,zip

江苏工匠杯_file _include_wp_第6张图片

再扫扫其他的文件 注意index.php/login 是误报

真是让人火大 我能使的招都使出来了 而且尝试文件包含一些系统默认的配置文件啊 shell的执行命令历史啊 都没有好的结果

...

...

...

重新整理线索

重新梳理下心情 整合一下思路 为什么有的payload出现了do no hack ?包含的check.php是不是在检查什么?

最终我把注意力集中在

php://filter/read=convert.base64-encode/resource=check.php

再利用的过程中我发现即使包含一个没有的文件,格式写错 还会报do not hack

我怀疑check.php里也接受一个名为filename的参数 而且对参数进行了过滤

我在php封装器 单词与单词 敲打0 在敲到

php://filter/re0ad=con0vert.ba0se64-enc0ode/resource=check.php

江苏工匠杯_file _include_wp_第7张图片

 停止了报错

看来check.php真的将一些关键词过滤了

尝试?filename=xxx 把这些过滤词找出来

read base encode 这些都被过滤了 只要出现这些关键字 就会返回do not hack

江苏工匠杯_file _include_wp_第8张图片

是不是说只要绕过了 或者 用别的去代替是不是就可以正确执行了

绕过我是真没找出来 只知道read是非必选项 看来是要细微地了解下php封装器了

细微处了解php封装器

php://filter/read=convert.base64-encode/resource=check.php

php://filter/read php://filter/write

read和write是可选性 一个为读 一个为写

resource= 指定过滤的数据流

php://filter/read=“这段的位置为过滤器”/resource=check.php

共有字符串过滤器 转换过滤器 压缩过滤器 加密过滤器

因为我们是要读取文件源码 需要用到转换过滤器共三种

convert.base64-encode & convert.base64-decode

这有 base encode 过滤了

convert.quoted-printable-encode & convert.quoted-printable-decode

这有encode 也不行事实在我测试的过程中 发现printable 也被过滤了

convert.iconv.* //格式如下

convert.iconv..

or

convert.iconv./

尝试php://filter/convert.iconv.UCS-2LE.UCS-2BE/resource=check.php

居然又do not hack 可恶啊 经测试貌似过滤掉了BE

江苏工匠杯_file _include_wp_第9张图片

好在这个过滤器有支持很多编码 这家不行换一家

php://filter/convert.iconv.UTF-7.UCS-2/resource=check.php

江苏工匠杯_file _include_wp_第10张图片

终于得到了check.php的源码

真相揭开了 do not hack!产生的原因

那么flag现在哪里呢?

php://filter/convert.iconv.UTF-7.UCS-2/resource=flag.php

江苏工匠杯_file _include_wp_第11张图片

这过分了 为什么不在check.php文件里 添加flag在哪里 我用的dirsearch中默认字典中也没有flag.php

这样只能换字典 继续跑出来

总结

这到题还是很考验你的知识储备的 要全 还有分析能力 要知道所以然 之后才能灵活运用

不过我对ctf的题属实不熟悉 才考虑了那么多的利用方式 忽略了check.php存在的意义

对flag放置点的套路 不是很熟悉。

通过这道题我也知道了原来封装器不只base64这一种方法 还有其他的转换器 学到了。

参考链接

php://filter的各种过滤器_天问_Herbert555的博客-CSDN博客_php://filter rot13

你可能感兴趣的:(CTF_web_WP,php,网络安全)