身世酒杯中,万事皆空。

0x01 Introduction

在golang代码审计中遇到了这种情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package main

import (
"bytes"
"text/template"
)

type Callback struct {
URL string `json:"url"` // 回调接口url
Body string `json:"body"` // 请求体
}

type Test struct {
*Callback
Attack string
}

func main() {
test := Test{
Callback: &Callback{
URL: "http://",
Body: "xxxxxxx",
},
Attack: "xxxxxx",
}

urlTemplate, err := template.New("url").Parse(test.URL)
if err != nil { panic(err) }

var urlBuffer bytes.Buffer
err = urlTemplate.Execute(&urlBuffer, test)
if err != nil { panic(err) }

bodyTemplate, err := template.New("body").Parse(test.Body)
if err != nil { panic(err) }
var bodyBuffer bytes.Buffer
err = bodyTemplate.Execute(&bodyBuffer, test)
}

可以从简化代码中看出,template解析的\{\{\}\}均为外部可控的的string传入,目测可以做一些操作,故深入研究一下。

1
2
> $ go version
go version go1.13.1 darwin/amd64

0x02 Tag

之前在看Tag的时候,并没有太理解这个东西有什么用,golang的官方解释如下:

A field declaration may be followed by an optional string literal tag, which becomes an attribute for all the fields in the corresponding field declaration. An empty tag string is equivalent to an absent tag. The tags are made visible through a reflection interface and take part in type identity for structs but are otherwise ignored.

Tag会在reflection interface中课件,且参与到type的定义中,从下面这个例子中可以看出tag会在反射的方法中做自动转换:

1
2
3
4
5
6
7
// A struct corresponding to a TimeStamp protocol buffer.
// The tag strings define the protocol buffer field numbers;
// they follow the convention outlined by the reflect package.
struct {
microsec uint64 `protobuf:"1"`
serverIP6 uint64 `protobuf:"2"`
}
Read More

0x01 Intro

Web选手之前未对bin/pwn的漏洞有过接触,同时也无相关基础,在某个漏洞遇到了这种利用,故管中窥豹一番。

0x02 Question1

存在flag文件,owner和owner_group均为root,文件权限600。现有以下以下代码编译而成的readflag程序。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>

int main(int argc, char* argv[]) {
int fd;
int size = 0;
char buf[256];

if(argc != 2) {
printf("usage: %s <file>\n", argv[0]);
exit(1);
}

struct stat stat_data;
if (stat(argv[1], &stat_data) < 0) {
fprintf(stderr, "Failed to stat %s: %s\n", argv[1], strerror(errno));
exit(1);
}

if(stat_data.st_uid == 0)
{
fprintf(stderr, "File %s is owned by root\n", argv[1]);
exit(1);
}

fd = open(argv[1], O_RDONLY);

if(fd <= 0)
{
fprintf(stderr, "Couldn't open %s\n", argv[1]);
exit(1);
}

do {
size = read(fd, buf, 256);
write(1, buf, size);
} while(size>0);

}

gcc readflag.c -o readflag 编译,且使用 chmod 4755 readflag 添加SetUID权限(s权限)

ubuntu 18.04 gcc7.5.0

1
2
3
4
5
6
➜  race ls -la readflag
-rwsr-xr-x 1 whip1ash whip1ash 8792 Jun 14 16:20 readflag

//执行效果如下
➜ race ./readflag ./flag
File ./flag is owned by root

分析

首先使用stat函数读取文件信息,后判断st_uid是否为0,若不为0则读取文件内容。

Read More

0x01 Intro

第一次接触js的逆向是从17年的hctf中,之后,也时常会遇到过需要解开Webpack/混淆js的情景。近几日遇到了一个批量刷票的需求,目标是投票网http://wenjuan.com/

目标

  1. 逆向投票网的防刷票机制,实现自动化投票。
  2. 总结鄙人常用的chrome debug操作,望能提供有需求逆向js同学帮助。

结构

本文结构从实例开始,当中穿插Chrome Debug逆向使用操作、分析、脚本编写等,最后进行总结。

0x02 从需求开始

目标:https://www.wenjuan.in/s/6N3iy2u

HTTP分析

走了一遍流程,发现是可以重复投票的,只要你点击在此参与即可,抓了一下数据包,发现流程如下:

Read More

距离上次一次blog更新时隔将近两年了。20年为了毕业,搞了半年的nlp的实践(知识图谱-KnowledgeGraphInference)。下半年刚开始打工,这将近一年的时间里做了很多关于业务工作,但无法公开分享,主要是职场新人,这里面水太深,把握不住(其实是懒)。现在重新回归,继续更新我的blog。

目标

解答日常在代码审计中常见模糊点。

已有基础

  1. 简单了解golang语法,0 golang编写基础
  2. 能够熟练复制别人的代码并跑过编译
  3. 熟练掌握面向对象编程
  4. 大概知道go的struct是个啥。通过下面这篇文章。

《Go Struct超详细讲解》
https://juejin.cn/post/6844903814168838151

了解了以下几个点:

struct 定义如下

1
2
3
4
5
6
7
8
9
type Member struct {
key1 int
key2, key3 string
}

var (
m1 = Member{id:1}
)
var m1 Member
  1. 结构体也可以不包含任何字段,称为空结构体,struct{}表示一个空的结构体,注意,直接定义一个空的结构体并没有意义,但在并发编程中,channel之间的通讯,可以使用一个struct{}作为信号量。
Read More

该文实际发于06/06/2021,之前未完全公开具体细节。

不讲武德

11月9日晚上,有个朋友问我,马老师发生什么事了,给我发了来几张截图。我一看,噢,原来是前几天,saltstack公布了安全更新,一个CVE-2020-16846,一个CVE-2020-25592,这两个一起用能未授权RCE。。

Abstract

在对CVE-2020-17490和CVE-2020-16846进行分析后,发现CVE-2020-17490的补丁存在未修补完全的情况,导致wheel_async仍然存在未授权访问,可以调用wheel模块中的方法,基于此对SaltStack的wheel模块中的方法进行分析,最终发现加载配置模块存在模板注入,可以实现远程代码执行。

不再赘述,CVE-2020-17490、CVE-2020-16846,分析文章在这里

Background

SaltStack是VMware子公司,其产品用于运维管理,能够支持数万台服务器,主要功能是配置文件管理和远程执行命令,十分易用且强大,在github有11.4k star,阿里云的Nacos与之类似,不过Nacos管理的是微服务。

SaltStack只用python开发,采用C/S架构,其中Server被称为Master,Client被称为Minion,即一个Master能够向多个Minion下发配置文件,远程执行命令。SlatStack是系统总称,主要有salt、salt-master、salt-minion、salt-api等程序组成,其中salt-master和salt-minion的功能为从指定路径读取配置文件并启动。salt-master监听4505和4506端口,分别用于发布消息和接受监控数据。

salt程序可以调用大量函数,并可以指定minion或指定一组minion作为目标。salt-api可以使用cherrypy或tornado来对外提供REST接口,默认使用cherrypy。

Read More

写在之前

本文为鄙人的毕业论文,之前对机器学习这玩意儿毫无了解,迫于毕业压力跟一帮毫无经验的硬件同学研究了好几个月的NLP。最后算是跑通了整个链路,但是效果可以说是差强人意,完全无法用的一个模型。鄙人典型的蛮干党,什么数学原理都不懂,搞了一些论文读了一读,上手就干他妈的,最后发现完全玩不转,但最后还是沉淀下来一些经验,我当时做这块发现实践资料非常少,故发出,给水毕业论文的学生一些参考。

本项目为笔者毕业设计,于2019年12月了解到该项目,在此前对机器学习无任何了解。在大学期间(2016-2019)一直学习安全相关知识,主攻WEB安全,目前研究方向为云原生安全。故对WEB前端、后台、数据库有一定的知识储备和了解,同时对于各种编程语言有一定的了解。本项目并非笔者一己之力,团队规模为7人,均为某邮2016级电子信息工程专业的学生。

PS: 黑色的地方不是没有图片,而是图片的背景是透明的,所以就黑了,建议点开观看。也可以在此处看最后交给学校的pdf版本。
https://whip1ash.cn/file/Design%20of%20Knowledge%20Graph%20and%20Knowledge%20Inference%20System%20Based%20on%20Neural%20Network.pdf

Introduction

Background

近年来,随着人工智能的迅速发展,支持人工智能的技术逐渐被更多人了解并研究,知识图谱就是其中很重要的一个技术。目前,知识图谱在很多日常生活的很多方面都已经得到了非常广泛的应用。比如语义化的搜索引擎(Google,Baidu等),移动助手(Mobile assistant)(Siri,Cortana等),以及一些智能问答机器人(intelligent chatbots)。

知识图谱相关的支持技术在很早就已经开始得以发展,比如语义网、逻辑描述和专家系统等,但知识图谱(Knowledge Graph)这个概念来源于Google在2012年发起的一个项目,在此提出”Knowledge Graph: things, not strings”,但Google官方并没有给出知识图谱的定义,同时也没有一个得到广泛认可的知识图谱的定义。所以,在2018年,基于图1的架构提出了对于知识图谱的定义。

未命名文件 -2-

A knowledge graph acquires and integrates information into an ontology and applies a reasoner to derive new knowledge.

Read More

Abstract

Nginx配置不当,导致换行符(“\n”)能够使FastCGI的PATH_INFO参数为空,PHP-FPM未考虑PATH_INFO为空情况,导致下溢(underflow),使其能够覆盖PHP全局变量,从而导致RCE。

目前Exp只影响PHP7全版本,根据洞主说法,也能够在PHP 5.6能够导致Crash。

本文粗略结构如下:

  1. 漏洞复现
  2. Exp分析
  3. 漏洞分析

Reproduction

Env

Ubuntu 18.04
PHP 7.2.19
Nginx 1.14.0

Exp地址: https://github.com/neex/phuip-fpizdam
Clone下来后go build .

Nginx Config

Read More

0x01 Abstract

本文简单描写了tctf的web第二题”Wallbreaker Easy”的解题方法,以此题为出发点,探索一些通过Imagick来bypass disable_functions的方法。通过自动化测试来寻找启动子进程的后缀名处理和API函数,从而寻找可以劫持的程序(通过LD_PRELOAD)和发现可能会存在命令注入的函数(在启动的新进程中执行命令)。

此思路并非原创,只是在前人的基础上提出一点自己的思考和实现。

环境: Ubuntu 18.04 + PHP 7.2.15 + Imagick 3.4.3RC2

通过sudo apt install php php-fpm php-imagick安装。

0x02 TCTF 2019 Wallbreaker Easy WP

题目描述如图,并且提示ubuntu 18.04/sudo apt install php php-fpm php-imagick
-w630

主要使用了一个老手法的新利用,这位大佬找到一个扩展修饰符,可以在main函数前执行,这样就省去了使用LD_PRELOAD需要寻找可用函数的问题。详情见此篇文章。
巧用LD_PRELOAD突破disable_functions

如果不了解LD_PRELOAD。见此篇文章。
利用环境变量LD_PRELOAD来绕过php disable_function执行系统命令 – YiYang

既然前提有了,只需要找到可以利用函数就可以了。大佬通过查找ImageMagic的文档发现,在处理ilbm的文件的时候会启动ilbmtoppm程序,而这个程序是ubuntu 18.04自带的。

Read More

原文在这里。其实这篇Paper很值得研究,并能够应用在日常的漏洞挖掘中。本文不是直译过来的,原文党请移步原版。翻译此文只是为了加深的理解,我的英语也很一般,尽量讲得让大家都看懂吧。能力一般,水平有限,多多谅解,有问题希望大家与我多交流,共同探讨。Orz

Abstract

HTTP请求通常被认为是相互独立的实体。在这篇文章中,我将探讨一些被遗忘的技术。通过这种技术,远程未授权的攻击者能够打破HTTP请求的独立性,并拼接攻击者的请求到其他请求中。我在数个军方和商业的Web基础设施上找到了这个问题,并将我的exp拼接到正常的用户请求中,因此我在赏金项目中获得了7万刀的奖励。

通过案例,我将为你展示如何精巧地篡改受害者的请求,使这些请求被送到一个恶意的域中,使其得到有害的响应,并获得回显(lure credentials into your open arms)。我同样将证明使用后端重组请求的方式,将会使得前端(请求)[注:这里的前后端是指服务器在数据流中不同的位置]的信任被利用,这会导致能够使用最大权限来调用内部API,污染Web缓存,使PayPal的登录页面不再安全。

HTTP Request Smuggling最早的记录是在2005年,由Watchfire提出。但由于其难以利用,所以它多年来一直被忽略,但是近年来Web设备受这个漏洞影响的概率在增加。我将帮助您解决这个遗留问题,包括新的攻击形式和利用向量,通过定制的开源工具和一种可靠的黑盒测试的新方法,同时将收到影响的风险降到最低。

Core concepts

自动HTTP/1.1开始,通过单个TCP或者SSL/TLS套接字来发送多个HTTP请求就被广泛的支持。这个协议非常的简单,HTTP请求被简单的拼接在一起,然后服务器通过解析HTTP头部来分别同一个套接字中的不同的HTTP请求。它经常和HTTP管道(HTTP pipelining)搞混,HTTP管道是一种不常见的子类型,不在本文的探讨范围之内。

仅仅针对这项功能而言,这是无害的。而然,现代的网站由一系列的系统组成,全通过HTTP通信。这种多层架构导致不同用户的HTTP请求通过同一个TCP/TLS链接来传输。

这就意味着后端在处理请求时,需要和前端识别的请求结束的位置一样,这是至关重要的。换种说法,攻击者可能发送一个边界模糊的消息,它将会在后端被分割成两个不同的HTTP请求。

Read More

Intro

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

正文

引子

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

本文的【目标读者】

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

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

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

“货币经济学”是啥?

Read More
⬆︎TOP