python考点SSTI&反序列化&字符串

python考点SSTI&反序列化&字符串
Yatming的博客在大量的比赛真题复现中,将涉及到渗透测试的题库进行了语言区分,主要以 Python, PHP,Java为主,本章节将各个语言的常考点进行真题复现讲解
- MISC(安全杂项):全称Miscellaneous。题目涉及流量分析、电子取证、人肉搜索、数据分析、大数据统计等等,覆盖面比较广。我们平时看到的社工类题目;给你一个流量包让你分析的题目;取证分析题目;都属于这类题目。主要考查参赛选手的各种基础综合知识,考察范围比较广。
- PPC(编程类):全称Professionally Program Coder。题目涉及到程序编写、编程算法实现。算法的逆向编写,批量处理等,有时候用编程去处理问题,会方便的多。当然PPC相比ACM来说,还是较为容易的。至于编程语言嘛,推荐使用Python来尝试。这部分主要考察选手的快速编程能力。
- CRYPTO(密码学):全称Cryptography。题目考察各种加解密技术,包括古典加密技术、现代加密技术甚至出题者自创加密技术。实验吧“角斗场”中,这样的题目汇集的最多。这部分主要考查参赛选手密码学相关知识点。
- REVERSE(逆向):全称reverse。题目涉及到软件逆向、破解技术等,要求有较强的反汇编、反编译扎实功底。需要掌握汇编,堆栈、寄存器方面的知识。有好的逻辑思维能力。主要考查参赛选手的逆向分析能力。此类题目也是线下比赛的考察重点。
- STEGA(隐写):全称Steganography。隐写术是我开始接触CTF觉得比较神奇的一类,知道这个东西的时候感觉好神奇啊,黑客们真是聪明。题目的Flag会隐藏到图片、音频、视频等各类数据载体中供参赛选手获取。载体就是图片、音频、视频等,可能是修改了这些载体来隐藏flag,也可能将flaq隐藏在这些载体的二进制空白位置。有时候需要你侦探精神足够的强,才能发现。此类题目主要考察参赛选手对各种隐写工具、隐写算法的熟悉程度。实验吧“角斗场”的隐写题目在我看来是比较全的,以上说到的都有涵盖。新手盆友们可以去了解下。
- PWN(溢出):PWN在黑客俚语中代表着攻破,取得权限,在CTF比赛中它代表着溢出类的题目,其中常见类型溢出漏洞有栈溢出、堆溢出。在CTF比赛中,线上比赛会有,但是比例不会太重,进入线下比赛,逆向和溢出则是战队实力的关健。主要考察参与选手漏洞挖掘和利用能力。
- WEB(wob类):WEB应用在今天越来越广泛,也是CTF夺旗竞赛中的主要题型,题目涉及到常见的Web漏洞,诸如注入、XSS、文件包含、代码审计、上传等漏洞。这些题目都不是简单的注入、上传题目,至少会有一层的安全过滤,需要选手想办法绕过。且Web题目是国内比较多也是大家比较喜欢的题目。因为大多数人开始安全都是从web开始的。
CTF夺旗-Python-支付逻辑&JWT&反序列化
打开后通过提示 -> 寻找LV6 -> 购买修改支付逻辑 -> 绕过admin限制需修改jwt值 -> 爆破jwt密匙 -> 重组jwt值成为admin -> 购买进入会员中心 -> 源码找到文件压缩源码 -> Python代码审计反序列化 -> 构造读取flag代码进行序列化打印 -> 提交获取
靶机地址:https://buuoj.cn/challenges#[CISCN2019%20%E5%8D%8E%E5%8C%97%E8%B5%9B%E5%8C%BA%20Day1%20Web2]ikun
首先注册一个账号
观察页面和url,发现这里有提示说需要提升到lv6,但是当前页面中没有lv6,并且这里说了爆破*站,在通过观察url,发现应该是有很多页,然后其中的一页就有购买lv6
通过图片链接可以知道,如果页面中存在lv6.png就说明存在lv6的购买链接
1 | import requests |
点击购买lv6发现钱不够
这里发现优惠券是前端控制的值,所以这里我直接修改优惠券的折扣,价格修改不了
修改之后点击购买,发现出现了这个页面,当前我们的用户不是admin用户,需要进行逻辑(垂直)越权
进行抓包发现:
有这个jwt,之前有说过这方面的知识点,所以这里进行利用
打开:https://jwt.io/
解密之后,还需要一个密钥
使用脚本:https://github.com/brendan-rius/c-jwt-cracker
我这里环境报错,真无语,所以直接用视频中爆破出来的值吧.
那得到之后直接修改用户为admin,密钥为:1Kun
1 | eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIn0.40on__HQ8B2-wM1ZSwax3ivRK4j54jlaXv-1JjQynjo |
查看网站源代码
下载后得到zip文件
python漏洞参考:https://github.com/bit4woo/python_sec
我们可以通过构造字符串,为对象的属性和方法进行赋值,构造payload
利用漏洞,编写脚本,生成payload
1 | import pickle |
由于become输入框是个隐藏框,可以F12删除隐藏属性,显示输入框,输入payload,点击”一键成为大会员”
也可以进行抓包
CTF夺旗-Python-Flask&jinja2&SSTI模版注入
ssti主要为python的一些框架 jinja2 mako tornado django,PHP框架smarty twig,java框架jade velocity等等使用了渲染函数,这些函数对用户的输入信任,造成了模板注入漏洞,可以造成文件泄露,rce等漏洞
如何确定Python-ssti模版注入:中间件,返回页面,关键文字提示等
- 中间件:可通过请求响应头server值判断,比如 Server:Werkzeug/0.11.15 python/3.7.0,说明后台使用python脚本编写,应该想到测试是否有SSTI漏洞。
- 返回页面:比如返回Opos!That page doesnt exist.
- 关键字提示:比如flask、inja2、mako等
如何正确利用ssti注入获取Flag:人工&工具
- 人工:判断版本-找利用类-构造Payload-绕过滤等
http://127.0.0.1:5000/acc?404_url={{%27%27.__class__.__bases__[0].__subclasses__()}}
http://127.0.0.1:5000/acc?404_url={{%22%22.__class__.__bases__[0].__subclasses__()[128].__init__.__globals__[%27popen%27](%27whoami%27).read()}}
- 工具:自动化检测工具tplmap使用
靶场演示
https://buuoj.cn/challenges#[WesternCTF2018]shrine
根据源码构造payload
1 | http://b3b4c3dc-5280-49e2-8d75-bb70c2cd1e0a.node4.buuoj.cn:81/shrine/%7B%7B1*2%7D%7D |
也可以使用工具测试。由于这里源代码中没有给出参数,因此需要在url后面加
*
1 | python tplmap.py -u http://b3b4c3dc-5280-49e2-8d75-bb70c2cd1e0a.node4.buuoj.cn:81/shrine/* |
这里检测出漏洞,但是却不能利用操作。原因是源代码中作了过滤,过滤了
看源码
app.config['FLAG'] = os.environ.pop('FLAG')
,推测{undefined{config}}
可查看所有app.config
内容,但是这题设了黑名单['config','self']
并且过滤了括号。不过python还有一些内置函数,比如url_for
和get_flashed_messages
url_for查看全局变量:
/shrine/{{url_for.__globals__}}
current_app意思应该是当前app,那我们就看当前app下的config:
/shrine/{{url_for.__globals__['current_app'].config}}
,成功拿到flag
1 | http://b3b4c3dc-5280-49e2-8d75-bb70c2cd1e0a.node4.buuoj.cn:81/shrine/%7B%7Burl_for.__globals__['current_app'].config%7D%7D |
CTF夺旗-Python-格式化字符串漏洞&读取对象
格式化字符串漏洞原理
- %操作符
- string.Template
- 调用Format方法
- f-Strings
涉及资源
- https://jwt.io/ jwt在线解密
- https://buuoj.cn/ 比赛平台
- https://www.bugku.com/ ctf库
- https://www.ctfhub.com/ ctf题
- https://www.xuenixiang.com ctf靶场、逆向
- https:/xz.aliyun.com/t/3569 Python Web之flask session&格式化字符串漏洞
- https://xz.aliyun.com/t/7746 SSTI模板注入(Python+Jinja2)
- https://gathub.com/CTFd/CTFd ctf
- https://github.com/CTFTraining ctf环境库
- https://github.com/epinna/tplmap 注入
- https://github.com/bit4woo/python_sec python渗透策略,目录
- https://github.com/brendan-rius/c-jwt-cracker JWT cracker
- https://www.cnblogs.com/liuxiaowei/p/9039622.html Flask中关于url_for()