buuctf web wp 4
[buuctf] web区 write up 4这一节开始慢慢上难度了; [SCTF2019]Flag Shop代码审计开门见审计 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647<script> function buyFlag() { fetch("/shop", { method: 'POST', // or 'PUT' headers: new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' }) }) .then(res => res.text()) ...
Matrix 3 - CTF
Matrix 3 - CTF vulhub, 难度中等 信息收集主机发现 端口扫描 访问网页 打开源码, 发现有个隐藏的图片: 用 binwalk 等检测了一下, 暂时没发现信息隐藏, 访问 /Matrix: 目录爆破是一个类似迷宫一样的小游戏, 大概就是要访问到 /Matrix/?/?/?/?/? 才能走出迷宫。前面如果乱选, 在第三轮就会走到死胡同, 但是如果前三轮分别选了 n, e, o, 后面就还要再选两轮, 结合这个作者前面的习惯, 估计前三位就是 neo, 接下来用 Burpsuite 的 Intruder, 方式选 Cluster Bomb, 两处 payload 从 0 遍历到 9 即可: 发现结果是 /Matrix/n/e/o/6/4: 访问这个界面, 有个 secret.gz, 不过解压不出来, cat 一下发现就是个文本文件, 内容是 admin:76a2173be6393254e72ffa4d6df1030a 后面这一串看起来很像 md5, 碰撞一下发现就是 passwd 的 md5 哈希。 站点: crackstation,...
buuctf web wp 3
[buuctf] web区 write up 3[b01lers2020]Welcome to Earth题解刚进来就显示在一个逃脱界面, 十秒钟之后就转到了 /die/ 下并显示你挂了, 还挺幽默。 看了下 JS 源码, 10秒设置了自动跳转 /die/, 另外还有个 /chase/ 目录: 12345678910111213141516171819202122document.onkeydown = function(event) { event = event || window.event; if (event.keyCode == 27) { event.preventDefault(); window.location = "/chase/"; } else die(); }; function sleep(ms) { return new Promise(resolve =>...
buuctf web wp 2
[buuctf] web区 write up 2[CSCCTF 2019 Qual]FlaskLight题解进入发现是一个搜索页面, 搜个 1 试试: 接下来尝试 {{7*'7'}}, 发现此处存在 Jinja2 SSTI 注入: 1{{''.__class__.__mro__[2].__subclasses__()}} 其中能看到 file 类是第 41 个, 读一个文件试试: 1{{''.__class__.__mro__[2].__subclasses__()[59]('/etc/passwd').read()}} 之后尝试调用自建函数, 结果返回 500, 改用 self.__init__ 起点, 依然失败, 推测过滤了 globals,...
buuctf web wp 1
[buuctf] web区 write up 1[GYCTF2020]FlaskApp题解启动靶机, 是一个对输入进行 base64 编码/解码 的小程序。 经过尝试发现解码界面会输出解码后的结果, 猜测此处存在 Flask SSTI 注入: 构造 payload, 发现存在关键词被过滤, 用拼接字符串的方式绕过: 123{{''.__class__.__base__.__subclasses__()[127].__init__.__globals__.__builtins__['__imp'+'ort__']('o'+'s')['po'+'pen']('l'+'s').read()}}# 也就是#...
bilibili write up
XCTF - bilibiliXCTF 之 bilibili 难度:9, 方向:Web 打开主页: 好像无从下手, 尝试了一下目录爆破 + 简单的 SSTI 和 sqli 尝试, 暂时没有突破口, 看一下网页源码: 打靶记录信息收集看来应该是要在网页的购物篮里找 lv6 这个商品..翻了几页没翻到, 二分法找了一下发现一共有 500 页, 4500 个商品, 考虑写个脚本。 先看一下商品页面的网页源码: 123456<div class="jumbotron commodity-info"><div class="grids_of_3"><a href="/info/3"><img src="/static/img/b.png?v=f333849d89831d610cf384756c1216e5" alt=""/><img class="lv"...
SUCTF 2019 easyweb write up
[SUCTF 2019] easyweb 题目来源: BUUCTF [SUCTF 2019] easyweb 题解拼凑字符串绕过正则表达式刚打开靶机就是 php 审计: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 <?phpfunction get_the_flag(){ // webadmin will remove your upload file every 20 min!!!! $userdir = "upload/tmp_".md5($_SERVER['REMOTE_ADDR']); if(!file_exists($userdir)){ mkdir($userdir); } if(!empty($_FILES["file"])){ $tmp_name =...
SSTI 1 - (Flask) 总结
SSTI 1 - (Flask) 总结 SSTI - 基于 Flask + Jinja2 的服务端模板注入SSTI 注入原理模板引擎的核心是动态执行开发者预设的”魔术方法“或函数,而攻击者正是利用这种动态性注入恶意代码。 数据结构下面从数据结构层面系统阐述类、对象、实例的关系,并以此为基础解析SSTI注入本质: 数据结构层面上, 类 (Class), 对象 (Object), 实例 (Instance) 的关系: (以 Python 为例) 1234567891011121314class User: # 类定义 (蓝图) def __init__(self, name): self.name = name # 实例属性 def greet(self): # 实例方法 return f"Hello, {self.name}"# 创建实例 user1 = User("Alice") # user1是User类的实例...
Linux IR - 应急响应排查
Linux IR - 应急响应排查最近遇到了一个 Linux 应急响应 (Linux Incident Response) 的突发事件, 记录一下遇到的问题, 踩到的坑, 系统的响应流程以及常用命令。 应急响应流程 (PDCERP)应急响应流程总的来说就是分为两部分, 未雨绸缪和亡羊补牢。 准备 (Preparation) 提前建立响应能力, 指定相关计划, 组建并培训 IR 团队, 准备相应的工具包等等。最典型的活动就是管理日志, 网络流量捕获。 检测 (Detection & Analysis) 发现并确认安全事件, 监控告警, 并进行初步分析。 遏制 (Containment) 隔离受感染系统,阻止攻击扩散。切断网络, 拔网线 (物理), 主机隔离, 杀掉进程等。 根除 (Eradication) 彻底清除攻击载体, 之后二次扫描比对等, 确保完全删除恶意文件。对 Linux 来说, 需要注意授权密钥对, crontab 等。 恢复 (Recovery) 问题解决后逐渐解决业务正常运行。 事后总结 (Post-Incident...
手撕脏牛漏洞 (Dirty-COW)
手撕 Dirty-cow最近项目手里的工作比较少, 正好可以整理一下之前学到的东西 本文尝试从竞态条件开始, 一步步深入, 最终完全理解著名的脏牛漏洞。 竞态条件漏洞先来复习一下什么是竞态条件漏洞, 这一点在操作系统课程中其实讲过多次: 竞态条件漏洞发生于多个进程并发执行并共享资源, 并且最终运行结果依赖于这几个进程的精确执行时序时。 典型例子: 银行转账问题举一个典型的例子, 假设张三的银行账户里有 1000 元存款, 现在要去一台 ATM 机取款, ATM 执行如下逻辑: 校验: 检查余额是否足够 1000 元, 如果不足, 则直接弹出; 取款: 如果余额足够, 则令扣除 1000 元余额, 并取出 1000 元现金; 显然没有问题, 张三能顺利把钱取走。 现在把 ATM 增加到两台: 张三在 ATM A 取款, 他的朋友李四在 ATM B 使用相同的账户取款: 如果张三和李四的其中一人先完成了取款操作, 则显然另一人的取款操作会失败, 因为此时 ATM...




























































