BUUCTF-WarmUp(代码审计)

1、打开靶场后,查看源码即可看到

<!--source.php-->


2、进入sourcep.php
代码如下

<?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whitelist = ["source"=>"source.php","hint"=>"hint.php"];if (! isset($page) || !is_string($page)) {echo "you can't see it";return false;}if (in_array($page, $whitelist)) {return true;}$_page = mb_substr($page,0,mb_strpos($page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}$_page = urldecode($page);$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}echo "you can't see it";return false;}}if (! empty($_REQUEST['file'])&& is_string($_REQUEST['file'])&& emmm::checkFile($_REQUEST['file'])) {include $_REQUEST['file'];exit;} else {echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";}
?>

3.审计php代码

$whitelist = ["source"=>"source.php","hint"=>"hint.php"];

发现另一个地址,打开以后提示我们flag在ffffllllaaaagggg里面

4、继续审计php代码
PHP is_string() 函数

if (! empty($_REQUEST['file'])  //$_REQUEST['file']值非空&& is_string($_REQUEST['file'])  //$_REQUEST['file']值为字符串&& emmm::checkFile($_REQUEST['file'])  //能够通过checkFile函数校验) {include $_REQUEST['file'];  //包含$_REQUEST['file']文件exit;} else {echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";//打印图片

这段代码告诉们需要满足三个条件
1、file参数值非空
2、file参数为字符串
3、能通过函数chekFile()检验
否则打印图片

5、查看checkFile()函数
PHP in_array() 函数
PHP mb_substr() 函数

highlight_file(__FILE__); //打印代码
class emmm  //定义emmm类
{public static function checkFile(&$page)//将传入的参数赋给$page{$whitelist = ["source"=>"source.php","hint"=>"hint.php"];//声明$whitelist(白名单)键值对数组,if (! isset($page) || !is_string($page)) {//若$page变量不存在或非字符串echo "you can't see it";//打印"you can't see it"return false;//返回false}if (in_array($page, $whitelist)) {//若$page变量存在于$whitelist数组中return true;//返回true}$_page = mb_substr(//该代码表示截取$page中'?'前部分,若无则截取整个$page$page,0,mb_strpos($page . '?', '?'));if (in_array($_page, $whitelist)) {//若$_page变量存在于$whitelist数组中return true;}$_page = urldecode($page);//url解码$page$_page = mb_substr(//该代码表示截取$_page中'?'前部分,若无则截取整个$page$_page,0,mb_strpos($_page . '?', '?'));if (in_array($_page, $whitelist)) {//若$_page变量存在于$whitelist数组中return true;}echo "you can't see it";return false;}
}

6、可以看出函数里面含有4个

第一个if语句对变量进行检验,要求$page为字符串,否则返回false
第二个if语句判断$page是否存在于$whitelist数组中,存在则返回true
第三个if语句判断$page中?之前的字符串是否存在于$whitelist数组中,存在则返回true
第四个if语句判断$page参数url解密后的$_page中?之前的字符串是否存在于$whitelist数组中,存在则返回true
都不满足,最后返回false
从中可以看出
有三个if语句可以返回true,第二个语句直接判断$page,不可用
第一个if语句只要满足了外部函数的if语句这个就不会成立,所以不用管
第四个if语句事多余的,因为只要第三个if语句成立,就会返回true
那么我们应该如何构造payload呢
由in_array($_page, $whitelist)我们可以看出payload里面一定要包含source.php或者hint.php
这个时候如果我们在file内容中加入?,就能实现截断的效果,这个时候page将会验证?前方的str是否包含在array中,因此就能实现checkFile函数的绕过。
这个时候一定能过checkFile函数。
但是我们的include文件读取函数却是直接将file进行了读取,这个时候file的内容是无效的,因此什么东西也读不出来。
我们通过hint.php可以知道,flag隐藏在ffffllllaaaagggg中。
所以现在我们的目标是通过拼接的方式构造出读取flag的绕过姿势。
url里面我们比较常见的是#绕过,即#后面的内容不会被读取执行。
但是我们究竟该怎么样让前面的hint.php%253f不被放到include中影响我们flag的正常读取呢?
我们知道如果直接放入hint.php?ffffllllaaaaggg会通过checkFile的验证返回true,但是毫无疑问这种错误的文件名是无法被include正确读取的。
这个时候我们就要用到一个关键符号:/
例如:include 'hint.php/flag.txt'
hint.php无法被正确读取,这个时候/后面的flag.txt就会被include函数读取并解析
因此我们可以构建payload:
?file=source.php?/ffffllllaaaagggg我们需要将目录回退四次。
因此构建新的payload:
?file=source.php?../../../../../ffffllllaaaagggg

BUUCTF-WarmUp相关推荐

  1. buuctf——Warmup

    打开题目F12有注释source.php 那访问网址:题目/source.php出现如下题目代码: <?phphighlight_file(__FILE__);class emmm{public ...

  2. buuctf web warmup详细题解

    题目:warmup 题目来源:buuctf 分析过程: 1. 首先ctrl + u 查看源代码,我们发现有一个source.php文件 2. 我们打开source.php文件,是一段代码,这道题要我们 ...

  3. BUUCTF Pwn warmup

    BUUCTF Pwn warmup 1.题目下载地址 2.checksec检查保护 3.IDA静态分析 4.exp 1.题目下载地址 点击下载题目 2.checksec检查保护 啥都没开,果然是war ...

  4. BUUCTF [HCTF 2018]WarmUp 1

    BUUCTF [HCTF 2018]WarmUp 1 f12发现提示source.php 打开后发现php代码: <?phphighlight_file(__FILE__);class emmm ...

  5. buuctf - web - [HCTF 2018]WarmUp

    老样子 F12 检查 发现 source.php 被注释掉了 在 url 直接进行访问 可以看到是源代码 发现 high_file 泄漏, 访问 hint.php,可以看到 flag 在那里 回头分析 ...

  6. BUUCTF的Web真题学习整理(一)

    目录 WEB1-WarmUp (任意文件包含漏洞) WEB2-高明的黑客(fuzz脚本) WEB3-easy_tornado (服务端模板注入(ssti攻击)) WEB4-Hack World(时间盲 ...

  7. 02 [HCTF 2018]WarmUp

    Ctrl+u 查看源码 (修改网页, 访问source.php?file=1 访问 hint.php 补充: MySQL字符串截取 1. 字符串截取:left(str, length) mysql&g ...

  8. buuctf航海经历([ACTF2020 新生赛])

    前言:今天感觉自己确实有点菜,想提高一下,就斗胆来buuctf论剑,哈哈哈! [HCTF 2018]WarmUp 是关于php代码审计方面的 打开网站额,一个滑稽笑脸,别的啥都没有 看一下源码,  提 ...

  9. buuctf解题记录

    buuctf解题记录 Basic 1. Linux labs Ssh连接查看目录 2.BUU LFI COURSE 1 打开环境 是一道文件包含题 进行get传参 构造payload: http:// ...

  10. 预热学习率的作用warmup

    学习率是神经网络训练中最重要的超参数之一,针对学习率的优化方式很多,Warmup是其中的一种 (一).什么是Warmup? Warmup是在ResNet论文中提到的一种学习率预热的方法,它在训练开始的 ...

最新文章

  1. Maven3.2创建webapp项目过程中问题以及解决方案
  2. IOS之Label画一条删除线
  3. 跟我一起学.NetCore之日志(Log)模型核心
  4. Ozon Tech Challenge 2020 (Div.1 + Div.2) F. Kuroni and the Punishment 随机化
  5. java await signal_【Java并发008】原理层面:ReentrantLock中 await()、signal()/signalAll()全解析...
  6. linux装Oracle需要jdk,告诉你Ubuntu Linux下安装Oracle JDK的方法及命令
  7. Python版本的报数游戏
  8. MYSQL远程登录报错: Error No. 2003
  9. hdu 1710 Binary Tree Traversals (二叉树)
  10. 转:华 为 路 由 常 用 命 令
  11. 谷歌修复十多个安卓高危漏洞
  12. Spring中为什么要开启注解扫描
  13. Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1...
  14. Yii2数据库操作的各种写法
  15. 2010年软考 考试日期安排
  16. 数据丢失与重复_面试官:如何保证消息的可靠性传输?如何处理消息丢失的问题?...
  17. java 实现按规则自增功能_java基础(二) 自增自减与贪心规则
  18. [字节跳动]2018秋招算法题【持续更新中】
  19. 王小锤学Java:retainAll函数那点儿事
  20. uniapp API 第三方服务

热门文章

  1. 电池供电的电容麦_区别真不小 动圈麦和电容麦你了解吗?
  2. Vue项目的打包\部署\优化
  3. Python中的文本替换
  4. 区块链学习笔记一 BTC密码学原理
  5. openGL,glut库安装(vs2013)
  6. ipa在线安装搭建_iOS12.4.1 越狱无法安装?教你百分百安装
  7. 大数据技术在商业银行中的应用:场景、优势与对策
  8. Spring-Boot框架学习视频-百度云盘
  9. linux ftok()
  10. adb remount失败解决