HCTF 2018 web 部分题目 详细 writeup

0X00 前言

每年 HCTF 都收获颇丰,今年又在 L-team 队友们的帮助下学到了很多东西,记录一下,还是太菜了,要多学习才行,还有就是不要偷懒,多多尝试和研究,偷懒是一个人走向失败的开始。

0X01 warmup

热身题,hint 页面存在一个文件包含,还告诉了 flag 的文件名

如图所示:

此处输入图片的描述

扫了一下目录,发现了一个 source.php

一篇文章带你理解漏洞之 PHP 文件包含漏洞

0X01 前言

其实有想法写一个系列总结各种漏洞的,但是苦于没有充足的时间,只能先写一部分,后期再统一拿出来进行总结,这部分就是 PHP 文件包含的一些小总结。

0X02 最常见的两个函数的形象解释:

我们知道文件包含最常见的是两个函数 include() require()(这里就不谈他们的亲戚 include_once() 和 require_once() 了)

在php 这个工厂里,include() 是一个比较松散的员工,平时没有活干的时候他就闲着,从来不想着自己看有什么活主动一点,于是只有当程序运行到 include() 的时候他才会执行,并且呢也因为他松散的天性,在出错的时候他也只是报一个警告,并不会让程序中断

但是,有另一名员工 require() 他能力和include() 差不多,但是他这个人就非常的有上进心,工作认真负责,他一看到程序运行就立刻包含,不会像include() 一样等别人催,并且 require() 还会在出错的时候非常认真地报错,并小心谨慎地阻止程序继续运行

LCTF 2018 T4lk 1s ch34p,sh0w m3 the sh31l 详细分析

0X00 两道题两个非预期

本来就出了这一道题,PHP 代码是用 orange 的改的,我本想设计一个不可上传,但是路径可知的目录,然后利用 java 的 xxe 实现文件上传,再利用 move 移动到那个已知的路径,通过反序列化临时文件来触发已知路径中的文件包含 getshell,但是由于我自己对orange 代码中沙盒的理解的不到位,导致了这道题彻底的非预期,后来我干脆删除了 java 的部分,因为师傅们发现 data 目录其实在 cookie 中能得到,而我在反序列化的时候也没有限制 data 目录的反序列化,并且上传的文件可控,那这样就直接能 getshell, 第二题虽然我限制了不能反序列化 data 目录下面的文件,但是由于我自己写 read_secret 时候的失误导致了另一个非预期,read_secret 本来应该是一个 shell 脚本,但我写成了一个字符串,返回值是 Null ,所以 cookie 中的 hmac 签名不攻自破,路径也就可以伪造,然后利用这种方法 getshell ,但是实际上这个两个题的代码就差了过滤 data 和 .. 的正则,还有一点像吐槽的就是我那个评论框真的是因为人性化做的不好,似乎人们都觉得那个是假的似的,那我下面的主要分析就按照我一开始的想法分析了。

搭建 Spring MVC 框架踩坑记

0X00 前言

出于出LCTF 2018 题目的原因,不得不自己搭建一个 Spring MVC 框架,虽然这只是一地步,但是踩了无数的坑,我在这里简单的记录一下

0X01 创建项目

怎么创建项目呢,创建什么项目呢?这本身就是一个问题,后来在TG师傅的指点下,我最终选择了使用 maven 的方式创建项目,因为这种方法使用 pom.xml 统一管理 jar 包,添加和管理都很方便

如图所示:

此处输入图片的描述

一篇文章带你深入理解漏洞之 PHP 反序列化漏洞

0X00 前言

自从 Orange 在 2017年的 hitcon 出了一个 0day 的 php phar:// 反序列化给整个安全界开启了新世界的大门以后,php 反序列化这个漏洞就逐渐升温,没想到后来 2018 年 blackhat 的议题上这个问题再次被提及,利用的还是 Orange 的思路(我只能 orz),到现在 phar:// 反序列化已经成为了各大 CTF 炙手可热的思路,就仿佛 2016 年的 CVE-2016-7124 绕过 __weakup 一样,于是我也把这篇文章提上日程,希望能在对整个 PHP 反序列化漏洞的剖析过程中对其有更深入的理解,也希望读者在读我的文章中能有不一样的体验和收获(如果真的是这样,这将是我莫大的荣幸)

0X01 什么是序列化和反序列化

1.从 json 开始类比

我先不说序列化,大家都看到过 json 数据吧,json 什么样子的

如图所示:

此处输入图片的描述

一篇文章带你理解漏洞之 XXE 漏洞

一、XXE 是什么

介绍 XXE 之前,我先来说一下普通的 XML 注入,这个的利用面比较狭窄,如果有的话应该也是逻辑漏洞

如图所示:

此处输入图片的描述

既然能插入 XML 代码,那我们肯定不能善罢甘休,我们需要更多,于是出现了 XXE

XXE(XML External Entity Injection) 全称为 XML 外部实体注入,从名字就能看出来,这是一个注入漏洞,注入的是什么?XML外部实体。(看到这里肯定有人要说:你这不是在废话),固然,其实我这里废话只是想强调我们的利用点是 外部实体 ,也是提醒读者将注意力集中于外部实体中,而不要被 XML 中其他的一些名字相似的东西扰乱了思维(盯好外部实体就行了),如果能注入 外部实体并且成功解析的话,这就会大大拓宽我们 XML 注入的攻击面(这可能就是为什么单独说 而没有说 XML 注入的原因吧,或许普通的 XML 注入真的太鸡肋了,现实中几乎用不到)

ThinkPHP5 的简单搭建和使用

0X01 Thinkphp 的安装

我这里选择的是使用 windows 下的 composer 进行安装,收下首先下载 composer 这个工具,安装完成以后进入我们想要创建项目的文件夹输入下面的命令

composer create-project topthink/think tp5 dev-master --prefer-dist

这样就会在当前目录下形成一个 名为 tp5 的文件夹,这个文件夹中存放的就是 thinkphp5 的基本的框架

0X02 重点目录结构及文件介绍

1.目录结构

application : 应用目录,我们的模型视图控制器都会放在这个文件夹下,这是我们开发的主阵地

public : 这个是我们项目的入口文件,thinkphp 是一个单一入口的框架

thinkphp : 框架的核心目录

一篇文章带你理解漏洞之 Python 反序列化漏洞

0X00 前言

在分析了 PHP 的反序列化漏洞以后我打算将这个反序列化漏洞从语言层面进行扩展,然后我就看中了 python ,网上搜了一下,国内系统的讲 Python 反序列化漏洞的文章比较少,内容也是零零散散,于是我打算自己分析一下 Python 反序列化漏洞造成的命令执行和任意代码执行,然后弥补这个空缺。

0X01 Python 的序列化和反序列化是什么

Python 的序列化和反序列化是将一个类对象向字节流转化从而进行存储和传输,然后使用的时候再将字节流转化回原始的对象的一个过程。

1.用代码展示序列化和反序列化的过程:

为了看起来直观一些,我写了一个示例代码:

一篇文章带你理解漏洞之 SSTI 漏洞

0X00 前言:

这是“一篇文章带你理解漏洞”系列的第一篇文章,漏洞没有特定的介绍顺序,写作的目的主要是希望能将整个漏洞的框架完整的搭建起来(框架也就是所谓的前因后果->纵向,类比迁移->横向,探寻方法->技巧),而不是对漏洞的某一方面的简单陈述,我认为在没有完整的漏洞框架的基础上去单纯地学习怎么利用这种漏洞是没有意义的。

0X01 什么是注入:

看之前先记住一句话:注入就是格式化字符串漏洞的一种体现

我们都知道,在01 的世界里,很多的漏洞都能归结为格式化字符串漏洞(不管是二进制还是web),二进制中我们能通过格式化字符串漏洞覆盖返回地址等,web中 SQL 注入就是一个非常好的例子,我们在开发者本来认为我们应该插入正常数据的地方插入了sql语句,这就破坏了原本的SQL 语句的格式,从而执行了与原句完全不同含义的SQL 语句达到了攻击者的目的,同理 XSS 在有些情况下的闭合标签的手法也是利用了格式化字符串这种思想,总之,凡是出现注入的地方就有着格式化字符串的影子。

Redis 基础梳理以及其在渗透测试中的利用

0X00 前言:

之前一直说 NOSQL ,也看了不少文章对于未授权 NOSQL 的攻击案例,知道大致怎么用,但是自己一直没有尝试好好使用过,感觉对比 MYSQL 而言,我太轻视 NOSQL ,于是这次下定决心以 Redis 作为例子好好玩玩,特此记录备忘。

0X01 简介

我们知道 NOSQL 和 MYSQL 的差距还是非常大的,他不再是关系型数据库(也就是说他不在存在表这种东西),那他是什么呢?实际上它是以键值对的形式存放数据的,很像 json 的形式,并且与关系型数据库相比 Redis 能存储的数据类型也多得多,它不仅能存储字符串型的数据,还能存储其他四种类型:list,set,zset(有序),hash (就算是和同类 NOSQL 数据库 memcached 相比他也强大的多,因为 memcached 仅能支持比较单一的 key-value ),它支持数据在硬盘的持久化(EDB 快照或者是 AOF 的形式),还有一个特点就是他的所有操作都是原子性的,也就是说要么成功执行,要么就完全不执行。

|