题目链接:NSSCTF | 在线CTF平台
涉及工具:hackbar
涉及知识点:文件包含,PHP伪协议
解题思路:
1.打开靶机:
根据提示,启动hackbar(点击f12)并传入“file”参数:
2.审计代码:
注:该 PHP 脚本接受一个名为 `file` 的 GET 参数,并尝试包含该参数所指定的文件。
①`ini_set("allow_url_include","on");`: 这一行尝试设置 PHP 配置 `allow_url_include` 为 `on`,这意味着允许通过 URL 来包含外部文件,这通常被认为是一个安全风险,因为它可能导致远程代码执行漏洞。
②`header("Content-type: text/html; charset=utf-8");`: 设置响应头部,指示浏览器以 HTML 格式解析响应内容。
③ `error_reporting(0);`: 禁止显示 PHP 错误信息,这是出于安全考虑,以防止泄漏敏感信息。
④`$file=$_GET['file'];`: 从 GET 请求参数中获取名为 `file` 的值,并存储到 `$file` 变量中。
⑤`if(isset($file)){...}else{...}`: 检查是否存在 `file` 参数。如果存在,执行 `if` 代码块,否则执行 `else` 代码块。
⑥`show_source(__FILE__);`: 如果存在 `file` 参数,则显示当前文件的源代码。这可能是为了让攻击者了解服务器上的代码结构。
⑦ `echo 'flag 在flag.php中';`: 输出一条提示信息,提示标志(flag)位于 `flag.php` 文件中。
⑧`include_once($file);`: 尝试包含 `$file` 变量所指定的文件。这是一个潜在的安全风险,因为攻击者可能利用此处的代码包含漏洞来包含恶意文件,并执行其中的恶意代码。
注:这段代码存在严重的安全风险,特别是通过 `allow_url_include` 设置为 `on`,允许通过 URL 包含外部文件,可能导致远程代码执行漏洞。同时,未对用户输入进行充分验证和过滤,可能导致路径遍历攻击(directory traversal)或远程文件包含漏洞(remote file inclusion)。
3.审计得知,`allow_url_include` 设置为 `on`,且目标文件为“flag.php”我们可以利用PHP伪协议来攻击:
①php://filter:/resource=flag.php
获取指定文件源码
②与包含文件结合时,php://filter流会被作为php文件执行,但我们只是为了提取目标文件(此处为flag.php),为了避免执行后看不到文件,对其进行编码,让其不被执行:
php://filter/read=convert.base64-encode/resource=flag.php
注:此处有个坑,出题人多打了几个换行,所以需要滚动到网页下方才能看到:
4.base64解码:
①可以直接浏览器搜索“base64在线解码工具”进行解码:
②也可以自己用python编写脚本进行解码,以下是我写的一个base64编码解码脚本:
import base64
while True:
choice = input("请选择操作(1:加密,2:解密,0:退出)\n")
if (choice == '1'):
encodestr = input("请输入需要加密的内容:")
a = base64.b64encode(encodestr.encode('utf-8'))
print("加密结果为:",a)
elif (choice == '2'):
try:
jiemi = input("请输入需要解密的内容:")
decodestr = base64.b64decode(jiemi)
b = decodestr.decode('utf-8')
print("解密后内容如下:")
print(b)
except Exception as e:
print(e)
elif (choice == '0'):
exit(0)
else:
print('选项错误!')
效果如下:
注:需要一个依赖库“base64”,若未安装过的请在终端输入“pip install base64”进行安装
5.知识总结:
①php伪协议:
Php://filter/convert.base64-encode/resource=*.php的使用
②利用hackbar传参问题(该知识点在我另一篇文章详细介绍过,包括hackbar的使用,有需要的师傅自行查阅,博客链接为:【[SWPUCTF 2021 新生赛]jicao - 优快云 App】http://t.csdnimg.cn/CAZ0X
③base64编码解码.