您现在的位置是:首页 >学无止境 >fileclude-CTF 解题思路网站首页学无止境

fileclude-CTF 解题思路

一只只小白猫 2023-07-01 08:00:02
简介fileclude-CTF 解题思路

  

我们先打开题目场景,如图:

函数理解:

 include函数:包含并执行变量或者文件。

if:是if语句用来判断。

isset:判断变量是否存在,值是否为NULL。

$_GET:接收表单提交数据,并把数据附加到url链接当中。

逻辑运算符&&:条件都满足才会执行。

关系运算符!:不、反的意思。

empty函数:只用来判断变量的值是否为NULL。

file_get_contents() 函数:把整个文件读入一个字符串中。

===:判断值是否相同并且判断值的类型是否相同。

else:条件都不满足的时候才会执行它。

die函数:输出内容并退出程序。

 一、题目分析:

打开题目场景发现有if嵌套语句,存在flag.php,并且可以执行这个文件。

第一个if语句说的是如果file1和file2这两个变量都存在并且值不是空的,就会存放这两个数据的from表单,并将这个数据表单发送到url中。

第二个if语句说的是如果这两个变量都不为NULL,则返回true,并执行,但是前面加的有关系运算符!,所以说这两个值都是空的才会返回true,并执行。显而易见这两个变量都是存在的,但是值都是空的。

第三个if语句说的是file_get_contents() 函数包含file2变量,当满足file2的值等于hello ctf以及值的类型两者相同(类型是字符串),才会执行包含在include函数中的file1变量。(所以说这里咱们需要用到php://input绕过)

当这三个条件都不满足就会输出NONONO这个字符串。(显然可见这是不可能的) 

二、 解题思路:

解题关键是在第三个if语句中,我们可以用php://input输入流来绕过file_get_contents函数,达到执行file1变量的目的,用php://filter伪协议来读取源代码,用来拿到flag。

php://input可以读取没有处理过的POST数据。

php://filter伪协议规则:

php://filter/过滤器|过滤器/resource=待过滤的数据流

 构造php://filter伪协议规则:

php://filter/convert.base64-encode/resource=flag.php

完整代码:

?file1=php://filter/convert.base64-encode/resource=flag.php&file2=php://input

 ?是起始符可以理解为连接拼接的意思,file1是场景代码中的变量,=是赋值的意思。

 convert转换,base64,encode编码。

&引用,不同名字访问同一变量的内容。

 resource=flag.php转换到flag.php文件中,就是说把flag.php文件转换为base64编码格式。

我们先引用file2变量用来请求数据,把flag.php文件的内容赋值给file1变量,因为最终执行的是file1变量。分析到这里就可以了。

三、解题:

用到的工具有:

火狐浏览器FireFoxMax HackBar火狐浏览器插件(之前那个收费了,这个也可以替代之前那个工具,这个插件可以在火狐浏览器扩展哪里搜索并添加)

1、用火狐浏览器打开场景,并按F12找到Max HackBar插件并点击进入。(如果空白可以刷新下页面)

 

 2、在url链接后边添加伪协议和绕过并在Max HackBar那个页面点击Load URL用来在地址栏那里加载URL地址。(和Split URL性质一样只是把url给分割多行了。)

 3、Post Data。(传递数据)

 4、输入hello ctf。

 5、点击Execution。

 6、拿到base64编码。

 base编码解码拿到flag:

 

技术有限,如有不足,还望各位师傅们指出。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。