2017-05-17 6 views
2

私は(SQL Serverの2014年に)次のSQLを悪用しようとしています:"IN"条件内でSQLインジェクションを利用する方法は?

declare @maliciousSQL nvarchar(max); 
set @maliciousSQL = '???' 
exec ('SELECT SUM(quantity) from mytable where id in ' + @maliciousSQL); 

任意のSQLを実行するように細工され@maliciousSQLどのパラメータができますか?タスクがコマンド 'truncate table othertable'を実行することを前提としています - それは実行可能ですか?ヘルプ

+0

私が知る限り、INは1列のデータセットを参照する必要があるため、これを行うことはできません。回避策があるかもしれませんが、私は '回避策'の解決策の直後です。ケーベン・シイバーズ –

+0

いくつかのSQLブロックが "IN"条件の後に実行され、次にSELECT 1,2,3が正常に動作するように実行できますか?後者は本当に重要ではありません。最も重要なのはいくつかの邪悪なコードを実行することです – lekso

答えて

5

SQLインジェクションは、次のようになります

declare @maliciousSQL nvarchar(max); 
set @maliciousSQL = '(1); DELETE test1;' 
exec ('SELECT SUM(quantity) from mytable where id in ' + @maliciousSQL); 

は、セミコロンでステートメントを終了し、その後あなたがこの使用することができます

+0

Rubenの回答を正解とマークします。一分早く回答しましたが、ありがとうございます。 – lekso

+0

@lekso、実際にはNickが数秒前に来たように見える;彼にそれを渡す;) –

+1

それはすべてうまいです。SQL注入はそれほど誇りではありません! –

1

ため誰にでも

おかげであなたが実行前にSQL を設定する必要があります。私もsp_executesqlをお勧めします。だから、:

declare @maliciousSQL nvarchar(max); 
declare @sql nvarchar(max); 

set @maliciousSQL = '???' 
set @sql = 'SELECT SUM(quantity) from mytable where id in ' + @maliciousSQL; 

exec sp_executesql @sql; 
+0

申し訳ありませんが、私は間違って私の仕事を記述している可能性があります。私の質問は: 'truncate table ...'コマンドを実行するために、@maliciousSQLのパラメータはどのように見えるのですか? – lekso

2

のようなものをお書き:

set @maliciousSQL = '(1); truncate table XXX;' 

SQL文を連結せずにparameterized queriesを使用することがポイントです。

実際には、質問のタイトルは誤解を招くです:あなたことはできません実行 DML文の内部のDDL ていますが、危険な連結を可能にする場合は、複数の別々のコマンドを実行することができます悪意のある呼び出し元。

+0

とても簡単です。 – lekso

関連する問題