目录:

安装与连接

监听器Listner

基本使用方法--Cobalt Strike生成后门

Beacon详解

菜单栏与视图

文件管理与进程管理

浏览器代理

Cobalt Strike扩展

提权

横向移动

参考

 

Cobalt Strike: C/S架构的商业渗透软件,适合多人进行团队协作,可模拟APT做模拟对抗,进行内网渗透。

本文介绍3.14版本。

安装与连接

链接:https://pan.baidu.com/s/1mtR3J_W3IQL-hdioxTdDig

提取码:tbel

服务器端kali Linux

将下载的CS程序放到Kali中,执行./teamserver 192.168.56.130 vege 即可启动Team Server服务。192.168.43.43表示本机IP地址,vege表示从客户端登录时需要填写的密码。

CS服务端程序会监听TCP 50050端口。

客户端win10

将下载的CS程序放到Windows中,切换到CS程序目录,在命令行窗口中运行java -jar cobaltstrike.jar即可启动客户端(也可以直接运行.exe程序),然后输入IP地址、用户名、密码等信息即可登录

用户名随意写,其他要填准确

登录成功后会看到如下操作界面:

客户端可以是任意操作系统,服务器端必须是linux,例如,我们也可以用kali linux连接服务器端:

可以通过点击Cobalt Strike ->New Connection 来连接多台服务器

监听器Listner

1Cobaltstrike Listner简介

Listner(监听器):专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。

在许多的渗透测试工具中,例如empire,metasploit,cobaltstrike中都有Listner的存在。大家可以简单地理解为Listner就是用来接收目标主机权限的模块。

创建Listener的步骤:Cobaltstrike-->监听器

目前我用的是Cobaltstrike3.14版本,其中内置了九个Listener。

windows/beacon_dns/reverse_dns_txt

windows/beacon_dns/reverse_http

windows/beacon_tcp/bind_tcp

windows/beacon_http/reverse_http

windows/beacon_https/reverse_https

windows/beacon_smb/bind_pipe

windows/foreign/reverse_http

windows/foreign/reverse_https

windows/foreign/reverse_tcp

beacon为CS内置监听器,也就是说,当我们在目标系统成功执行Payload以后,会弹回一个beacon的shell给CS。

foreign主要是提供给外部使用的一些监听器,比如你想利用CS派生一个meterpreter的shell回来,来继续后面的内网渗透,这时就选择使用外部监听器。

2Listener的配置

选择Cobaltstrike-->listener

随后输入Listener名字并选择你要使用的Listner类型,配置好IP和端口(不能冲突)点击save即可保存,在以后生成Payload的过程中即可使用该监听器。

基本使用方法--Cobalt Strike生成后门

HTML Application #生成恶意的HTA木马文件
MS Office Macro #生成office宏病毒文件
Payload Generator #生成各种语言版本的payload
USB/CD AutoPlay #生成利用自动播放运行的木马文件
Windows Dropper #捆绑器,能够对文档类进行捆绑
Windows Executable #生成可执行Payload
Windows Executable(S) #把包含payload,Stageless生成可执行文件(包含多数功能)

这里只演示一下Payload Generator   :

该模块可以生成多种语言的Payload,包括C,C#,Java,Perl,Powershell,Powershell命令,Python ,Ruby,Raw,Veil等

以Powershell Command为例,生成的Payload为一串命令,只要在主机上执行这一串命令(主机需安装Powershell),CS即可收到主机的beacon

CS生成的木马默认60秒回连一次,这就导致我们不能实时操作远程PC。通过修改sleep时间可以达到实时操作的功能,可以把sleep时间修改为1秒或0秒。(不过比建议将sleep改这么小,不然流量会很明显)

单击鼠标右键然后选择Interact会进入命令行交互窗口. 在界面最底下有个beacon>输入框,这就是输入命令的地方, 输入help会显示帮助文档(详细看下一节)。

通过CS还能浏览被控PC的文件目录,实现截屏、端口扫描等功能。

不过到目前为止,我们掌握的是PC电脑的普通权限。

CS内置的提权脚本很少

GitHub上有个提权工具包,使用这个工具包可以增加几种提权方法:https://github.com/rsmudge/ElevateKit

点击Script Manager按钮打开脚本管理界面,然后点击底下的Load按钮加载elevate.cna文件。

选择合适的exp进行提权,当然不知道用哪个的话也可以都试试。

如果提权成功,session列表中会增加一个新会话,星号(*)表示该会话是一个提权成功的会话。

这里只想简要介绍一下,详细介绍参见后文。

Beacon详解

Beacon命令

右键目标interact来使用Beacon,我们用它来执行各种命令。注意:Beacon中不能直接输入cmd命令,比如要让目标机执行ipconfig这条cmd命令,对应的Beacon命令是shell ipconfig

输入help会显示帮助文档

beacon> help
Beacon Commands
===============
Command                   Description
-------                   -----------
argue                     进程参数欺骗
blockdlls                 阻止子进程加载非Microsoft DLL
browserpivot              注入受害者浏览器进程
bypassuac                 绕过UAC提升权限
cancel                    取消正在进行的下载
cd                        切换目录
checkin                   强制让被控端回连一次
clear                     清除beacon内部的任务队列
connect                   Connect to a Beacon peer over TCP
covertvpn                 部署Covert VPN客户端
cp                        复制文件
dcsync                    DC中提取密码哈希
desktop                   远程桌面(VNC)
dllinject                 反射DLL注入进程
dllload                   使用LoadLibraryDLL加载到进程中
download                  下载文件
downloads                 列出正在进行的文件下载
drives                    列出目标盘符
elevate                   使用exp提权
execute                   在目标上执行程序(无输出)
execute-assembly          在目标上内存中执行本地.NET程序
exit                      终止beacon会话
getprivs                  Enable system privileges on current token
getsystem                 尝试获取SYSTEM权限
getuid                    获取用户ID
hashdump                  转储密码哈希值
help                      帮助
inject                    在注入进程生成会话
jobkill                   结束一个后台任务
jobs                      列出后台任务
kerberos_ccache_use       ccache文件中导入票据应用于此会话
kerberos_ticket_purge     清除当前会话的票据
kerberos_ticket_use       Apply ticket文件中导入票据应用于此会话
keylogger                 键盘记录
kill                      结束进程
link                      Connect to a Beacon peer over a named pipe
logonpasswords            使用mimikatz转储凭据和哈希值
ls                        列出文件
make_token                创建令牌以传递凭据
mimikatz                  运行mimikatz
mkdir                     创建一个目录
mode dns                  使用DNS A作为通信通道(仅限DNS beacon)
mode dns-txt              使用DNS TXT作为通信通道(仅限D beacon)
mode dns6                 使用DNS AAAA作为通信通道(仅限DNS beacon)
mode http                 使用HTTP作为通信通道
mv                        移动文件
net                       net命令
note                      备注       
portscan                  进行端口扫描
powerpick                 通过Unmanaged PowerShell执行命令
powershell                通过powershell.exe执行命令
powershell-import         导入powershell脚本
ppid                      Set parent PID for spawned post-ex jobs
ps                        显示进程列表
psexec                    Use a service to spawn a session on a host
psexec_psh                Use PowerShell to spawn a session on a host
psinject                  在特定进程中执行PowerShell命令
pth                       使用Mimikatz进行传递哈希
pwd                       当前目录位置
reg                       Query the registry
rev2self                  恢复原始令牌
rm                        删除文件或文件夹
rportfwd                  端口转发
run                       在目标上执行程序(返回输出)
runas                     以其他用户权限执行程序
runasadmin                在高权限下执行程序
runu                      Execute a program under another PID
screenshot                屏幕截图
setenv                    设置环境变量
shell                     执行cmd命令
shinject                  shellcode注入进程
shspawn                   启动一个进程并将shellcode注入其中
sleep                     设置睡眠延迟时间
socks                     启动SOCKS4代理
socks stop                停止SOCKS4
spawn                     Spawn a session 
spawnas                   Spawn a session as another user
spawnto                   Set executable to spawn processes into
spawnu                    Spawn a session under another PID
ssh                       使用ssh连接远程主机
ssh-key                   使用密钥连接远程主机
steal_token               从进程中窃取令牌
timestomp                 将一个文件的时间戳应用到另一个文件
unlink                    Disconnect from parent Beacon
upload                    上传文件
wdigest                   使用mimikatz转储明文凭据
winrm                     使用WinRM横向渗透
wmi                       使用WMI横向渗透

二、多种Beacon

SMB Beacon

1、简介

官网介绍:SMB Beacon使用命名管道通过父级Beacon进行通讯,当两个Beacons连接后,子Beacon从父Beacon获取到任务并发送。

因为连接的Beacons使用Windows命名管道进行通信,此流量封装在SMB协议中,所以SMB Beacon相对隐蔽,绕防火墙时可能发挥奇效。

2SMB Beacon使用

这种Beacon要求具有SMB Beacon的主机必须接受端口445上的连接。

派生一个SMB Beacon方法:在Listner生成SMB Beacon>目标主机>右键> spawn >选中对应的Listener>上线

或在Beacon中使用命令spawn smb(smb为我的smb listener名字)

运行成功后外部可以看到∞∞这个字符,这就是派生的SMB Beacon。

当前是连接状态,你可以Beacon上用link <ip>命令链接它或者unlink <ip>命令断开它。

这种Beacon在内网横向渗透(后面会讲)中运用的很多。在内网环境中可以使用ipc $生成的SMB Beacon上传到目标主机执行,但是目标主机并不会直接上线的,需要我们自己用链接命令(link <ip>)去连接它。

DNS Beacon

DNS Beacon在绕过防火墙 权限维持上非常有效,DNS beacon可谓是最受欢迎的Cobalt Strike功能之一。

官网给出的原理示意图如下:

使用DNS Beacon首先要有一个域名,域名建议用国外的,省去一些不必要的麻烦,也防止被查水表。域名使用一些通用平常的即可,整个配置过程非常简单,一条A记录和几条NS记录即可。

(由于本菜没有域名,以下暂没办法复现,图源网络)

首先进入到域名管理界面

配置A记录指向服务器ip -->ns记录都指向A记录域名

配置好了我们可以用nslookup或者dig +trace来测试下是否成功:

如果返回的IP地址与你的服务器IP地址对应是正确的,那我们就可以开始配置dns beacon的监听器了。

Host那里最好填域名(A记录解析那个),不要填服务器的IP地址。

然后确定填上ns记录,英文逗号隔开,然后生成后门测试效果。

这是主机栏上出现了一个黑屏的logo,经过一段时间的等待,目标主机即可上线。

SSH beacon

目前有两种SSH Beacon连接方法:

①密码直接连接

Beacon命令: ssh [target:port] [user] [pass]

②SSH密匙连接

ssh [target:port] [user] [/path/to/key.pem]

连接成功后,就会出现一个子Beacon。

菜单栏与视图

菜单栏

1.新建连接
2.断开当前连接
3.监听器
4.改变视图为Pivot Graph(可以显示各个目标的关系)
5.改变视图为Session Table(会话列表)
6.改变视图为Target Table(目标列表)
7.查看凭据信息
8.查看文件下载
9.查看键盘记录
10.查看屏幕截图
11.生成无状态Beacon后门
12.java自签名程序攻击
13.生成office宏后门
14.生成脚本通过web传递(利用powershell,bitsadmin,regsvr32生成会话)
15.在Cobalt Strikeweb服务上托管一个文件(提供一个文件下载)
16.管理Cobalt Strike上运行的web服务
17.帮助
18.关于

Cobalt Strike

New Connection #新的连接(支持连接多个服务器端)
Preferences #偏好设置(设置Cobal Strike界面、控制台、以及输出报告样式、TeamServer连接记录等)
Visualization #窗口视图模式(展示输出结果的形式)
VPN Interfaces #VPN接入
Listenrs #监听器(创建Listener)
Script Manager #脚本管理
Close #关闭

View

Applications #应用(显示受害者机器的应用信息)
Credentials #凭证(通过hashdumpMimikatz抓取过的密码都会储存在这里)
Downloads #下载文件
Event Log #事件日志(主机上线记录以及团队协作聊天记录)
Keystrokes #键盘记录
Proxy Pivots #代理模块
Screenshots #截图
Script Console #脚本控制台(可以加载各种脚本,增强功能https://github.com/rsmudge/cortana-scripts) 
Targets #显示目标主机
Web Log #Web日志

Attacks

Packages

HTML Application #生成恶意的HTA木马文件
MS Office Macro #生成office宏病毒文件
Payload Generator #生成各种语言版本的payload
USB/CD AutoPlay #生成利用自动播放运行的木马文件
Windows Dropper #捆绑器,能够对文档类进行捆绑
Windows Executable #生成可执行Payload
Windows Executable(S) #把包含payload,Stageless生成可执行文件(包含多数功能)

Web Drive-by

Manage #对开启的web服务进行管理
Clone Site #克隆网站(可记录受害者提交的数据)
Host File #提供Web以供下载某文件
Scripted Web Delivery #提供Web服务,便于下载和执行PowerShell Payload,类似于Metasploitweb_delivery 
Signed Applet Attack #启动一个Web服务以提供自签名Java Applet的运行环境
Smart Applet Attack #自动检测Java版本并利用已知的exploits绕过security
System Profiler #用来获取一些系统信息,比如系统版本,Flash版本,浏览器版本等

Reporting

0. Activity report #活动报告
1. Hosts report #主机报告
2. Indicators of Compromise #威胁报告
3. Sessions report #会话报告
4. Social engineering report #社会工程学报告
5. Tactics, Techniques, and Procedures #策略、技巧和程序  
Reset Data #重置数据
Export Data #导出数据

Help

Homepage #官方主页
Support #技术支持
Arsenal #开发者
System information #版本信息
About #关于

右键菜单

Interact

详见 “Beacon命令”

Access

Dump Hashes #获取hash
Elevate #提权
Golden Ticket #生成黄金票据注入当前会话
Make token #凭证转换
Run Mimikatz #运行 Mimikatz 
Spawn As #用其他用户生成Cobalt Strike侦听器

Explore

Browser Pivot #劫持目标浏览器进程(浏览器代理)
Desktop(VNC) #远程桌面
File Browser #文件管理
Net View #命令Net View
Port Scan #端口扫描
Process List #进程列表
Screenshot #截图

Pivoting

SOCKS Server #代理服务
Listener #反向端口转发
Deploy VPN #部署VPN

Spawn

外部监听器(如指派给MSF,获取meterpreter权限)

Session

Note #备注
Remove #删除
Sleep #指定被控端休眠时间,默认60秒一次回传,让被控端每10秒来下载一次任务。实际中频率不宜过快,容易被发现。
Exit #退出

文件管理与进程管理

文件管理

右键菜单->Explore->File Browser

Upload上传、Make Directory创建目录、List Drives列出盘符、Refresh刷新

文件上传并执行

点击按钮upload,选择要上传的文件

选中文件可以进行复制、下载、执行、删除

执行文件时要求你输入要执行程序的参数,不需要参数直接点击确定就好。

文件下载

右键要下载的文件,Download,然后在菜刀栏点击下载按钮查看下载的文件

下载的文件会保存在CS下的downloads目录下

进程管理

右键菜单->Explore->Process List

Kill关闭程序、Refresh刷新进程列表、Inject是把beacon注入进程、Log Keystrokes键盘记录、Steal Token窃取运行指定程序的用户令牌

Inject进程注入

所谓进程注入就是把你的beacon会话注入到另外一个进程之中,注入后,即使你传入的后面进程被关闭,你依然可以维持目标机的权限。

用法:选中目标进程,点击Inject,然后会弹出选择监听器的框,可以选择现有的,也可以添加,选择完毕之后CS会弹回一个目标机的新的会话。

窃取token

在进程列表中,寻找以域管理员身份运行的进程,并选定进行steal token,如果成功,则会返回域管权限的beacon。

浏览器代理

选择一个beacon,右键,Explore-->Browser Pivot

配置好相关的端口信息后,点击Launch,即可使用目标机的指定端口作为浏览器代理

随后cobaltstrike就会注入浏览器代理dll到进程中

我们通过配置我们服务器的IP、端口,即可使用目标机作为浏览器代理。

Socks

Socks概念

目前利用网络防火墙将组织内部的网络结构与外部网络如
INTERNET 中有效地隔离开来,这种方法正变得逐渐流行起来。这些防火墙系统通常以应用层网关的形式工作在网络之间,提供受控的
TELNET 、 FTP 、 SMTP 等的接入。SOCKS 提供一个通用框架来使这些协议安全透明地穿过防火墙。

说的简单明了一点,在渗透测试中,我们使用socks技术,可以穿透进入目标机的内网,从而扩大我们的战果。

Cobaltstrike自带Socks功能

选择一个beacon,右键,Pivoting-->SOCKS Server,或使用命令socks [port]

弹出一个窗口,按要求配置好代理端口。

如图,成功开启socks 4,连接我们teamserver的17701端口,即可进入目标机内网。

Cobalt Strike扩展

扩展是Cobalt Strike一个极为重要的模块,它有效地丰富了Cobalt Strike的功能。

选择菜单栏的Cobalt Strike-->Script Manager,点击load,然后选择cna扩展文件即可,旁边的unload为去除该扩展,reload为重新加载该扩展。

在前面我们曾介绍过提权脚本,现在再介绍几个其他好用的脚本:

脚本名称:Persistence_Meau.cna

脚本功能:持久化控制集合

脚本名称:AVQuery.cna

脚本功能:查询目标所安装的所有杀软

AV_Query   使用powershell查询注册表,查找目标上安装的所有AV

脚本名称:RedTeamRepo.cna

脚本功能:提示一下常用的渗透命令

RedRepo Windows/Linux/Tips

更多请看:

https://github.com/harleyQu1nn/AggressorScripts

提权

选择beacon,右键,Access-->Elevate。

MS14-058、MS15-051、MS16-016  :
windows本地提权漏洞

UAC-DLL

这是一种绕过UAC的攻击,它试图将本地管理员运行的有效负载从低权限提升到高权限。此攻击使用UAC漏洞将ArtifactKit生成的DLL复制到特权位置。此攻击适用于Windows7和Windows8及更高版本的未修补版本。

uac-token-duplication  :

这是另一种绕过UAC的攻击,将其从低权限提升到高权限(作为本地管理员)。这种攻击使用一个UAC漏洞,允许非提升进程使用从提升进程中窃取的token启动任意进程。此漏洞要求攻击删除分配给提升token的多个权限。此攻击适用于Windows7及更高版本。如果AlwaysNotify处于其最高设置,则此攻击要求提升的进程已在当前桌面会话中运行(作为同一用户),此漏洞使用PowerShell生成会话。

横向移动

1、横向渗透概念

横向渗透攻击技术是复杂网络攻击中广泛使用的一种技术,特别是在高级持续威胁(Advanced
Persistent Threats,APT)中更加热衷于使用这种攻击方法。攻击者可以利用这些技术,以被攻陷的系统为跳板,访问其他主机,获取包括邮箱、共享文件夹或者凭证信息在内的敏感资源。

攻击者可以利用这些敏感信息,进一步控制其他系统、提升权限或窃取更多有价值的凭证。借助此类攻击,攻击者最终可能获取域控的访问权限,完全控制基于Windows系统的基础设施或与业务相关的关键账户。

在提权后,我们可以用mimikatz
dump目标机的凭证,并进行内网横向移动。

2Psexec横向移动

在执行端口扫描后,目标视图中,选择一个目标,右键-->登录--psexec,即可选择凭证进行横向移动。

如果该机使用了和之前的目标机一样的凭证,则会成功返回一个system beacon。

3、窃取token

在进程列表中,寻找以域管理员身份运行的进程,并选定进行steal
token,如果成功,则会返回域管权限的beacon。

4、其他手段横向移动

①使用各种系统漏洞:比如说用ms17-010,ms08-067批量检测一下内网。

②弱口令检测

内网中ssh弱口令,各种数据库的弱口令可谓是层出不穷。Mysql可以mof提权,sqlserver可以xp_cmdshell,redis写shell,oracle也有方法执行系统命令。

③中间件漏洞

这个就非常常见了,比如weblogic各种rce漏洞等等。

④Web端漏洞

参考

https://www.jianshu.com/p/8d823adbc6b5

https://www.cnblogs.com/ichunqiu/p/12134247.html

Cobalt Stike使用教程的更多相关文章

  1. Cobalt Strike系列教程第五章:截图与浏览器代理

    Cobalt Strike系列教程分享如约而至,新关注的小伙伴可以先回顾一下前面的内容: Cobalt Strike系列教程第一章:简介与安装 Cobalt Strike系列教程第二章:Beacon详 ...

  2. Cobalt Strike系列教程第四章:文件/进程管理与键盘记录

    Cobalt Strike系列教程分享如约而至,新关注的小伙伴可以先回顾一下前面的内容: Cobalt Strike系列教程第一章:简介与安装 Cobalt Strike系列教程第二章:Beacon详 ...

  3. Cobalt Strike系列教程第三章:菜单栏与视图

    通过前两章的学习,我们掌握了Cobalt Strike教程的基础知识,及软件的安装使用. Cobalt Strike系列教程第一章:简介与安装 Cobalt Strike系列教程第二章:Beacon详 ...

  4. Cobalt Strike系列教程第二章:Beacon详解

    上周更新了Cobalt Strike系列教程第一章:简介与安装,文章发布后,深受大家的喜爱,遂将该系列教程的其他章节与大家分享,提升更多实用技能! 第二章:Beacon详解 一.Beacon命令 大家 ...

  5. Cobalt Strike系列教程第七章:提权与横向移动

    Cobalt Strike系列教程分享如约而至,新关注的小伙伴可以先回顾一下前面的内容: Cobalt Strike系列教程第一章:简介与安装 Cobalt Strike系列教程第二章:Beacon详 ...

  6. Cobalt Strike系列教程第六章:安装扩展

    Cobalt Strike系列教程分享如约而至,新关注的小伙伴可以先回顾一下前面的内容: Cobalt Strike系列教程第一章:简介与安装 Cobalt Strike系列教程第二章:Beacon详 ...

  7. Cobalt Strike系列教程第一章:简介与安装

    Cobalt Strike是一款超级好用的渗透测试工具,拥有多种协议主机上线方式,集成了提权,凭据导出,端口转发,socket代理,office攻击,文件捆绑,钓鱼等多种功能.同时,Cobalt St ...

  8. 渗透测试神器Cobalt Strike使用教程

    Cobalt Strike是一款渗透测试神器,常被业界人称为CS神器.Cobalt Strike已经不再使用MSF而是作为单独的平台使用,它分为客户端与服务端,服务端是一个,客户端可以有多个,可被团队 ...

  9. CS远控

    Cobaltstrike 一.基础使用 ./teamserver 192.168.43.224 123456 启动服务器端 在windows下的链接 双击bat文件即可 在linux下 ./start ...

随机推荐

  1. Tarjan算法(模板)

    算法思想: 首先要明确强连通图的概念,一个有向图中,任意两个点互相可以到达:什么是强连通分量?有向图的极大连通子图叫强连通分量. 给一个有向图,我们用Tarjan算法把这个图的子图(在这个子图内,任意 ...

  2. js 的 new 干了什么

  3. NSObject常用方法

    类 @interface NSObject <NSObject> { Class isa OBJC_ISA_AVAILABILITY; } // 初始化加载 + (void)load; / ...

  4. [bzoj1191]超级英雄hero<二分图匹配*匈牙利算法>

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1191 今天随便在bzoj找了一题做,题一读完就发现是个匈牙利算法的裸题,原本以为可以一次过 ...

  5. python之xlrd和xlwt模块读写excel使用详解

    一.xlrd模块和xlwt模块是什么      xlrd模块是python第三方工具包,用于读取excel中的数据:      xlwt模块是python第三方工具包,用于往excel中写入数据: 二 ...

  6. JAVA实现图片验证

    一.什么是图片验证码? 可以参考下面这张图: 我们在一些网站登陆的时候,经常需要填写以上图片的信息. 这种图片验证方式是我们最常见的形式,它可以有效的防范恶意攻击者采用恶意工具,来进行窃取用户的密码 ...

  7. MySQL(Linux)编码问题——网站刚刚上线就被光速打脸

    MySQL(Linux)编码问题--刚刚上线就被光速打脸 MySql默认编码问题 总结了一下,大致是这样的 修改数据库配置 在URL上加载参数 MySql默认编码问题 说到这里真的想哭,改了无数bug ...

  8. 如何用git将本地项目push到Github

    Step1 github页面:创建一个仓库(如何创建github仓库,你可能需要参考这篇教程),库名(Repository name)为你打算放在github上的项目名称.例如: ![](https: ...

  9. 如何将 .NetFramework WebApi 按业务拆分成多个模块

    在 .NetFramework 中使用 WebApi ,在不讨论 微服务 的模式下,大部分都是以层来拆分库的 : 基础设施 数据存储层 服务层 WeApi 层 一些其它的功能库 项目结构可能会像下面这 ...

  10. Go语言笔记 (2) 变量命名与多重赋值

    变量命名 1.大小写 观摩以下代码: func main() { var m int = "你" var M int = "我" fmt.Println(m,M ...