选的好,下次别选了
2024-1-18 15:38:3 Author: mp.weixin.qq.com(查看原文) 阅读量:2 收藏

互动实验

如果你在街上闲逛,在你眼前的摊位上摆着一个汉堡、一把刀和一串手链——如果让你从中挑选一件,那么你会选择哪件物品带走?

点击下方进行选择:

玩笑归玩笑,答案很简单:你做了一次经过判断的【选择】

这项互动,是为了让大家感受选择这个动作,每个人的答案或许都不同,这正是在分析自身需求后做出的一个决定。

偶遇一次对线

结束(记住选择),我们把目光移到最近牛牛遇到的一次网络对线:

某某:uu们,你们写yaml文件真的不费劲吗?

这段对线也引发了牛同学的些许思考和担心,毕竟Yakit里yaml的出镜率不低,而yaklang编写插件的师傅也不算少。确实,在使用一个工具时,初期会有很多人处于懵逼状态,不知做何选择来完成具体需求。在之后的分享里,牛同学会针对大家疑惑点比较多的地方做专项解答。这周,牛同学想和大家唠唠在Yakit的使用过程中,选择yaklang编写插件或使用yaml,哪个更方便呢?

Yaklang,首个国产化网络安领域编程语言。提供了非常强大的基础安全能力,是绝大部分“数据描述语言/容器语言”的超集。图灵完备,特点高效、函数级调用、自动补全、高阶工具......

YAML,一种数据序列化语言。它的设计目标是使数据在不同编程语言之间交换和共享变得简单。采用一种简洁、直观的语法,以易于阅读和编写的方式表示数据结构。

一个是大融合的网络安全垂直领域语言

一个是简洁、易读易写的数据序列化语言。

在什么样的维度下比较?选谁?

选不出来,那是必然,我们把任务点再设定得具体一点。

场景一:

现在你需要一个PoC检测功能,打开Yakit你会怎么做?

选择一

使用yaklang进行插件编写 PoC 检测,代码如下:

rsp, req = poc.HTTP(`GET / HTTP/1.1Host: www.example.com
`)~
node ,err = xpath.LoadHTMLDocument(rsp)die(err)
res := xpath.FindOne(node , "//title/text()")
title = res.Data
if title == "Example Domain" { risk.NewRisk( "www.example.com", risk.title("测试Title"), risk.description("测试"), risk.severity("low"), risk.request(req), risk.response(rsp) )}

选择二

使用 Web Fuzzer 生成 Yaml

设置数据提取器,和 匹配器

id: WebFuzzer-Template-LuxKIHKO
info: name: 测试 Test author: god severity: low description: 测试 reference: - https://github.com/ - https://cve.mitre.org/ metadata: max-request: 1 shodan-query: "" verified: true yakit-info: sign: 024cd1cef5c52bf5267e2933ae6c298a
http:- raw: - |- @timeout: 30s POST / HTTP/1.1 Content-Type: application/json Host: {{Hostname}} Content-Length: 16
{"key": "value"}
max-redirects: 3 matchers-condition: and matchers: - type: dsl part: body dsl: - title == "Example Domain" condition: and
extractors: - name: title scope: raw type: xpath xpath: - //title/text()
# Generated From WebFuzzer on 2024-01-11 17:16:19

在场景一这个具体的设定下,使用yaml会更方便一些。而使用yaklang编写插件,需要你了解一定yaklang语法,如果选择使用yaml则只需要设置一些匹配规则,随后"点点点"就可以生成如上的yaml插件了,根本不需要编写代码。

场景二:

需要进行简单探测IIOP协议,打开Yakit你会怎么做?

选择一

使用yaklang进行插件编写简单的PoC,代码如下:

conn, err = tcp.Connect(target, port, tcp.clientTimeout(4))die(err)
GIOPRequest,_ = codec.DecodeHex("47494f50010200030000001700000002000000000000000b4e616d6553657276696365")
yakit.Info("开始发送 GIOPRequest 请求")conn.Write(GIOPRequest)reply = conn.RecvTimeout(2)[0]if str.StartsWith(reply,"GIOP"){ // GIOP Header前四个字节是GIOP yakit.Info("目标: %v 发现IIOP协议,可能存在CVE-2020-2551 漏洞", target) risk.NewRisk( str.HostPort(target, port), risk.severity("high"), risk.type("poc"), risk.title("WebLogic Weblogic IIOP protocol may have CVE-2020-2551 vulnerability"), ## English Title for Risk risk.titleVerbose("WebLogic Weblogic iiop协议 可能存在CVE-2020-2551漏洞"), ## 中文标题 risk.details({ "target": target, "request": parseString(GIOPRequest), "response": parseString(reply), }), )}

选择二

使用yaml的路不太行

通过场景二可以发现,在应对一些复杂的或者畸形请求的 PoC 检测时,可能无法通过 yaml 插件的方式进行检测。能够利用Yaml 的主要场景是针对一些需要发送 Http 数据包的情况。

具体问题具体分析

选谁,是具体分析后决定的。

总的来说,插件能够覆盖绝大部分场景,实用性更广,是个万能箱;而yaml满足一些简单功能需求,所以有些场景使用yaklang编写插件会有些大材小用。比如一些简单的发包探测和匹配回显,yaml足够了,而相对复杂的检测或其他功能,就需要使用yaklang编写。

PS:插件编写对于代码编写有一定要求,所以尽可能学习一些yaklang基本语法,说不定会派上大用场。对比图如下:


yaml

yaklang编写插件

语法

语法简单,逻辑性单一

融合多种语法特性,逻辑性强

功能

功能比较固化,单一

图灵完备,按需编写

实现难度

较低

编写难易

较低,可借助UI配合生成

中,需要学习 yaklang 语法

优点

特定的固化场景使用

适应各种复杂场景

条条大路通罗马

多个工具,多种语言,如何选择成为了使用者的头号任务。条条大路通罗马是没毛病,但不是每一条路都是一样便捷。如此看来,选择是一个重要任务点。

选择谁这个问题取决于需求本身的功能复杂度和扩展度。在自身有需求时,选择合适且好用的工具。在没有交互性的大型工具之前,很多安全从业者使用二进制文件,而随着越来越多的复杂扫描器出现,选择面更多,但现在仍然有不少群体还在使用二进制,毕竟功能点单一时使用二进制会更方便。任何东西的进化总是朝着越来越便捷(lan)的方向去走的!所以,在达到“罗马”前考虑清楚哪条路更适合,当然,为了拥有更多选择空间,多学点总是没错的,技多不压身嘛。

最后,感谢在茫茫海洋中,师傅们选择了Yakit

未来,我们会继续更新迭代,实现安全融合大目标。

END

  YAK官方资源 

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

长按识别添加工作人员
开启Yakit进阶之旅


文章来源: https://mp.weixin.qq.com/s?__biz=Mzk0MTM4NzIxMQ==&mid=2247519138&idx=1&sn=8aad655f9d7c6c0042ef83639eb027e0&chksm=c2d1f706f5a67e109fe54e1f2f94e7493573bc1c9cef91dab82647e1713b493e2c45033c0b07&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh