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:

 

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

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=q4agy3vaajbu

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白猫a~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值