运行 python 来自 MySql 触发器的 sys_exec() 脚本给出退出代码 1
Running python script from MySql trigger with sys_exec() gives exit code 1
我在本地有一个 MySql 服务器(在 Windows 10 上),想从触发器中 运行 一个 python 脚本。为此,我想使用 sys_exec()。
我从这里得到了 lib_mysqludf_sys_64.dll:https://github.com/rapid7/metasploit-framework/tree/master/data/exploits/mysql
并按照此处所述设置 UDF:https://osandamalith.com/2018/02/11/mysql-udf-exploitation/
sys_exec 正在工作:
mysql> SELECT sys_exec('python --version')//
+------------------------------+
| sys_exec('python --version') |
+------------------------------+
| 0 |
+------------------------------+
1 row in set (0.52 sec)
但是当我想要 运行 脚本时:
mysql> SELECT sys_exec('python C:\dbtest.py test')//
+--------------------------------------+
| sys_exec('python C:\dbtest.py test') |
+--------------------------------------+
| 2 |
+--------------------------------------+
1 row in set (0.07 sec)
据我了解,2 表示未找到该文件。
我该如何解决这个问题?
当我使用 '\\' 时,退出代码变为 1 (Invalid_Function ?):
mysql> SELECT sys_exec('python C:\dbtest.py test')//
+---------------------------------------+
| sys_exec('python C:\dbtest.py test') |
+---------------------------------------+
| 1 |
+---------------------------------------+
1 row in set (0.57 sec)
未安装 MySQL UDF SYS。
在这里你可以找到答案:
我发现问题出在 mysql 用户的访问权限上。我无法找出哪个 (windows) 用户实际运行了 python 脚本并需要访问使用过的文件,但我解决问题的方法是授予“所有人”访问权限涉及的文件。
我在本地有一个 MySql 服务器(在 Windows 10 上),想从触发器中 运行 一个 python 脚本。为此,我想使用 sys_exec()。 我从这里得到了 lib_mysqludf_sys_64.dll:https://github.com/rapid7/metasploit-framework/tree/master/data/exploits/mysql
并按照此处所述设置 UDF:https://osandamalith.com/2018/02/11/mysql-udf-exploitation/
sys_exec 正在工作:
mysql> SELECT sys_exec('python --version')//
+------------------------------+
| sys_exec('python --version') |
+------------------------------+
| 0 |
+------------------------------+
1 row in set (0.52 sec)
但是当我想要 运行 脚本时:
mysql> SELECT sys_exec('python C:\dbtest.py test')//
+--------------------------------------+
| sys_exec('python C:\dbtest.py test') |
+--------------------------------------+
| 2 |
+--------------------------------------+
1 row in set (0.07 sec)
据我了解,2 表示未找到该文件。 我该如何解决这个问题?
当我使用 '\\' 时,退出代码变为 1 (Invalid_Function ?):
mysql> SELECT sys_exec('python C:\dbtest.py test')//
+---------------------------------------+
| sys_exec('python C:\dbtest.py test') |
+---------------------------------------+
| 1 |
+---------------------------------------+
1 row in set (0.57 sec)
未安装 MySQL UDF SYS。
在这里你可以找到答案:
我发现问题出在 mysql 用户的访问权限上。我无法找出哪个 (windows) 用户实际运行了 python 脚本并需要访问使用过的文件,但我解决问题的方法是授予“所有人”访问权限涉及的文件。