2010-09-16 73 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