2010-09-16 69 views
8

我的同事对他的代码不安全,并且允许用户上传要在服务器上运行的SQL文件。 他剔除了文件中的任何关键词如"EXEC", "DROP", "UPDATE", "INSERT", "TRUNC"如何利用“EXEC @sql”?

我想利用他EXEC (@sql)

我第一次尝试将与'EXEXECEC (N''SELECT ''You DRDROPOPped the ball Bob!'')'

向他展示了他的方式错误,但他可能会过滤这一切都在一个循环。

有没有一种方法可以利用我的同事的代码?或者正在过滤出足够的关键词?

编辑:我让他检查他的代码。如果代码包含一个关键字,他不会执行它。我仍然试图找出如何利用二进制转换来利用这一点。

+1

+ 1对于这样一个真棒问题。我们应该更频繁地利用我们的同事。 – 2010-09-16 22:32:07

+0

只需给我们'URL'并记录上传! – Quassnoi 2010-09-16 22:36:31

+0

至于你的第一次尝试:你是否告诉我们你的同事在他找到一个'EXEC'之后仍然试图执行一段上传的代码*? – Quassnoi 2010-09-16 22:41:46

回答

5
  1. 告诉你的同事他是个白痴。

  2. 做一个obfuscated SQL query,是这样的:

    select @sql = 0x44524f5020426f627350616e7473

这将需要一些调整取决于什么代码的其余部分看起来像,但这个想法是进行编码以十六进制代码并执行它(或者说,让它执行)。还有其他方法可以混淆注入代码。

你在那里有一个巨大的安全漏洞。有趣的是,这甚至不需要改造。阻止此类事情发生的正确方法是创建并使用具有正确权限的帐户(例如:只能对表x,y和z执行select查询)。

+1

他嘿 - 只是因为你不知道这个十六进制,当翻译成ascii时,它意味着丢弃bobspants – 2010-09-16 22:15:46

+0

嘿嘿,那个代码不起作用 – 2010-09-16 22:21:04

+0

好用户帐号,这肯定会解决他的问题。 – 2010-09-16 23:04:23