是否可以通过SQL注入在服务器上执行一些代码(例如基于PHP的web应用程序上的PHP代码)?如果是的话,具体情况如何?
我知道未转义字段会导致SQL注入,攻击者可以在服务器上直接执行他选择的SQL命令。但是我认为只运行SQL命令,而不是一些任意代码。我说错了吗?
发布于 2014-12-29 16:58:32
SQL数据库系统通常有一种导出机制,它可以在服务器上写入任意文件,例如SELECT ... INTO OUTFILE中的MySQL。如果攻击者能够组装这样的查询,并且没有被限制性权限所阻止,他们实际上可以创建PHP脚本。现在,他们仍然需要让服务器来执行脚本。在最简单的情况下,他们可以对web目录进行写入访问。如果他们请求脚本,will服务器将很高兴地执行它。
发布于 2014-12-29 19:12:11
这取决于数据库的类型(MySQL、Postgres、Oracle等)以及数据库用户的权限。
如果应用程序使用管理员帐户连接到数据库,通常可以执行代码。它在Server上很简单,使用xp_cmdshell。其他数据库需要更多涉及的技术。SQLmap是最流行的SQL利用工具,它提到了以下内容:
Support to execute arbitrary commands and retrieve their standard output
on the database server underlying operating system when the database software
is MySQL, PostgreSQL or Microsoft SQL Server.至少对于MySQL,我认为它使用了编写Fleche提到的PHP文件的技巧。
从防御的角度来看,这就是为什么不应该让应用程序作为管理员进行连接的原因。
发布于 2014-12-30 21:08:29
许多重要的应用程序将对象存储在数据库中。具有db访问权限(例如通过SQL注入获得)的攻击者可以通过这样的方式修改它们,即当它们是非串行化时,它们运行预期的代码。
这取决于php应用程序是否有一个具有可被滥用的__唤醒()方法的类,但是webapp作者并不完全负责这一点,因为服务器上也可能安装有可能被滥用的第三方类。
( Fleche指出的SELECT INTO OUTFILE问题也值得注意,尽管*nix服务器通常是与自己的用户一起安装的,这种攻击是不可能的)
https://security.stackexchange.com/questions/77039
复制相似问题