[HCTF 2018]WarmUp (代码审计)

打开题目:

好好好。

看看源码:

? source.php

让我看看!

发现还有个文件叫hint,php

看看:

得到目的文件是ffffllllaaaagggg

分析代码:
 

$_REQUEST

        变量 $_REQUEST用于收集HTML表单提交的数据,默认情况下包含了$_GET,$_POST和$_COOKIE的数组。

        GET是从服务器上获取数据,GET是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。

        POST是向服务器传送数据,POST是通过HTTP POST机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址,用户看不到这个过程。

        通过POST和GET方法提交的所有数据都可以通过$_REQUEST["参数"]获得。

empty()

        empty(var) 函数用于检查一个变量是否为空,当 变量var 存在,并且是一个非空非零的值时返回 FALSE 否则返回 TRUE。

is_string()

        is_string(var)检测变量是否是字符串,如果var是字符串则返回true,否则返回false。

include

        include语句包含并运行指定文件。

文件查找过程:

        1、被包含文件先按参数给出的路径寻找。

        2、如果没有给出目录(只有文件名)时则按照include_path指定的目录寻找。

        3、如果在include_path下没找到该文件,则include最后才在调用脚本文件所在的目录和当前工作目录下寻找。

        4、如果最后仍未找到文件则include会发出一条警告。

逻辑结构

        传入的file参数需满足以下3个条件,才可包含并运行file:

        (1)不为空。

        (2)为字符串。

        (3)emmm::checkFile($_REQUEST['file']) 返回 true,也就是必须在白名单里。

函数作用:
mb_substr: 获取部分字符串。
mb_strpos: 查找字符串在另一个字符串中首次出现的位置。
in_array($needle, $haystack):needle待搜索值,haystack待搜索数组。

两种方法:
 

NO.1:
我们可以采用的方法就是构造payload?file=hint.php?../../../../../../ffffllllaaaagggg,利用第二个if进行绕过,使checkFlie返回真值,从而包含我们的ffffllllaaaagggg文件得出flag

NO.2:
我们可以通过对?进行二次编码从而绕过p a g e = u r l d e c o d e ( _page = urldecode( 
page=urldecode(page)
?file=hint.php%253f../../../../../ffffllllaaaagggg
原理如下:在我们将参数传给file时,服务器端会自动进行一次url解码,然后这里还有个urldecode再进行一次解码。共两次解码,所以我们可以使用两次编码进行绕过urldecode,?一次url编码%3f,二次url编码%253f。然后就是第一种方法中。

就得到了flag。

  • 32
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Dawpro_加薪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值