0x01 初识Yak
1)什么是Yak
Yak 是一门纯 Golang 的嵌入式语言,是一门纯 Golang 实现的基于反射特性的语言,语法在一定程度上保留了 Golang 的风格,甚至可以实现 Golang 语言的对象无缝开放给 Yak 使用的功能。
Golang 的一些令人惊叹的特性我们在 Yak 中也可以找到实现,比如大家熟悉或者有所耳闻的 go func() {} ()
,defer
关键字,chan <T>
等。
在保留这些优秀功能的同时,我们极大的简化了 Golang 的语法,移除了静态类型的特性,移除了严格的语法检查,这是一门动态强类型语言,同时,我们也尽力兼容了一些动态语言常见的使用场景。
最令人激动的其实是我们在语言内置了各种安全从业人员需要的安全扫描工具和前无古人的模糊测试模块。
我们希望 Yak 对与安全从业人员是相当友好的,10 分钟即可上手!如果你熟悉 Golang 和 Python,我相信 Yak 一定也是你将会非常喜爱的胶水语言。(以上均来源于yak官网)
2)Yak的优势
Yak的优势来源于它自带的网络安全函数库,可以给渗透人员或者安全研发人员带来便利。常用的功能函数库有servicescan()
、subdomain()
、http()
、str()
、poc()
等等。
下面讲解常用的功能函数作用,并且我们学习Yak也可以从学习语法到学习函数再到自己写Yak的工具。
servicescan()
函数的作用为扫描识别目标主机的端口号以及端口开放的服务。
subdomain()
函数的作用为对目标域名进行子域名收集的功能。
nuclei()
函数的作用就是集成了nuclei漏扫,毕竟谁会拒绝自己写的工具具有漏扫功能。
spacengine()
函数的作用就是对接了fofa、shodan、360quake、hunter、zoomeye五大搜索引擎的API接口。
str()
函数的作用是对接收的字符串进行接收和处理,在我们制作Yak的工具中会经常使用。
poc()
函数的作用为写payload提供了统一的模板。
还有很多网络安全功能函数,这里就暂时提几个常用的功能函数。
3)Yak的官方文档地址链接
Yak的官方文档链接,有兴趣学习的可以直接去官方文档进行学习-->https://www.yaklang.io/docs/intro
0x02 安装Yak环境
1)Windows安装Yak环境
使用管理员权限打开cmd命令行
输入安装命令
powershell (new-object System.Net.WebClient).DownloadFile('https://yaklang.oss-cn-beijing.aliyuncs.com/yak/latest/yak_windows_amd64.exe','yak_windows_amd64.exe') && yak_windows_amd64.exe install && del /f yak_windows_amd64.exe
或者直接访问网址下载
Windows(x64) 下载:
https://yaklang.oss-cn-beijing.aliyuncs.com/yak/1.1.3/yak_windows_amd64.exe
MacOS(intel/m1) 下载:
https://yaklang.oss-cn-beijing.aliyuncs.com/yak/1.1.3/yak_darwin_amd64
Linux(x64) 下载:
https://yaklang.oss-cn-beijing.aliyuncs.com/yak/1.1.3/yak_linux_amd64
安装完成之后,使用命令"yak version"查看是否安装完成
2)macOS/Linux安装
命令行直接输入
bash <(curl -sS -L http://oss.yaklang.io/install-latest-yak.sh)
3) VSCode安装Yak
首先下载VSCode程序语言编辑器,网址https://code.visualstudio.com/download
打开VSCode,找到扩展按钮,输入yaklang
到此,Yak环境安装结束,开始学习Yak语言。
0x03 Yak语法之运算符
1)前言
从作者学习编程语言的经验来看,我们如果学一门语言进行学习,首先从一门语言的语法开始学习,然后对语言中的函数运用,最后开始开发该语言相关的项目。
2)Yak对比C的运算符
运算符,对照C语言的运算符以及运算符优先级(学编程就是要从基础开始,基础不牢地动山摇,图片来源于https://blog.csdn.net/changexhao/article/details/82556761)
Yak中的常用运算符
加减乘除 '+' '-' '*' '/'
取余数 '%'
赋值运算符,这里要注意一下的是'='和':='是一样的,':='是为了让Go语言使用者使用习惯。 '=' ':='
位运算 '^' '&' '&^' '|' '<<' '>>'
运算赋值,值得注意的是,++ 和 -- 只能用在变量后,如i++/i--,意思就是i++之后i+1,i--同理。 '+=' '-=' '*=' '/=' '%=' '++' '--'
位运算赋值 '^=' '&=' '&^=' '|=' '<<=' '>>='
单位运算符,取反 '!'
逻辑比较运算符 '>=' '<=' '>' '<' '==' '!=' '&&' '||'
特殊运算符,操作Golang通道,适用于缓冲区
'<-'
针对于'<-'做理解说明。
可以将'<-'理解为一个仓库进行入库和出库的操作(先进先出)。
比如,ch = make(chan var,3)创建了一个var类型的缓冲区,可以暂存三个元素。
入库操作
ch <- 12 一号仓库的值为12
ch<-34 二号仓库的值为34
ch<-56 三号仓库的值为56
出库操作
No1 = <- ch 变量No1的数值为12,此时一号仓库里面的值12被取出,值34被推到一号仓库,值56被推到二号仓库。
No2 = <- ch 变量No2的数值为34,此时一号仓库里面的值34被取出,值56被推到一号仓库。
No3 = <- ch 变量No3的数值为56,此时一号仓库里面的值56被取出,仓库为空。
到此,运算符的使用方式说明结束,而Yak的运算符的优先级可以参考C语言的运算符优先级。
最后请各位大佬关注微信公众号:乌托邦安全团队,后面会持续更新Yak相关的学习经验。如有侵权,请联系作者。
公众号输入Yak教程第一课,获取当前课件。
作者:CV
原文始发于微信公众号(乌托邦安全团队):Yak编程之运算符
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论