MySQL注⼊直接获取Shell的前提条件
1.写⼊webshell
使⽤select 'payload' into outfile '/path/to/webshell'即可写⼊⼀个webshell到/path/to/webshell,这种⽅式的利⽤条件为:mysql账户有 File_priv 权限,即 select user,file_priv from mysql.user where user=current_user()为 Y
show variables like '%secure_file_priv%' 的结果符合要求(前⾯的语句执⾏结果可能与 select @@global.secure_file_priv不同,但经过我的测试这时候前⾯的语句的结果是准确的,不过我也不知道为什么两个结果会不⼀致,按照的说法该变量是全局系统变量,应该是不会出现两个不同结果的。。。如果有权限的话还是⽤ select * from information_schema.session_variables where
variable_name='secure_file_priv' 看⽐较好,这个肯定准确)。具体要求如下:
如果该变量为空,则变量⽆效,这时候最容易利⽤
如果变量为⽬录的绝对路径,则服务器会将导⼊和导出操作限制为仅适⽤于该⽬录中的⽂件
mysql帮助文档如果设置为NULL,则服务器禁⽤导⼊和导出操作。
知道⽹站根⽬录的绝对路径,且MySQL服务所属⽤户(默认为mysql)对根⽬录有可写权限
2. UDF写⼊shell
原理同webshell,都是通过select 'payload' into outfile '/path/to/plugin_dir'写⼊payload,所以利⽤条件和webshell的前两点相同,只有第三点不⼀样,那就是mysql服务所属⽤户需要有插件⽬录(show variables like '%plugin%'查看⽬录绝对路径)的写⼊权限,linux上mysql 的plugin⽬录默认为root所有,权限为755。需要注意的是通过UDF的⽅式获取到的shell是管理员权限,所以有些时候可以⽤来提权。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论