{"id":5676,"date":"2024-01-16T16:38:39","date_gmt":"2024-01-16T15:38:39","guid":{"rendered":"https:\/\/ekiwi.de\/?p=5676"},"modified":"2024-01-17T18:31:53","modified_gmt":"2024-01-17T17:31:53","slug":"wordpress-webseite-gehackt-seltsamer-code-mit-eval","status":"publish","type":"post","link":"https:\/\/ekiwi.de\/index.php\/5676\/wordpress-webseite-gehackt-seltsamer-code-mit-eval\/","title":{"rendered":"WordPress-Webseite gehackt? Seltsamer Code mit eval"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_83 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Inhalt<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/ekiwi.de\/index.php\/5676\/wordpress-webseite-gehackt-seltsamer-code-mit-eval\/#Das_Script_und_Code\" >Das Script und Code<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/ekiwi.de\/index.php\/5676\/wordpress-webseite-gehackt-seltsamer-code-mit-eval\/#WordPress_bereinigen\" >WordPress bereinigen<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/ekiwi.de\/index.php\/5676\/wordpress-webseite-gehackt-seltsamer-code-mit-eval\/#Update_Code_auch_in_der_functionsphp\" >Update: Code auch in der functions.php<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/ekiwi.de\/index.php\/5676\/wordpress-webseite-gehackt-seltsamer-code-mit-eval\/#Passwoerter_aendern_und_Sessions_schliessen\" >Passw\u00f6rter \u00e4ndern und Sessions schlie\u00dfen<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/ekiwi.de\/index.php\/5676\/wordpress-webseite-gehackt-seltsamer-code-mit-eval\/#Und_nun\" >Und nun?<\/a><\/li><\/ul><\/nav><\/div>\n<p>Verd\u00e4chtiger getarnter Code in Webseite entdeckt. <\/p>\n<p><!--more--><\/p>\n<p>Heute kam eine Warnmeldung des Virenscanners beim Besuch einer unserer Webseiten. Eine verd\u00e4chtige URL wurde aufgerufen. Ich bin der Sache nat\u00fcrlich gleich nachgegangen und habe in den Netzwerk-Tools des Browsers nachgeschaut, was so aufgerufen wird. Hier ist mir die Domain &#8222;cdn.specialtaskevents.com&#8220; aufgefallen.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Das_Script_und_Code\"><\/span>Das Script und Code<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/2024\/01\/hack_1.png\" alt=\"\" width=\"445\" height=\"71\" class=\"alignnone size-full wp-image-5677\" srcset=\"\/wp-content\/uploads\/2024\/01\/hack_1.png 445w, \/wp-content\/uploads\/2024\/01\/hack_1-300x48.png 300w\" sizes=\"auto, (max-width: 445px) 100vw, 445px\" \/><\/p>\n<p>Doch hoher kam das Script? F\u00fcndig wurde ich an anderer Stelle. Hier wurde jetzt zumindest eine Zeilennummer mitgegeben.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/2024\/01\/hack_2.png\" alt=\"\" width=\"739\" height=\"69\" class=\"alignnone size-full wp-image-5679\" srcset=\"\/wp-content\/uploads\/2024\/01\/hack_2.png 739w, \/wp-content\/uploads\/2024\/01\/hack_2-300x28.png 300w\" sizes=\"auto, (max-width: 739px) 100vw, 739px\" \/><\/p>\n<p>In Zeile 138 wurde ich dann f\u00fcndig. Hier war ein Java-Script, welches so erstmal nicht anderweitig zuordbar ist. Ist ja bei WordPress und der F\u00fclle an Plugins immer nicht so einfach.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/2024\/01\/hack_3.png\" alt=\"\" width=\"633\" height=\"218\" class=\"alignnone size-full wp-image-5681\" srcset=\"\/wp-content\/uploads\/2024\/01\/hack_3.png 633w, \/wp-content\/uploads\/2024\/01\/hack_3-300x103.png 300w\" sizes=\"auto, (max-width: 633px) 100vw, 633px\" \/><\/p>\n<p>Das Script ist verd\u00e4chtig! Es wird eine Variable deklariert, welche einen Base64 kodierten String enth\u00e4lt. Hier war ChatGPT recht hilfreich und konvertierte die Funktion zur\u00fcck.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/2024\/01\/hack_5.png\" alt=\"\" width=\"569\" height=\"233\" class=\"alignnone size-full wp-image-5683\" srcset=\"\/wp-content\/uploads\/2024\/01\/hack_5.png 569w, \/wp-content\/uploads\/2024\/01\/hack_5-300x123.png 300w\" sizes=\"auto, (max-width: 569px) 100vw, 569px\" \/><\/p>\n<p>Was wir hier sehen ist ein weiterer kodierter String, welcher eine URL enth\u00e4lt. Diese wird dann als weiteres Script der Webseite beigef\u00fcgt, ausgef\u00fchrt und anschlie\u00dfend wieder entfernt.<\/p>\n<p>Die URL zeigte auf folgenden Server:<\/p>\n<blockquote><p>\nThe decoded content of the inner Base64 string is a URL: https:\/\/near.flyspecialline.com\/hnkKKF.\n<\/p><\/blockquote>\n<p>Ich habe das Script hier auch gleich mal heruntergeladen. Es ist noch st\u00e4rker &#8222;verschl\u00fcsselt&#8220; und deutlich l\u00e4nger. ChatGPT war hier auch nicht mehr in der Lage das Script zu entschl\u00fcsseln.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/2024\/01\/hack_6.png\" alt=\"\" width=\"1014\" height=\"581\" class=\"alignnone size-full wp-image-5685\" srcset=\"\/wp-content\/uploads\/2024\/01\/hack_6.png 1014w, \/wp-content\/uploads\/2024\/01\/hack_6-300x172.png 300w, \/wp-content\/uploads\/2024\/01\/hack_6-768x440.png 768w\" sizes=\"auto, (max-width: 1014px) 100vw, 1014px\" \/><\/p>\n<p>Allerdings gab es online eine <a href=\"https:\/\/obf-io.deobfuscate.io\/\">M\u00f6glichkeit, das Script<\/a> halbwegs zu entschl\u00fcsseln. Auch hier erstmal eine \u00e4hnliche Vorgehensweise. Ein weiteres Script wird nachgeladen, diesmal von &#8222;cdn.specialtaskevents.com&#8220;.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/2024\/01\/hack_7.png\" alt=\"\" width=\"566\" height=\"349\" class=\"alignnone size-full wp-image-5687\" srcset=\"\/wp-content\/uploads\/2024\/01\/hack_7.png 566w, \/wp-content\/uploads\/2024\/01\/hack_7-300x185.png 300w\" sizes=\"auto, (max-width: 566px) 100vw, 566px\" \/><\/p>\n<p>Auch hier findet sich wieder ein l\u00e4ngliches Script, welches am Ende ein paar interessante Dinge enth\u00e4lt. So wird auf WordPress-Cookies geschaut und entsprechend Code ausgef\u00fchrt.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/2024\/01\/hack_8.png\" alt=\"\" width=\"531\" height=\"164\" class=\"alignnone size-full wp-image-5689\" srcset=\"\/wp-content\/uploads\/2024\/01\/hack_8.png 531w, \/wp-content\/uploads\/2024\/01\/hack_8-300x93.png 300w\" sizes=\"auto, (max-width: 531px) 100vw, 531px\" \/><\/p>\n<p>In dem Script ist jeweils eine weite URL eingebaut, welches das gleiche Script erneut enth\u00e4lt. Meine Vermutung w\u00e4re hier, dass das Script im Falle eines Serverfehlers das Script von einem alternativen Server l\u00e4dt.<\/p>\n<p>Leider ist es mir nicht gelungen, das Script vollst\u00e4ndig zu entschl\u00fcsseln, aber w\u00fcrde mich nicht wundern, wenn hier die Session gekapert wird um sich Zugriff auf die WordPress-Instanz zu verschaffen.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"WordPress_bereinigen\"><\/span>WordPress bereinigen<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Kommen wir nun zur Bereinigung. Diese gestaltete sich zum Gl\u00fcck erstmal einfach. Das Script wurde in die &#8222;<strong>wp-blog-header.php<\/strong>&#8220; eingebunden und war damit zumindest leicht zu entfernen. Das Script habe ich direkt \u00fcber FTP entfernt, bzw. ohne Login und nicht online.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Update_Code_auch_in_der_functionsphp\"><\/span>Update: Code auch in der functions.php<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Noch ein kleines Update. Nachdem ich gestern noch die Serveradressen \u00fcber Google gesucht habe, bin ich auf einen <a href=\"https:\/\/www.bleepingcomputer.com\/forums\/t\/793455\/complex-wordpress-php-js-exploit\/\">Foreneintrag gesto\u00dfen<\/a>, welcher das gleiche Problem\/Hack beschreibt.<\/p>\n<p>Dieser verweist darauf, dass in der &#8222;functions.php&#8220; ebenfalls Code eingef\u00fcgt wird. Dies hat nicht alle WordPress-Seiten betroffen. Den Code habe ich nur in einer Webseite gefunden. Ich vermute, dass diese Webseite am Ende auch das Einfallstor war.<\/p>\n<p>Der Eintrag im Forum beschreibt auch noch, dass ein neuer Benutzer mit Admin-Rechten angelegt wird. Dies konnte ich nicht nachvollziehen bzw. scheint bei uns nicht aufgetreten zu sein.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/2024\/01\/hack_add_1.jpg\" alt=\"\" width=\"1217\" height=\"126\" class=\"alignnone size-full wp-image-5700\" srcset=\"\/wp-content\/uploads\/2024\/01\/hack_add_1.jpg 1217w, \/wp-content\/uploads\/2024\/01\/hack_add_1-300x31.jpg 300w, \/wp-content\/uploads\/2024\/01\/hack_add_1-1024x106.jpg 1024w, \/wp-content\/uploads\/2024\/01\/hack_add_1-768x80.jpg 768w\" sizes=\"auto, (max-width: 1217px) 100vw, 1217px\" \/><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Passwoerter_aendern_und_Sessions_schliessen\"><\/span>Passw\u00f6rter \u00e4ndern und Sessions schlie\u00dfen<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Nachdem dies erledigt war, habe ich mich eingeloggt. Vorher pr\u00fcfen, ob das Script noch im Cache ist (Netzwerktools) und ggf. den Cache leeren. In der Kontoverwaltung habe ich dann das Kennwort ge\u00e4ndert und auch alle Sessions abgemeldet.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/2024\/01\/hack_9.png\" alt=\"\" width=\"674\" height=\"254\" class=\"alignnone size-full wp-image-5691\" srcset=\"\/wp-content\/uploads\/2024\/01\/hack_9.png 674w, \/wp-content\/uploads\/2024\/01\/hack_9-300x113.png 300w\" sizes=\"auto, (max-width: 674px) 100vw, 674px\" \/><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Und_nun\"><\/span>Und nun?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Wie das Script hinein gelang, ist bedauerlicherweise noch unklar und muss beobachtet werden. Da dies nur auf einem Webspace auftrat, gehe ich davon aus, dass hier ggf. ein unsicheres Plugin daf\u00fcr verantwortlich ist.<\/p>\n<p>Die n\u00e4chsten Tage steht in jedem Fall eine regelm\u00e4\u00dfige \u00dcberpr\u00fcfung an.<\/p>","protected":false},"excerpt":{"rendered":"<p>Verd\u00e4chtiger getarnter Code in Webseite entdeckt.<\/p>\n","protected":false},"author":1,"featured_media":2698,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[591,51],"tags":[1140,144,132,52],"class_list":["post-5676","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-security","category-wordpress","tag-hack","tag-security","tag-sicherheit","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/ekiwi.de\/index.php\/wp-json\/wp\/v2\/posts\/5676","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ekiwi.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ekiwi.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ekiwi.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ekiwi.de\/index.php\/wp-json\/wp\/v2\/comments?post=5676"}],"version-history":[{"count":0,"href":"https:\/\/ekiwi.de\/index.php\/wp-json\/wp\/v2\/posts\/5676\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ekiwi.de\/index.php\/wp-json\/wp\/v2\/media\/2698"}],"wp:attachment":[{"href":"https:\/\/ekiwi.de\/index.php\/wp-json\/wp\/v2\/media?parent=5676"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ekiwi.de\/index.php\/wp-json\/wp\/v2\/categories?post=5676"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ekiwi.de\/index.php\/wp-json\/wp\/v2\/tags?post=5676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}