python SimpleXMLRPC Serverの python docsでは、次のように言及されています。
警告 allow_dotted_names オプションを有効にすると、侵入者がモジュールのグローバル変数にアクセスできるようになり、侵入者がマシン上で任意のコードを実行できるようになる可能性があります。このオプションは、安全な閉じたネットワークでのみ使用してください。
今、私は次のコードを持つサーバーを持っています:
from xmlrpc.server import SimpleXMLRPCServer
from xmlrpc.server import SimpleXMLRPCRequestHandler
server = SimpleXMLRPCServer(("localhost", 8000),
requestHandler=RequestHandler)
server.register_introspection_functions()
server.register_function(pow)
def adder_function(x,y):
return x + y
server.register_function(adder_function, 'add')
class MyFuncs:
def mul(self, x, y):
return x * y
server.register_instance(MyFuncs(), allow_dotted_names=True)
server.serve_forever()
この脆弱性を悪用して、サーバーに任意のコードを挿入する方法を説明してください。上記のコードに脆弱性がない場合は、悪用される可能性のある例とそのクライアント コードを示してください。