CTF-31解题思路

Track-子羽   ·   发表于 2021-11-17 15:22:07   ·   CTF&WP专版

源码分析:

  1. <?php
  2. highlight_file(__FILE__);
  3. error_reporting(0); include("flag.php");
  4. function getFlag(&$v1,&$v2)
  5. {
  6. eval("$$v1 = &$$v2;");
  7. var_dump($$v1);
  8. }
  9. if(isset($_GET['v1']) && isset($_GET['v2']))
  10. {
  11. $v1 = $_GET['v1'];
  12. $v2 = $_GET['v2'];
  13. if(preg_match('/\~| |\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]|\<|\>/', $v1))
  14. {
  15. die("error v1");
  16. }
  17. if(preg_match('/\~| |\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]|\<|\>/', $v2))
  18. {
  19. die("error v2");
  20. }
  21. if(preg_match('/ctfshow/', $v1))
  22. {//规定v1的值
  23. getFlag($v1,$v2);
  24. }
  25. }
  26. ?>

代码审计可知

利用全局变量来实现输出
v1=ctfshow

v2=GLOBALS
ctfshow=&GLOBALS此时ctfshow的指向就是全局变量的指向,于其具有了相同的作用,那么此时vardump(ctfshow)就是var_dump$GLOBALS

payload:

  1. ?v1=ctfshow&v2=GLOBALS

打赏我,让我更有动力~

0 条回复   |  直到 2021-11-17 | 532 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.